mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 21:39:10 -04:00
xilinx xrt platforms configuration
This commit is contained in:
parent
8bb5e5ab8a
commit
e38c2c1fba
18 changed files with 167 additions and 136 deletions
|
@ -275,9 +275,9 @@ config2()
|
|||
# test single-bank DRAM
|
||||
CONFIGS="-DPLATFORM_MEMORY_BANKS=1" ./ci/blackbox.sh --driver=opae --app=mstress
|
||||
|
||||
# test 27-bit DRAM address
|
||||
CONFIGS="-DPLATFORM_MEMORY_ADDR_WIDTH=27" ./ci/blackbox.sh --driver=opae --app=mstress
|
||||
CONFIGS="-DPLATFORM_MEMORY_ADDR_WIDTH=27" ./ci/blackbox.sh --driver=xrt --app=mstress
|
||||
# test 33-bit DRAM address
|
||||
CONFIGS="-DPLATFORM_MEMORY_ADDR_WIDTH=33" ./ci/blackbox.sh --driver=opae --app=mstress
|
||||
CONFIGS="-DPLATFORM_MEMORY_ADDR_WIDTH=33" ./ci/blackbox.sh --driver=xrt --app=mstress
|
||||
|
||||
echo "configuration-2 tests done!"
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
//`include "platform_afu_top_config.vh"
|
||||
|
||||
`ifndef PLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH
|
||||
`define PLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH `PLATFORM_MEMORY_ADDR_WIDTH
|
||||
`define PLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH (`PLATFORM_MEMORY_ADDR_WIDTH - $clog2(`PLATFORM_MEMORY_DATA_WIDTH/8))
|
||||
`endif
|
||||
|
||||
`ifndef PLATFORM_PARAM_LOCAL_MEMORY_DATA_WIDTH
|
||||
|
|
|
@ -96,12 +96,10 @@ module vortex_afu import ccip_if_pkg::*; import local_mem_cfg_pkg::*; import VX_
|
|||
localparam STATE_DCR_WRITE = 4;
|
||||
localparam STATE_WIDTH = `CLOG2(STATE_DCR_WRITE+1);
|
||||
|
||||
localparam BANK_BYTE_ADDR_WIDTH = `PLATFORM_MEMORY_ADDR_WIDTH + `CLOG2(`PLATFORM_MEMORY_DATA_WIDTH/8);
|
||||
|
||||
wire [127:0] afu_id = `AFU_ACCEL_UUID;
|
||||
|
||||
wire [63:0] dev_caps = {8'b0,
|
||||
5'(BANK_BYTE_ADDR_WIDTH-16),
|
||||
5'(`PLATFORM_MEMORY_ADDR_WIDTH-16),
|
||||
3'(`CLOG2(`PLATFORM_MEMORY_BANKS)),
|
||||
8'(`LMEM_ENABLED ? `LMEM_LOG_SIZE : 0),
|
||||
16'(`NUM_CORES * `NUM_CLUSTERS),
|
||||
|
|
|
@ -119,9 +119,6 @@ module VX_afu_ctrl #(
|
|||
ADDR_SCP_1 = 8'h2C,
|
||||
`endif
|
||||
|
||||
ADDR_MEM_0 = 8'h30,
|
||||
ADDR_MEM_1 = 8'h34,
|
||||
|
||||
ADDR_BITS = 8;
|
||||
|
||||
localparam
|
||||
|
|
|
@ -22,7 +22,7 @@ module vortex_afu #(
|
|||
parameter C_M_AXI_MEM_ADDR_WIDTH = 64,
|
||||
parameter C_M_AXI_MEM_NUM_BANKS = 1
|
||||
`else
|
||||
parameter C_M_AXI_MEM_ADDR_WIDTH = `PLATFORM_MEMORY_ADDR_WIDTH + $clog(`PLATFORM_MEMORY_DATA_WIDTH/8),
|
||||
parameter C_M_AXI_MEM_ADDR_WIDTH = `PLATFORM_MEMORY_ADDR_WIDTH,
|
||||
parameter C_M_AXI_MEM_NUM_BANKS = `PLATFORM_MEMORY_BANKS
|
||||
`endif
|
||||
) (
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
`endif
|
||||
|
||||
`ifndef PLATFORM_MEMORY_ADDR_WIDTH
|
||||
`define PLATFORM_MEMORY_ADDR_WIDTH 25
|
||||
`define PLATFORM_MEMORY_ADDR_WIDTH 31
|
||||
`endif
|
||||
|
||||
`ifndef PLATFORM_MEMORY_DATA_WIDTH
|
||||
|
|
|
@ -12,9 +12,9 @@ ifeq (,$(findstring PLATFORM_MEMORY_BANKS,$(CONFIGS)))
|
|||
endif
|
||||
ifeq (,$(findstring PLATFORM_MEMORY_ADDR_WIDTH,$(CONFIGS)))
|
||||
ifeq ($(XLEN),64)
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=41
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=47
|
||||
else
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=25
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=31
|
||||
endif
|
||||
endif
|
||||
ifeq (,$(findstring PLATFORM_MEMORY_DATA_WIDTH,$(CONFIGS)))
|
||||
|
|
|
@ -98,7 +98,7 @@ ifdef PERF
|
|||
endif
|
||||
|
||||
# ast dump flags
|
||||
XML_CFLAGS = $(filter-out -DSYNTHESIS -DQUARTUS, $(CFLAGS)) $(RTL_PKGS) -I$(AFU_DIR)/ccip -I$(DPI_DIR) -DPLATFORM_PROVIDES_LOCAL_MEMORY -DPLATFORM_MEMORY_BANKS=1 -DPLATFORM_MEMORY_ADDR_WIDTH=26 -DPLATFORM_MEMORY_DATA_WIDTH=512 -DPLATFORM_MEMORY_BURST_CNT_WIDTH=4 -DNOPAE -DSV_DPI
|
||||
XML_CFLAGS = $(filter-out -DSYNTHESIS -DQUARTUS, $(CFLAGS)) $(RTL_PKGS) -I$(AFU_DIR)/ccip -I$(DPI_DIR) -DPLATFORM_PROVIDES_LOCAL_MEMORY -DPLATFORM_MEMORY_BANKS=1 -DPLATFORM_MEMORY_ADDR_WIDTH=32 -DPLATFORM_MEMORY_DATA_WIDTH=512 -DPLATFORM_MEMORY_BURST_CNT_WIDTH=4 -DNOPAE -DSV_DPI
|
||||
|
||||
all: swconfig ip-gen setup build
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ CONFIGS += $(CONFIGS_$(NUM_CORES)c)
|
|||
|
||||
# include sources
|
||||
RTL_PKGS = $(RTL_DIR)/VX_gpu_pkg.sv $(RTL_DIR)/fpu/VX_fpu_pkg.sv
|
||||
RTL_PKGS += $(RTL_DIR)/tex/VX_tex_pkg.sv $(RTL_DIR)/raster/VX_raster_pkg.sv $(RTL_DIR)/om/VX_om_pkg.sv
|
||||
FPU_INCLUDE = -I$(RTL_DIR)/fpu
|
||||
ifneq (,$(findstring FPU_FPNEW,$(CONFIGS)))
|
||||
RTL_PKGS += $(THIRD_PARTY_DIR)/cvfpu/src/fpnew_pkg.sv $(THIRD_PARTY_DIR)/cvfpu/src/common_cells/src/cf_math_pkg $(THIRD_PARTY_DIR)/cvfpu/src/fpu_div_sqrt_mvp/hdl/defs_div_sqrt_mvp.sv
|
||||
|
@ -91,18 +92,8 @@ RTL_INCLUDE += $(FPU_INCLUDE) $(TEX_INCLUDE) $(RASTER_INCLUDE) $(OM_INCLUDE)
|
|||
VPP_FLAGS += --link --target $(TARGET) --platform $(PLATFORM) --save-temps --no_ip_cache
|
||||
VPP_FLAGS += --vivado.synth.jobs $(JOBS) --vivado.impl.jobs $(JOBS)
|
||||
|
||||
ifeq ($(DEV_ARCH), zynquplus)
|
||||
# ztnq
|
||||
else ifeq ($(DEV_ARCH), versal)
|
||||
# versal
|
||||
else
|
||||
# alveo
|
||||
ifneq ($(findstring xilinx_u55c,$(XSA)),)
|
||||
VPP_FLAGS += --connectivity.sp vortex_afu_1.m_axi_mem_0:HBM[0:31]
|
||||
else
|
||||
VPP_FLAGS += --connectivity.sp vortex_afu_1.m_axi_mem_0:HBM[0:15]
|
||||
endif
|
||||
endif
|
||||
# load platform settings
|
||||
include $(SRC_DIR)/platforms.mk
|
||||
|
||||
VPP_FLAGS += --report_level 2
|
||||
VPP_FLAGS += --config $(SRC_DIR)/vitis.ini
|
||||
|
@ -173,8 +164,12 @@ scope-json: $(BUILD_DIR)/scope.json
|
|||
$(BUILD_DIR)/scope.json: $(BUILD_DIR)/vortex.xml
|
||||
mkdir -p $(BUILD_DIR); cd $(BUILD_DIR); $(SCRIPT_DIR)/scope.py vortex.xml -o scope.json
|
||||
|
||||
gen-xml:
|
||||
$(BUILD_DIR)/kernel.xml:
|
||||
mkdir -p $(BUILD_DIR); cd $(BUILD_DIR); $(SRC_DIR)/gen_xml.py -n $(M_AXI_NUM_BANKS) -d $(M_AXI_DATA_WIDTH) -a $(M_AXI_ADDRESS_WIDTH) -o kernel.xml
|
||||
|
||||
gen-xo: $(XO_CONTAINER)
|
||||
$(XO_CONTAINER): $(BUILD_DIR)/sources.txt
|
||||
$(XO_CONTAINER): $(BUILD_DIR)/sources.txt $(BUILD_DIR)/kernel.xml
|
||||
mkdir -p $(BUILD_DIR); cd $(BUILD_DIR); $(VIVADO) -mode batch -source $(SRC_DIR)/gen_xo.tcl -tclargs ../$(XO_CONTAINER) vortex_afu sources.txt $(SCRIPT_DIR) ../$(BUILD_DIR)
|
||||
|
||||
gen-bin: $(XCLBIN_CONTAINER)
|
||||
|
|
75
hw/syn/xilinx/xrt/gen_xml.py
Normal file
75
hw/syn/xilinx/xrt/gen_xml.py
Normal file
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright © 2019-2023
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import argparse
|
||||
import xml.etree.ElementTree as ET
|
||||
from xml.dom import minidom
|
||||
|
||||
def prettify(elem):
|
||||
"""Return a pretty-printed XML string for the Element."""
|
||||
rough_string = ET.tostring(elem, 'utf-8')
|
||||
reparsed = minidom.parseString(rough_string)
|
||||
return reparsed.toprettyxml(indent=" ")
|
||||
|
||||
def generate_xml(numbanks, datawidth, addresswidth, offset, output_file):
|
||||
root = ET.Element("root", versionMajor="1", versionMinor="6")
|
||||
kernel = ET.SubElement(root, "kernel", name="vortex_afu", language="ip_c",
|
||||
vlnv="mycompany.com:kernel:vortex_afu:1.0",
|
||||
attributes="", preferredWorkGroupSizeMultiple="0",
|
||||
workGroupSize="1", interrupt="true")
|
||||
|
||||
ports = ET.SubElement(kernel, "ports")
|
||||
|
||||
# control ports
|
||||
ET.SubElement(ports, "port", name="s_axi_ctrl", mode="slave", range="0x1000", dataWidth="32", portType="addressable", base="0x0")
|
||||
|
||||
# memory ports
|
||||
for i in range(numbanks):
|
||||
port_name = f"m_axi_mem_{i}"
|
||||
ET.SubElement(ports, "port", name=port_name, mode="master", range=f"0x{(1 << addresswidth) - 1:X}", dataWidth=str(datawidth), portType="addressable", base=f"0x0")
|
||||
|
||||
args = ET.SubElement(kernel, "args")
|
||||
|
||||
# control args
|
||||
ET.SubElement(args, "arg", name="dev", addressQualifier="0", id="0", port="s_axi_ctrl", size="0x4", offset="0x010", type="uint", hostOffset="0x0", hostSize="0x4")
|
||||
ET.SubElement(args, "arg", name="isa", addressQualifier="0", id="1", port="s_axi_ctrl", size="0x4", offset="0x018", type="uint", hostOffset="0x0", hostSize="0x4")
|
||||
ET.SubElement(args, "arg", name="dcr", addressQualifier="0", id="2", port="s_axi_ctrl", size="0x4", offset="0x020", type="uint", hostOffset="0x0", hostSize="0x4")
|
||||
ET.SubElement(args, "arg", name="scp", addressQualifier="0", id="3", port="s_axi_ctrl", size="0x4", offset="0x028", type="uint", hostOffset="0x0", hostSize="0x4")
|
||||
|
||||
# memory args
|
||||
for i in range(numbanks):
|
||||
arg_name = f"mem_{i}"
|
||||
ET.SubElement(args, "arg", name=arg_name, addressQualifier="1", id=str(4 + i),
|
||||
port=f"m_axi_mem_{i}", size="0x8", offset=f"0x{offset + (i * 8):X}",
|
||||
type="int*", hostOffset="0x0", hostSize="0x8")
|
||||
|
||||
# Pretty-print and write the XML to file
|
||||
with open(output_file, "w") as f:
|
||||
f.write(prettify(root))
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Kernel Configuration File Generator")
|
||||
parser.add_argument("-n", "--numbanks", type=int, default=1, help="Number of AXI memory banks")
|
||||
parser.add_argument("-d", "--datawidth", type=int, default=512, help="Data width of the AXI memory ports")
|
||||
parser.add_argument("-a", "--addresswidth", type=int, default=28, help="Address width of the AXI memory ports")
|
||||
parser.add_argument("-x", "--offset", type=lambda x: int(x, 0), default=0x30, help="Starting offset for kernel args (hex)")
|
||||
parser.add_argument("-o", "--output", type=str, default="kernel.xml", help="Output XML file name")
|
||||
args = parser.parse_args()
|
||||
|
||||
# Call the generate function
|
||||
generate_xml(args.numbanks, args.datawidth, args.addresswidth, args.offset, args.output)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -37,4 +37,4 @@ set argv [list ${krnl_name} ${vcs_file} ${tool_dir} ${build_dir}]
|
|||
set argc 4
|
||||
source ${script_path}/package_kernel.tcl
|
||||
|
||||
package_xo -xo_path ${xoname} -kernel_name ${krnl_name} -ip_directory "${build_dir}/xo/packaged_kernel"
|
||||
package_xo -xo_path ${xoname} -kernel_name ${krnl_name} -ip_directory "${build_dir}/xo/packaged_kernel" -kernel_xml ${build_dir}/kernel.xml
|
||||
|
|
|
@ -41,14 +41,27 @@ set vdefines_list [lindex $vlist 2]
|
|||
#puts ${vincludes_list}
|
||||
#puts ${vdefines_list}
|
||||
|
||||
# find if chipscope is enabled
|
||||
set chipscope 0
|
||||
set num_banks 1
|
||||
set merged_mem_if 0
|
||||
|
||||
# parse vdefines_list for configuration parameters
|
||||
foreach def $vdefines_list {
|
||||
set fields [split $def "="]
|
||||
set name [lindex $fields 0]
|
||||
if { $name == "CHIPSCOPE" } {
|
||||
set chipscope 1
|
||||
}
|
||||
if { $name == "PLATFORM_MEMORY_BANKS" } {
|
||||
set num_banks [lindex $fields 1]
|
||||
}
|
||||
if { $name == "PLATFORM_MERGED_MEMORY_INTERFACE" } {
|
||||
set merged_mem_if 1
|
||||
}
|
||||
}
|
||||
|
||||
if { $merged_mem_if == 1 } {
|
||||
set num_banks 1
|
||||
}
|
||||
|
||||
create_project -force kernel_pack $path_to_tmp_project
|
||||
|
@ -143,108 +156,10 @@ foreach up [ipx::get_user_parameters] {
|
|||
|
||||
ipx::associate_bus_interfaces -busif s_axi_ctrl -clock ap_clk $core
|
||||
|
||||
for {set i 0} {$i < 1} {incr i} {
|
||||
for {set i 0} {$i < $num_banks} {incr i} {
|
||||
ipx::associate_bus_interfaces -busif m_axi_mem_$i -clock ap_clk $core
|
||||
}
|
||||
|
||||
set mem_map [::ipx::add_memory_map -quiet "s_axi_ctrl" $core]
|
||||
set addr_block [::ipx::add_address_block -quiet "reg0" $mem_map]
|
||||
|
||||
set reg [::ipx::add_register "CTRL" $addr_block]
|
||||
set_property description "Control signals" $reg
|
||||
set_property address_offset 0x000 $reg
|
||||
set_property size 32 $reg
|
||||
|
||||
set field [ipx::add_field AP_START $reg]
|
||||
set_property ACCESS {read-write} $field
|
||||
set_property BIT_OFFSET {0} $field
|
||||
set_property BIT_WIDTH {1} $field
|
||||
set_property DESCRIPTION {Control signal Register for 'ap_start'.} $field
|
||||
set_property MODIFIED_WRITE_VALUE {modify} $field
|
||||
|
||||
set field [ipx::add_field AP_DONE $reg]
|
||||
set_property ACCESS {read-only} $field
|
||||
set_property BIT_OFFSET {1} $field
|
||||
set_property BIT_WIDTH {1} $field
|
||||
set_property DESCRIPTION {Control signal Register for 'ap_done'.} $field
|
||||
set_property READ_ACTION {modify} $field
|
||||
|
||||
set field [ipx::add_field AP_IDLE $reg]
|
||||
set_property ACCESS {read-only} $field
|
||||
set_property BIT_OFFSET {2} $field
|
||||
set_property BIT_WIDTH {1} $field
|
||||
set_property DESCRIPTION {Control signal Register for 'ap_idle'.} $field
|
||||
set_property READ_ACTION {modify} $field
|
||||
|
||||
set field [ipx::add_field AP_READY $reg]
|
||||
set_property ACCESS {read-only} $field
|
||||
set_property BIT_OFFSET {3} $field
|
||||
set_property BIT_WIDTH {1} $field
|
||||
set_property DESCRIPTION {Control signal Register for 'ap_ready'.} $field
|
||||
set_property READ_ACTION {modify} $field
|
||||
|
||||
set field [ipx::add_field RESERVED_1 $reg]
|
||||
set_property ACCESS {read-only} $field
|
||||
set_property BIT_OFFSET {4} $field
|
||||
set_property BIT_WIDTH {3} $field
|
||||
set_property DESCRIPTION {Reserved. 0s on read.} $field
|
||||
set_property READ_ACTION {modify} $field
|
||||
|
||||
set field [ipx::add_field AUTO_RESTART $reg]
|
||||
set_property ACCESS {read-write} $field
|
||||
set_property BIT_OFFSET {7} $field
|
||||
set_property BIT_WIDTH {1} $field
|
||||
set_property DESCRIPTION {Control signal Register for 'auto_restart'.} $field
|
||||
set_property MODIFIED_WRITE_VALUE {modify} $field
|
||||
|
||||
set field [ipx::add_field RESERVED_2 $reg]
|
||||
set_property ACCESS {read-only} $field
|
||||
set_property BIT_OFFSET {8} $field
|
||||
set_property BIT_WIDTH {24} $field
|
||||
set_property DESCRIPTION {Reserved. 0s on read.} $field
|
||||
set_property READ_ACTION {modify} $field
|
||||
|
||||
set reg [::ipx::add_register "GIER" $addr_block]
|
||||
set_property description "Global Interrupt Enable Register" $reg
|
||||
set_property address_offset 0x004 $reg
|
||||
set_property size 32 $reg
|
||||
|
||||
set reg [::ipx::add_register "IP_IER" $addr_block]
|
||||
set_property description "IP Interrupt Enable Register" $reg
|
||||
set_property address_offset 0x008 $reg
|
||||
set_property size 32 $reg
|
||||
|
||||
set reg [::ipx::add_register "IP_ISR" $addr_block]
|
||||
set_property description "IP Interrupt Status Register" $reg
|
||||
set_property address_offset 0x00C $reg
|
||||
set_property size 32 $reg
|
||||
|
||||
set reg [::ipx::add_register -quiet "DEV" $addr_block]
|
||||
set_property address_offset 0x010 $reg
|
||||
set_property size [expr {8*8}] $reg
|
||||
|
||||
set reg [::ipx::add_register -quiet "ISA" $addr_block]
|
||||
set_property address_offset 0x01C $reg
|
||||
set_property size [expr {8*8}] $reg
|
||||
|
||||
set reg [::ipx::add_register -quiet "DCR" $addr_block]
|
||||
set_property address_offset 0x028 $reg
|
||||
set_property size [expr {8*8}] $reg
|
||||
|
||||
set reg [::ipx::add_register -quiet "SCP" $addr_block]
|
||||
set_property address_offset 0x034 $reg
|
||||
set_property size [expr {8*8}] $reg
|
||||
|
||||
for {set i 0} {$i < 1} {incr i} {
|
||||
set reg [::ipx::add_register -quiet "MEM_$i" $addr_block]
|
||||
set_property address_offset [expr {0x040 + $i * 12}] $reg
|
||||
set_property size [expr {8*8}] $reg
|
||||
set regparam [::ipx::add_register_parameter -quiet {ASSOCIATED_BUSIF} $reg]
|
||||
set_property value m_axi_mem_$i $regparam
|
||||
}
|
||||
|
||||
set_property slave_memory_map_ref "s_axi_ctrl" [::ipx::get_bus_interfaces -of $core "s_axi_ctrl"]
|
||||
|
||||
set_property xpm_libraries {XPM_CDC XPM_MEMORY XPM_FIFO} $core
|
||||
set_property sdx_kernel true $core
|
||||
set_property sdx_kernel_type rtl $core
|
||||
|
|
51
hw/syn/xilinx/xrt/platforms.mk
Normal file
51
hw/syn/xilinx/xrt/platforms.mk
Normal file
|
@ -0,0 +1,51 @@
|
|||
# Platform specific configurations
|
||||
# Add your platform specific configurations here
|
||||
|
||||
M_AXI_NUM_BANKS := 1
|
||||
M_AXI_DATA_WIDTH := 512
|
||||
M_AXI_ADDRESS_WIDTH := 32
|
||||
|
||||
ifeq ($(DEV_ARCH), zynquplus)
|
||||
# zynquplus
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=1 -DPLATFORM_MEMORY_ADDR_WIDTH=32
|
||||
else ifeq ($(DEV_ARCH), versal)
|
||||
# versal
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=1 -DPLATFORM_MEMORY_ADDR_WIDTH=32
|
||||
ifneq ($(findstring xilinx_vck5000,$(XSA)),)
|
||||
CONFIGS += -DPLATFORM_MEMORY_OFFSET=40'hC000000000
|
||||
endif
|
||||
else
|
||||
# alveo
|
||||
ifneq ($(findstring xilinx_u55c,$(XSA)),)
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=32 -DPLATFORM_MEMORY_ADDR_WIDTH=28
|
||||
#VPP_FLAGS += --connectivity.sp vortex_afu_1.m_axi_mem_0:HBM[0:31]
|
||||
#CONFIGS += -DPLATFORM_MERGED_MEMORY_INTERFACE
|
||||
VPP_FLAGS += $(foreach i,$(shell seq 0 31), --connectivity.sp vortex_afu_1.m_axi_mem_$(i):HBM[$(i)])
|
||||
M_AXI_NUM_BANKS := 32
|
||||
M_AXI_ADDRESS_WIDTH := 28
|
||||
else ifneq ($(findstring xilinx_u50,$(XSA)),)
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=16 -DPLATFORM_MEMORY_ADDR_WIDTH=28
|
||||
VPP_FLAGS += --connectivity.sp vortex_afu_1.m_axi_mem_0:HBM[0:15]
|
||||
M_AXI_NUM_BANKS := 16
|
||||
M_AXI_ADDRESS_WIDTH := 28
|
||||
else ifneq ($(findstring xilinx_u280,$(XSA)),)
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=16 -DPLATFORM_MEMORY_ADDR_WIDTH=28
|
||||
VPP_FLAGS += --connectivity.sp vortex_afu_1.m_axi_mem_0:HBM[0:15]
|
||||
M_AXI_NUM_BANKS := 16
|
||||
M_AXI_ADDRESS_WIDTH := 28
|
||||
else ifneq ($(findstring xilinx_u250,$(XSA)),)
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=4 -DPLATFORM_MEMORY_ADDR_WIDTH=34
|
||||
M_AXI_NUM_BANKS := 4
|
||||
M_AXI_ADDRESS_WIDTH := 34
|
||||
else ifneq ($(findstring xilinx_u200,$(XSA)),)
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=4 -DPLATFORM_MEMORY_ADDR_WIDTH=34
|
||||
M_AXI_NUM_BANKS := 4
|
||||
M_AXI_ADDRESS_WIDTH := 34
|
||||
else
|
||||
CONFIGS += -DPLATFORM_MEMORY_BANKS=1 -DPLATFORM_MEMORY_ADDR_WIDTH=32
|
||||
M_AXI_NUM_BANKS := 1
|
||||
M_AXI_ADDRESS_WIDTH := 32
|
||||
endif
|
||||
endif
|
||||
|
||||
CONFIGS += -DPLATFORM_MEMORY_DATA_WIDTH=$(M_AXI_DATA_WIDTH)
|
|
@ -37,9 +37,9 @@ ifeq (,$(findstring PLATFORM_MEMORY_BANKS,$(CONFIGS)))
|
|||
endif
|
||||
ifeq (,$(findstring PLATFORM_MEMORY_ADDR_WIDTH,$(CONFIGS)))
|
||||
ifeq ($(XLEN),64)
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=41
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=47
|
||||
else
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=25
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=31
|
||||
endif
|
||||
endif
|
||||
ifeq (,$(findstring PLATFORM_MEMORY_DATA_WIDTH,$(CONFIGS)))
|
||||
|
|
|
@ -146,7 +146,7 @@ public:
|
|||
ram_ = new RAM(0, RAM_PAGE_SIZE);
|
||||
|
||||
// calculate memory bank size
|
||||
mem_bank_size_ = (1ull << PLATFORM_MEMORY_ADDR_WIDTH) * PLATFORM_MEMORY_DATA_SIZE;
|
||||
mem_bank_size_ = 1ull << PLATFORM_MEMORY_ADDR_WIDTH;
|
||||
|
||||
// reset the device
|
||||
this->reset();
|
||||
|
|
|
@ -37,9 +37,9 @@ ifeq (,$(findstring PLATFORM_MEMORY_BANKS,$(CONFIGS)))
|
|||
endif
|
||||
ifeq (,$(findstring PLATFORM_MEMORY_ADDR_WIDTH,$(CONFIGS)))
|
||||
ifeq ($(XLEN),64)
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=41
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=47
|
||||
else
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=25
|
||||
CONFIGS += -DPLATFORM_MEMORY_ADDR_WIDTH=31
|
||||
endif
|
||||
endif
|
||||
ifeq (,$(findstring PLATFORM_MEMORY_DATA_WIDTH,$(CONFIGS)))
|
||||
|
|
|
@ -17,7 +17,7 @@ module vortex_afu_shim #(
|
|||
parameter C_S_AXI_CTRL_ADDR_WIDTH = 8,
|
||||
parameter C_S_AXI_CTRL_DATA_WIDTH = 32,
|
||||
parameter C_M_AXI_MEM_ID_WIDTH = `PLATFORM_MEMORY_ID_WIDTH,
|
||||
parameter C_M_AXI_MEM_ADDR_WIDTH = `PLATFORM_MEMORY_ADDR_WIDTH + $clog2(`PLATFORM_MEMORY_DATA_WIDTH/8),
|
||||
parameter C_M_AXI_MEM_ADDR_WIDTH = `PLATFORM_MEMORY_ADDR_WIDTH,
|
||||
parameter C_M_AXI_MEM_DATA_WIDTH = `PLATFORM_MEMORY_DATA_WIDTH,
|
||||
parameter C_M_AXI_MEM_NUM_BANKS = `PLATFORM_MEMORY_BANKS
|
||||
) (
|
||||
|
|
|
@ -184,7 +184,7 @@ public:
|
|||
#endif
|
||||
|
||||
// calculate memory bank size
|
||||
mem_bank_size_ = ((1ull << PLATFORM_MEMORY_ADDR_WIDTH) / PLATFORM_MEMORY_BANKS) * PLATFORM_MEMORY_DATA_SIZE;
|
||||
mem_bank_size_ = 1ull << PLATFORM_MEMORY_ADDR_WIDTH;
|
||||
|
||||
// allocate RAM
|
||||
ram_ = new RAM(0, RAM_PAGE_SIZE);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue