mirror of
https://github.com/corundum/corundum.git
synced 2025-01-16 08:12:53 +08:00
merged changes in pcie
This commit is contained in:
commit
3c1865a81e
@ -25,6 +25,9 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -292,7 +292,7 @@ proc do_create_pcie {} {
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {virtual_pf3_msix_enable_hwtcl} {0}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {virtual_pf3_tph_cap_enable_hwtcl} {0}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {virtual_rp_ep_mode_hwtcl} {Native Endpoint}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {wrala_hwtcl} {Gen3x8, Interface - 256 bit, 250 MHz}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {wrala_hwtcl} {Gen3x16, Interface - 512 bit, 250 MHz}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {xcvr_adme_hwtcl} {0}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {xcvr_reconfig_hwtcl} {0}
|
||||
set_instance_property pcie_s10_hip_ast_0 AUTO_EXPORT true
|
||||
|
@ -35,25 +35,25 @@ module fpga (
|
||||
/*
|
||||
* Clock: 300 MHz
|
||||
*/
|
||||
input wire usr_refclk0,
|
||||
input wire usr_refclk0,
|
||||
|
||||
/*
|
||||
* GPIO
|
||||
*/
|
||||
output wire [1:0] led_user_grn,
|
||||
output wire [1:0] led_user_red,
|
||||
output wire [3:0] led_qsfp,
|
||||
output wire [1:0] led_user_grn,
|
||||
output wire [1:0] led_user_red,
|
||||
output wire [3:0] led_qsfp,
|
||||
|
||||
/*
|
||||
* PCIe: gen 3 x16
|
||||
*/
|
||||
output wire [7:0] pcie_tx,
|
||||
input wire [7:0] pcie_rx,
|
||||
input wire pcie_refclk,
|
||||
input wire pcie_perstn
|
||||
output wire [15:0] pcie_tx,
|
||||
input wire [15:0] pcie_rx,
|
||||
input wire pcie_refclk,
|
||||
input wire pcie_perstn
|
||||
);
|
||||
|
||||
parameter SEG_COUNT = 1;
|
||||
parameter SEG_COUNT = 2;
|
||||
parameter SEG_DATA_WIDTH = 256;
|
||||
parameter SEG_EMPTY_WIDTH = $clog2(SEG_DATA_WIDTH/32);
|
||||
|
||||
@ -434,6 +434,14 @@ pcie pcie_hip_inst (
|
||||
.rx_in5 (pcie_rx[5]),
|
||||
.rx_in6 (pcie_rx[6]),
|
||||
.rx_in7 (pcie_rx[7]),
|
||||
.rx_in8 (pcie_rx[8]),
|
||||
.rx_in9 (pcie_rx[9]),
|
||||
.rx_in10 (pcie_rx[10]),
|
||||
.rx_in11 (pcie_rx[11]),
|
||||
.rx_in12 (pcie_rx[12]),
|
||||
.rx_in13 (pcie_rx[13]),
|
||||
.rx_in14 (pcie_rx[14]),
|
||||
.rx_in15 (pcie_rx[15]),
|
||||
.tx_out0 (pcie_tx[0]),
|
||||
.tx_out1 (pcie_tx[1]),
|
||||
.tx_out2 (pcie_tx[2]),
|
||||
@ -442,6 +450,14 @@ pcie pcie_hip_inst (
|
||||
.tx_out5 (pcie_tx[5]),
|
||||
.tx_out6 (pcie_tx[6]),
|
||||
.tx_out7 (pcie_tx[7]),
|
||||
.tx_out8 (pcie_tx[8]),
|
||||
.tx_out9 (pcie_tx[9]),
|
||||
.tx_out10 (pcie_tx[10]),
|
||||
.tx_out11 (pcie_tx[11]),
|
||||
.tx_out12 (pcie_tx[12]),
|
||||
.tx_out13 (pcie_tx[13]),
|
||||
.tx_out14 (pcie_tx[14]),
|
||||
.tx_out15 (pcie_tx[15]),
|
||||
.pm_linkst_in_l1 (),
|
||||
.pm_linkst_in_l0s (),
|
||||
.pm_state (),
|
||||
|
@ -33,7 +33,7 @@ THE SOFTWARE.
|
||||
*/
|
||||
module fpga_core #
|
||||
(
|
||||
parameter SEG_COUNT = 1,
|
||||
parameter SEG_COUNT = 2,
|
||||
parameter SEG_DATA_WIDTH = 256,
|
||||
parameter SEG_EMPTY_WIDTH = $clog2(SEG_DATA_WIDTH/32),
|
||||
parameter TX_SEQ_NUM_WIDTH = 6,
|
||||
|
@ -46,6 +46,9 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -55,7 +58,7 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/priority_encoder.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pulse_merge.v
|
||||
|
||||
# module parameters
|
||||
export PARAM_SEG_COUNT ?= 1
|
||||
export PARAM_SEG_COUNT ?= 2
|
||||
export PARAM_SEG_DATA_WIDTH ?= 256
|
||||
export PARAM_SEG_EMPTY_WIDTH ?= $(shell python -c "print((($(PARAM_SEG_DATA_WIDTH)//32)-1).bit_length())" )
|
||||
export PARAM_TX_SEQ_NUM_WIDTH ?= 6
|
||||
|
@ -436,6 +436,9 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -447,7 +450,7 @@ def test_fpga_core(request):
|
||||
|
||||
parameters = {}
|
||||
|
||||
parameters['SEG_COUNT'] = 1
|
||||
parameters['SEG_COUNT'] = 2
|
||||
parameters['SEG_DATA_WIDTH'] = 256
|
||||
parameters['SEG_EMPTY_WIDTH'] = (parameters['SEG_DATA_WIDTH'] // 32 - 1).bit_length()
|
||||
parameters['TX_SEQ_NUM_WIDTH'] = 6
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -57,11 +57,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -348,6 +352,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -148,6 +152,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -515,6 +515,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -532,6 +534,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -56,11 +56,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -363,6 +367,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -145,6 +149,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -517,6 +517,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -534,6 +536,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -56,11 +56,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -363,6 +367,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -145,6 +149,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -517,6 +517,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -534,6 +536,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -27,6 +27,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4c_uscale_plus -vendor xilinx.com -library ip -module_name p
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -55,11 +55,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -350,6 +354,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -137,6 +141,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -515,6 +515,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -532,6 +534,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -27,6 +27,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4c_uscale_plus -vendor xilinx.com -library ip -module_name p
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -58,11 +58,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -353,6 +357,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -148,6 +152,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -515,6 +515,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -532,6 +534,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -27,6 +27,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,7 @@ create_ip -name pcie3_ultrascale -vendor xilinx.com -library ip -module_name pci
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X8} \
|
||||
CONFIG.AXISTEN_IF_RC_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_RC_STRADDLE {true} \
|
||||
CONFIG.axisten_if_width {256_bit} \
|
||||
CONFIG.extended_tag_field {true} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -57,6 +57,10 @@ parameter AXIS_PCIE_RC_USER_WIDTH = 75;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = 60;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = 85;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = 33;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
@ -350,6 +354,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,6 +39,10 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = 60,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = 85,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = 33,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
@ -146,6 +150,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= 60
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= 75
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= 85
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= 33
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 4
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,7 +52,7 @@ class TB(object):
|
||||
pcie_link_width=8,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
rc_straddle=False,
|
||||
rc_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -489,6 +489,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -506,6 +508,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 85
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 4
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,7 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X8} \
|
||||
CONFIG.AXISTEN_IF_RC_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_RC_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {256_bit} \
|
||||
CONFIG.extended_tag_field {true} \
|
||||
|
@ -57,11 +57,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -348,6 +352,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -148,6 +152,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -55,7 +55,7 @@ class TB(object):
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=False,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
@ -515,6 +515,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -532,6 +534,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -25,6 +25,9 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -25,6 +25,9 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -292,7 +292,7 @@ proc do_create_pcie {} {
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {virtual_pf3_msix_enable_hwtcl} {0}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {virtual_pf3_tph_cap_enable_hwtcl} {0}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {virtual_rp_ep_mode_hwtcl} {Native Endpoint}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {wrala_hwtcl} {Gen3x8, Interface - 256 bit, 250 MHz}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {wrala_hwtcl} {Gen3x16, Interface - 512 bit, 250 MHz}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {xcvr_adme_hwtcl} {0}
|
||||
set_instance_parameter_value pcie_s10_hip_ast_0 {xcvr_reconfig_hwtcl} {0}
|
||||
set_instance_property pcie_s10_hip_ast_0 AUTO_EXPORT true
|
||||
|
@ -36,24 +36,24 @@ module fpga (
|
||||
* Clock: 100 MHz
|
||||
* Reset: Push button, active low
|
||||
*/
|
||||
input wire clk_sys_100m_p,
|
||||
input wire cpu_resetn,
|
||||
input wire clk_sys_100m_p,
|
||||
input wire cpu_resetn,
|
||||
|
||||
/*
|
||||
* GPIO
|
||||
*/
|
||||
output wire [3:0] user_led,
|
||||
output wire [3:0] user_led,
|
||||
|
||||
/*
|
||||
* PCIe: gen 3 x16
|
||||
*/
|
||||
output wire [7:0] pcie_ep_rx_p,
|
||||
input wire [7:0] pcie_ep_tx_p,
|
||||
input wire refclk_pcie_ep_edge_p,
|
||||
input wire s10_pcie_perstn0
|
||||
output wire [15:0] pcie_ep_rx_p,
|
||||
input wire [15:0] pcie_ep_tx_p,
|
||||
input wire refclk_pcie_ep_edge_p,
|
||||
input wire s10_pcie_perstn0
|
||||
);
|
||||
|
||||
parameter SEG_COUNT = 1;
|
||||
parameter SEG_COUNT = 2;
|
||||
parameter SEG_DATA_WIDTH = 256;
|
||||
parameter SEG_EMPTY_WIDTH = $clog2(SEG_DATA_WIDTH/32);
|
||||
|
||||
@ -434,6 +434,14 @@ pcie pcie_hip_inst (
|
||||
.rx_in5 (pcie_ep_tx_p[5]),
|
||||
.rx_in6 (pcie_ep_tx_p[6]),
|
||||
.rx_in7 (pcie_ep_tx_p[7]),
|
||||
.rx_in8 (pcie_ep_tx_p[8]),
|
||||
.rx_in9 (pcie_ep_tx_p[9]),
|
||||
.rx_in10 (pcie_ep_tx_p[10]),
|
||||
.rx_in11 (pcie_ep_tx_p[11]),
|
||||
.rx_in12 (pcie_ep_tx_p[12]),
|
||||
.rx_in13 (pcie_ep_tx_p[13]),
|
||||
.rx_in14 (pcie_ep_tx_p[14]),
|
||||
.rx_in15 (pcie_ep_tx_p[15]),
|
||||
.tx_out0 (pcie_ep_rx_p[0]),
|
||||
.tx_out1 (pcie_ep_rx_p[1]),
|
||||
.tx_out2 (pcie_ep_rx_p[2]),
|
||||
@ -442,6 +450,14 @@ pcie pcie_hip_inst (
|
||||
.tx_out5 (pcie_ep_rx_p[5]),
|
||||
.tx_out6 (pcie_ep_rx_p[6]),
|
||||
.tx_out7 (pcie_ep_rx_p[7]),
|
||||
.tx_out8 (pcie_ep_rx_p[8]),
|
||||
.tx_out9 (pcie_ep_rx_p[9]),
|
||||
.tx_out10 (pcie_ep_rx_p[10]),
|
||||
.tx_out11 (pcie_ep_rx_p[11]),
|
||||
.tx_out12 (pcie_ep_rx_p[12]),
|
||||
.tx_out13 (pcie_ep_rx_p[13]),
|
||||
.tx_out14 (pcie_ep_rx_p[14]),
|
||||
.tx_out15 (pcie_ep_rx_p[15]),
|
||||
.pm_linkst_in_l1 (),
|
||||
.pm_linkst_in_l0s (),
|
||||
.pm_state (),
|
||||
|
@ -33,7 +33,7 @@ THE SOFTWARE.
|
||||
*/
|
||||
module fpga_core #
|
||||
(
|
||||
parameter SEG_COUNT = 1,
|
||||
parameter SEG_COUNT = 2,
|
||||
parameter SEG_DATA_WIDTH = 256,
|
||||
parameter SEG_EMPTY_WIDTH = $clog2(SEG_DATA_WIDTH/32),
|
||||
parameter TX_SEQ_NUM_WIDTH = 6,
|
||||
|
@ -46,6 +46,9 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -55,7 +58,7 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/priority_encoder.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pulse_merge.v
|
||||
|
||||
# module parameters
|
||||
export PARAM_SEG_COUNT ?= 1
|
||||
export PARAM_SEG_COUNT ?= 2
|
||||
export PARAM_SEG_DATA_WIDTH ?= 256
|
||||
export PARAM_SEG_EMPTY_WIDTH ?= $(shell python -c "print((($(PARAM_SEG_DATA_WIDTH)//32)-1).bit_length())" )
|
||||
export PARAM_TX_SEQ_NUM_WIDTH ?= 6
|
||||
|
@ -436,6 +436,9 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -447,7 +450,7 @@ def test_fpga_core(request):
|
||||
|
||||
parameters = {}
|
||||
|
||||
parameters['SEG_COUNT'] = 1
|
||||
parameters['SEG_COUNT'] = 2
|
||||
parameters['SEG_DATA_WIDTH'] = 256
|
||||
parameters['SEG_EMPTY_WIDTH'] = (parameters['SEG_DATA_WIDTH'] // 32 - 1).bit_length()
|
||||
parameters['TX_SEQ_NUM_WIDTH'] = 6
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,7 @@ create_ip -name pcie3_ultrascale -vendor xilinx.com -library ip -module_name pci
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X8} \
|
||||
CONFIG.AXISTEN_IF_RC_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_RC_STRADDLE {true} \
|
||||
CONFIG.axisten_if_width {256_bit} \
|
||||
CONFIG.extended_tag_field {true} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -61,6 +61,10 @@ parameter AXIS_PCIE_RC_USER_WIDTH = 75;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = 60;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = 85;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = 33;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
@ -385,6 +389,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,6 +39,10 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = 60,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = 85,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = 33,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
@ -148,6 +152,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= 60
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= 75
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= 85
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= 33
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 4
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,7 +52,7 @@ class TB(object):
|
||||
pcie_link_width=8,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
rc_straddle=False,
|
||||
rc_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -496,6 +496,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -513,6 +515,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 85
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 4
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -61,11 +61,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -383,6 +387,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -150,6 +154,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -522,6 +522,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -539,6 +541,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -56,11 +56,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -363,6 +367,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -145,6 +149,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -517,6 +517,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -534,6 +536,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -61,11 +61,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -382,7 +386,16 @@ fpga_core #(
|
||||
.AXIS_PCIE_RC_USER_WIDTH(AXIS_PCIE_RC_USER_WIDTH),
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH)
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
.BAR0_APERTURE(BAR0_APERTURE),
|
||||
.BAR2_APERTURE(BAR2_APERTURE)
|
||||
)
|
||||
core_inst (
|
||||
/*
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -150,6 +154,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -522,6 +522,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -539,6 +541,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -51,6 +51,150 @@ static const struct pci_device_id pci_ids[] = {
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, pci_ids);
|
||||
|
||||
static void dma_block_read(struct example_dev *edev,
|
||||
dma_addr_t dma_addr, size_t dma_offset,
|
||||
size_t dma_offset_mask, size_t dma_stride,
|
||||
size_t ram_addr, size_t ram_offset,
|
||||
size_t ram_offset_mask, size_t ram_stride,
|
||||
size_t block_len, size_t block_count)
|
||||
{
|
||||
unsigned long t;
|
||||
|
||||
// DMA base address
|
||||
iowrite32(dma_addr & 0xffffffff, edev->bar[0] + 0x001080);
|
||||
iowrite32((dma_addr >> 32) & 0xffffffff, edev->bar[0] + 0x001084);
|
||||
// DMA offset address
|
||||
iowrite32(dma_offset & 0xffffffff, edev->bar[0] + 0x001088);
|
||||
iowrite32((dma_offset >> 32) & 0xffffffff, edev->bar[0] + 0x00108c);
|
||||
// DMA offset mask
|
||||
iowrite32(dma_offset_mask & 0xffffffff, edev->bar[0] + 0x001090);
|
||||
iowrite32((dma_offset_mask >> 32) & 0xffffffff, edev->bar[0] + 0x001094);
|
||||
// DMA stride
|
||||
iowrite32(dma_stride & 0xffffffff, edev->bar[0] + 0x001098);
|
||||
iowrite32((dma_stride >> 32) & 0xffffffff, edev->bar[0] + 0x00109c);
|
||||
// RAM base address
|
||||
iowrite32(ram_addr & 0xffffffff, edev->bar[0] + 0x0010c0);
|
||||
iowrite32((ram_addr >> 32) & 0xffffffff, edev->bar[0] + 0x0010c4);
|
||||
// RAM offset address
|
||||
iowrite32(ram_offset & 0xffffffff, edev->bar[0] + 0x0010c8);
|
||||
iowrite32((ram_offset >> 32) & 0xffffffff, edev->bar[0] + 0x0010cc);
|
||||
// RAM offset mask
|
||||
iowrite32(ram_offset_mask & 0xffffffff, edev->bar[0] + 0x0010d0);
|
||||
iowrite32((ram_offset_mask >> 32) & 0xffffffff, edev->bar[0] + 0x0010d4);
|
||||
// RAM stride
|
||||
iowrite32(ram_stride & 0xffffffff, edev->bar[0] + 0x0010d8);
|
||||
iowrite32((ram_stride >> 32) & 0xffffffff, edev->bar[0] + 0x0010dc);
|
||||
// clear cycle count
|
||||
iowrite32(0, edev->bar[0] + 0x001008);
|
||||
iowrite32(0, edev->bar[0] + 0x00100c);
|
||||
// block length
|
||||
iowrite32(block_len, edev->bar[0] + 0x001010);
|
||||
// block count
|
||||
iowrite32(block_count, edev->bar[0] + 0x001018);
|
||||
// start
|
||||
iowrite32(1, edev->bar[0] + 0x001000);
|
||||
|
||||
// wait for transfer to complete
|
||||
t = jiffies + msecs_to_jiffies(20000);
|
||||
while (time_before(jiffies, t)) {
|
||||
if ((ioread32(edev->bar[0] + 0x001000) & 1) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if ((ioread32(edev->bar[0] + 0x001000) & 1) != 0)
|
||||
dev_warn(edev->dev, "%s: operation timed out", __func__);
|
||||
}
|
||||
|
||||
static void dma_block_write(struct example_dev *edev,
|
||||
dma_addr_t dma_addr, size_t dma_offset,
|
||||
size_t dma_offset_mask, size_t dma_stride,
|
||||
size_t ram_addr, size_t ram_offset,
|
||||
size_t ram_offset_mask, size_t ram_stride,
|
||||
size_t block_len, size_t block_count)
|
||||
{
|
||||
unsigned long t;
|
||||
|
||||
// DMA base address
|
||||
iowrite32(dma_addr & 0xffffffff, edev->bar[0] + 0x001180);
|
||||
iowrite32((dma_addr >> 32) & 0xffffffff, edev->bar[0] + 0x001184);
|
||||
// DMA offset address
|
||||
iowrite32(dma_offset & 0xffffffff, edev->bar[0] + 0x001188);
|
||||
iowrite32((dma_offset >> 32) & 0xffffffff, edev->bar[0] + 0x00118c);
|
||||
// DMA offset mask
|
||||
iowrite32(dma_offset_mask & 0xffffffff, edev->bar[0] + 0x001190);
|
||||
iowrite32((dma_offset_mask >> 32) & 0xffffffff, edev->bar[0] + 0x001194);
|
||||
// DMA stride
|
||||
iowrite32(dma_stride & 0xffffffff, edev->bar[0] + 0x001198);
|
||||
iowrite32((dma_stride >> 32) & 0xffffffff, edev->bar[0] + 0x00119c);
|
||||
// RAM base address
|
||||
iowrite32(ram_addr & 0xffffffff, edev->bar[0] + 0x0011c0);
|
||||
iowrite32((ram_addr >> 32) & 0xffffffff, edev->bar[0] + 0x0011c4);
|
||||
// RAM offset address
|
||||
iowrite32(ram_offset & 0xffffffff, edev->bar[0] + 0x0011c8);
|
||||
iowrite32((ram_offset >> 32) & 0xffffffff, edev->bar[0] + 0x0011cc);
|
||||
// RAM offset mask
|
||||
iowrite32(ram_offset_mask & 0xffffffff, edev->bar[0] + 0x0011d0);
|
||||
iowrite32((ram_offset_mask >> 32) & 0xffffffff, edev->bar[0] + 0x0011d4);
|
||||
// RAM stride
|
||||
iowrite32(ram_stride & 0xffffffff, edev->bar[0] + 0x0011d8);
|
||||
iowrite32((ram_stride >> 32) & 0xffffffff, edev->bar[0] + 0x0011dc);
|
||||
// clear cycle count
|
||||
iowrite32(0, edev->bar[0] + 0x001108);
|
||||
iowrite32(0, edev->bar[0] + 0x00110c);
|
||||
// block length
|
||||
iowrite32(block_len, edev->bar[0] + 0x001110);
|
||||
// block count
|
||||
iowrite32(block_count, edev->bar[0] + 0x001118);
|
||||
// start
|
||||
iowrite32(1, edev->bar[0] + 0x001100);
|
||||
|
||||
// wait for transfer to complete
|
||||
t = jiffies + msecs_to_jiffies(20000);
|
||||
while (time_before(jiffies, t)) {
|
||||
if ((ioread32(edev->bar[0] + 0x001100) & 1) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if ((ioread32(edev->bar[0] + 0x001100) & 1) != 0)
|
||||
dev_warn(edev->dev, "%s: operation timed out", __func__);
|
||||
}
|
||||
|
||||
static void dma_block_read_bench(struct example_dev *edev,
|
||||
dma_addr_t dma_addr, u64 size, u64 stride, u64 count)
|
||||
{
|
||||
u64 cycles;
|
||||
|
||||
udelay(5);
|
||||
|
||||
dma_block_read(edev, dma_addr, 0, 0x3fff, stride,
|
||||
0, 0, 0x3fff, stride, size, count);
|
||||
|
||||
cycles = ioread32(edev->bar[0] + 0x001008);
|
||||
|
||||
udelay(5);
|
||||
|
||||
dev_info(edev->dev, "read %lld blocks of %lld bytes (stride %lld) in %lld ns: %lld Mbps",
|
||||
count, size, stride, cycles * 4, size * count * 8 * 1000 / (cycles * 4));
|
||||
}
|
||||
|
||||
static void dma_block_write_bench(struct example_dev *edev,
|
||||
dma_addr_t dma_addr, u64 size, u64 stride, u64 count)
|
||||
{
|
||||
u64 cycles;
|
||||
|
||||
udelay(5);
|
||||
|
||||
dma_block_write(edev, dma_addr, 0, 0x3fff, stride,
|
||||
0, 0, 0x3fff, stride, size, count);
|
||||
|
||||
cycles = ioread32(edev->bar[0] + 0x001108);
|
||||
|
||||
udelay(5);
|
||||
|
||||
dev_info(edev->dev, "wrote %lld blocks of %lld bytes (stride %lld) in %lld ns: %lld Mbps",
|
||||
count, size, stride, cycles * 4, size * count * 8 * 1000 / (cycles * 4));
|
||||
}
|
||||
|
||||
static irqreturn_t edev_intr(int irq, void *data)
|
||||
{
|
||||
struct example_dev *edev = data;
|
||||
@ -70,6 +214,7 @@ static int edev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
struct device *dev = &pdev->dev;
|
||||
|
||||
int k;
|
||||
int mismatch = 0;
|
||||
|
||||
dev_info(dev, DRIVER_NAME " probe");
|
||||
dev_info(dev, " Vendor: 0x%04x", pdev->vendor);
|
||||
@ -117,6 +262,7 @@ static int edev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return -ENOMEM;
|
||||
|
||||
edev->pdev = pdev;
|
||||
edev->dev = dev;
|
||||
pci_set_drvdata(pdev, edev);
|
||||
|
||||
// Allocate DMA buffer
|
||||
@ -234,6 +380,13 @@ static int edev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 1,
|
||||
edev->dma_region + 0x0200, 256, true);
|
||||
|
||||
if (memcmp(edev->dma_region + 0x0000, edev->dma_region + 0x0200, 256) == 0) {
|
||||
dev_info(dev, "test data matches");
|
||||
} else {
|
||||
dev_warn(dev, "test data mismatch");
|
||||
mismatch = 1;
|
||||
}
|
||||
|
||||
dev_info(dev, "start immediate write to host");
|
||||
iowrite32((edev->dma_region_addr + 0x0200) & 0xffffffff, edev->bar[0] + 0x000200);
|
||||
iowrite32(((edev->dma_region_addr + 0x0200) >> 32) & 0xffffffff, edev->bar[0] + 0x000204);
|
||||
@ -251,6 +404,34 @@ static int edev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 1,
|
||||
edev->dma_region + 0x0200, 4, true);
|
||||
|
||||
if (!mismatch) {
|
||||
u64 size;
|
||||
u64 stride;
|
||||
|
||||
dev_info(dev, "disable interrupts");
|
||||
iowrite32(0x0, edev->bar[0] + 0x000008);
|
||||
|
||||
dev_info(dev, "perform block reads (dma_alloc_coherent)");
|
||||
|
||||
for (size = 1; size <= 8192; size *= 2) {
|
||||
for (stride = size; stride <= max(size, 256llu); stride *= 2) {
|
||||
dma_block_read_bench(edev,
|
||||
edev->dma_region_addr + 0x0000,
|
||||
size, stride, 10000);
|
||||
}
|
||||
}
|
||||
|
||||
dev_info(dev, "perform block writes (dma_alloc_coherent)");
|
||||
|
||||
for (size = 1; size <= 8192; size *= 2) {
|
||||
for (stride = size; stride <= max(size, 256llu); stride *= 2) {
|
||||
dma_block_write_bench(edev,
|
||||
edev->dma_region_addr + 0x0000,
|
||||
size, stride, 10000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// probe complete
|
||||
return 0;
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
struct example_dev {
|
||||
struct pci_dev *pdev;
|
||||
struct device *dev;
|
||||
|
||||
// BAR pointers
|
||||
void __iomem *bar[6];
|
||||
|
@ -82,6 +82,7 @@ module example_core_pcie #
|
||||
* TLP input (request)
|
||||
*/
|
||||
input wire [TLP_DATA_WIDTH-1:0] rx_req_tlp_data,
|
||||
input wire [TLP_STRB_WIDTH-1:0] rx_req_tlp_strb,
|
||||
input wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] rx_req_tlp_hdr,
|
||||
input wire [TLP_SEG_COUNT*3-1:0] rx_req_tlp_bar_id,
|
||||
input wire [TLP_SEG_COUNT*8-1:0] rx_req_tlp_func_num,
|
||||
@ -105,6 +106,7 @@ module example_core_pcie #
|
||||
* TLP input (completion)
|
||||
*/
|
||||
input wire [TLP_DATA_WIDTH-1:0] rx_cpl_tlp_data,
|
||||
input wire [TLP_STRB_WIDTH-1:0] rx_cpl_tlp_strb,
|
||||
input wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] rx_cpl_tlp_hdr,
|
||||
input wire [TLP_SEG_COUNT*4-1:0] rx_cpl_tlp_error,
|
||||
input wire [TLP_SEG_COUNT-1:0] rx_cpl_tlp_valid,
|
||||
@ -255,6 +257,7 @@ wire [2:0] status_error_uncor_int;
|
||||
|
||||
// PCIe connections
|
||||
wire [TLP_DATA_WIDTH-1:0] ctrl_rx_req_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] ctrl_rx_req_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] ctrl_rx_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*3-1:0] ctrl_rx_req_tlp_bar_id;
|
||||
wire [TLP_SEG_COUNT*8-1:0] ctrl_rx_req_tlp_func_num;
|
||||
@ -272,6 +275,7 @@ wire [TLP_SEG_COUNT-1:0] ctrl_tx_cpl_tlp_eop;
|
||||
wire ctrl_tx_cpl_tlp_ready;
|
||||
|
||||
wire [TLP_DATA_WIDTH-1:0] ram_rx_req_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] ram_rx_req_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] ram_rx_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*3-1:0] ram_rx_req_tlp_bar_id;
|
||||
wire [TLP_SEG_COUNT*8-1:0] ram_rx_req_tlp_func_num;
|
||||
@ -293,7 +297,9 @@ pcie_tlp_demux_bar #(
|
||||
.TLP_DATA_WIDTH(TLP_DATA_WIDTH),
|
||||
.TLP_STRB_WIDTH(TLP_STRB_WIDTH),
|
||||
.TLP_HDR_WIDTH(TLP_HDR_WIDTH),
|
||||
.TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.IN_TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.OUT_TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.FIFO_ENABLE(0),
|
||||
.BAR_BASE(0),
|
||||
.BAR_STRIDE(2),
|
||||
.BAR_IDS(0)
|
||||
@ -306,7 +312,7 @@ pcie_tlp_demux_inst (
|
||||
* TLP input
|
||||
*/
|
||||
.in_tlp_data(rx_req_tlp_data),
|
||||
.in_tlp_strb(0),
|
||||
.in_tlp_strb(rx_req_tlp_strb),
|
||||
.in_tlp_hdr(rx_req_tlp_hdr),
|
||||
.in_tlp_bar_id(rx_req_tlp_bar_id),
|
||||
.in_tlp_func_num(rx_req_tlp_func_num),
|
||||
@ -320,7 +326,7 @@ pcie_tlp_demux_inst (
|
||||
* TLP output
|
||||
*/
|
||||
.out_tlp_data( {ram_rx_req_tlp_data, ctrl_rx_req_tlp_data }),
|
||||
.out_tlp_strb(),
|
||||
.out_tlp_strb( {ram_rx_req_tlp_strb, ctrl_rx_req_tlp_strb }),
|
||||
.out_tlp_hdr( {ram_rx_req_tlp_hdr, ctrl_rx_req_tlp_hdr }),
|
||||
.out_tlp_bar_id( {ram_rx_req_tlp_bar_id, ctrl_rx_req_tlp_bar_id }),
|
||||
.out_tlp_func_num({ram_rx_req_tlp_func_num, ctrl_rx_req_tlp_func_num}),
|
||||
@ -333,7 +339,13 @@ pcie_tlp_demux_inst (
|
||||
/*
|
||||
* Control
|
||||
*/
|
||||
.enable(1'b1)
|
||||
.enable(1'b1),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.fifo_half_full(),
|
||||
.fifo_watermark()
|
||||
);
|
||||
|
||||
pcie_tlp_mux #(
|
||||
@ -355,6 +367,7 @@ pcie_tlp_mux_inst (
|
||||
.in_tlp_data( {ram_tx_cpl_tlp_data, ctrl_tx_cpl_tlp_data }),
|
||||
.in_tlp_strb( {ram_tx_cpl_tlp_strb, ctrl_tx_cpl_tlp_strb }),
|
||||
.in_tlp_hdr( {ram_tx_cpl_tlp_hdr, ctrl_tx_cpl_tlp_hdr }),
|
||||
.in_tlp_seq(0),
|
||||
.in_tlp_bar_id(0),
|
||||
.in_tlp_func_num(0),
|
||||
.in_tlp_error(0),
|
||||
@ -369,13 +382,20 @@ pcie_tlp_mux_inst (
|
||||
.out_tlp_data(tx_cpl_tlp_data),
|
||||
.out_tlp_strb(tx_cpl_tlp_strb),
|
||||
.out_tlp_hdr(tx_cpl_tlp_hdr),
|
||||
.out_tlp_seq(),
|
||||
.out_tlp_bar_id(),
|
||||
.out_tlp_func_num(),
|
||||
.out_tlp_error(),
|
||||
.out_tlp_valid(tx_cpl_tlp_valid),
|
||||
.out_tlp_sop(tx_cpl_tlp_sop),
|
||||
.out_tlp_eop(tx_cpl_tlp_eop),
|
||||
.out_tlp_ready(tx_cpl_tlp_ready)
|
||||
.out_tlp_ready(tx_cpl_tlp_ready),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.sel_tlp_seq(),
|
||||
.sel_tlp_seq_valid()
|
||||
);
|
||||
|
||||
pcie_axil_master #(
|
||||
|
@ -127,18 +127,19 @@ module example_core_pcie_s10 #
|
||||
input wire [1:0] tl_cfg_func
|
||||
);
|
||||
|
||||
parameter TLP_DATA_WIDTH = SEG_COUNT*SEG_DATA_WIDTH;
|
||||
parameter TLP_STRB_WIDTH = TLP_DATA_WIDTH/32;
|
||||
parameter TLP_HDR_WIDTH = 128;
|
||||
parameter TLP_SEG_COUNT = 1;
|
||||
parameter TLP_SEG_DATA_WIDTH = (SEG_COUNT*SEG_DATA_WIDTH)/TLP_SEG_COUNT;
|
||||
parameter TLP_SEG_STRB_WIDTH = TLP_SEG_DATA_WIDTH/32;
|
||||
parameter TLP_SEG_HDR_WIDTH = 128;
|
||||
parameter TX_SEQ_NUM_COUNT = SEG_COUNT;
|
||||
parameter PF_COUNT = 1;
|
||||
parameter VF_COUNT = 0;
|
||||
parameter F_COUNT = PF_COUNT+VF_COUNT;
|
||||
parameter MSI_COUNT = 32;
|
||||
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH-1:0] pcie_rx_req_tlp_data;
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH-1:0] pcie_rx_req_tlp_hdr;
|
||||
wire [TLP_DATA_WIDTH-1:0] pcie_rx_req_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] pcie_rx_req_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_rx_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*3-1:0] pcie_rx_req_tlp_bar_id;
|
||||
wire [TLP_SEG_COUNT*8-1:0] pcie_rx_req_tlp_func_num;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_rx_req_tlp_valid;
|
||||
@ -146,15 +147,16 @@ wire [TLP_SEG_COUNT-1:0] pcie_rx_req_tlp_sop;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_rx_req_tlp_eop;
|
||||
wire pcie_rx_req_tlp_ready;
|
||||
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH-1:0] pcie_rx_cpl_tlp_data;
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH-1:0] pcie_rx_cpl_tlp_hdr;
|
||||
wire [TLP_DATA_WIDTH-1:0] pcie_rx_cpl_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] pcie_rx_cpl_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_rx_cpl_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*4-1:0] pcie_rx_cpl_tlp_error;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_rx_cpl_tlp_valid;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_rx_cpl_tlp_sop;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_rx_cpl_tlp_eop;
|
||||
wire pcie_rx_cpl_tlp_ready;
|
||||
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH-1:0] pcie_tx_rd_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_tx_rd_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*TX_SEQ_NUM_WIDTH-1:0] pcie_tx_rd_req_tlp_seq;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_rd_req_tlp_valid;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_rd_req_tlp_sop;
|
||||
@ -164,9 +166,9 @@ wire pcie_tx_rd_req_tlp_ready;
|
||||
wire [TX_SEQ_NUM_COUNT*TX_SEQ_NUM_WIDTH-1:0] axis_pcie_rd_req_tx_seq_num;
|
||||
wire [TX_SEQ_NUM_COUNT-1:0] axis_pcie_rd_req_tx_seq_num_valid;
|
||||
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH-1:0] pcie_tx_wr_req_tlp_data;
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_STRB_WIDTH-1:0] pcie_tx_wr_req_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH-1:0] pcie_tx_wr_req_tlp_hdr;
|
||||
wire [TLP_DATA_WIDTH-1:0] pcie_tx_wr_req_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] pcie_tx_wr_req_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_tx_wr_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*TX_SEQ_NUM_WIDTH-1:0] pcie_tx_wr_req_tlp_seq;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_wr_req_tlp_valid;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_wr_req_tlp_sop;
|
||||
@ -176,9 +178,9 @@ wire pcie_tx_wr_req_tlp_ready;
|
||||
wire [TX_SEQ_NUM_COUNT*TX_SEQ_NUM_WIDTH-1:0] axis_pcie_wr_req_tx_seq_num;
|
||||
wire [TX_SEQ_NUM_COUNT-1:0] axis_pcie_wr_req_tx_seq_num_valid;
|
||||
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH-1:0] pcie_tx_cpl_tlp_data;
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_STRB_WIDTH-1:0] pcie_tx_cpl_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_SEG_HDR_WIDTH-1:0] pcie_tx_cpl_tlp_hdr;
|
||||
wire [TLP_DATA_WIDTH-1:0] pcie_tx_cpl_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] pcie_tx_cpl_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_tx_cpl_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_cpl_tlp_valid;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_cpl_tlp_sop;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_tx_cpl_tlp_eop;
|
||||
@ -199,10 +201,10 @@ pcie_s10_if #(
|
||||
.SEG_COUNT(SEG_COUNT),
|
||||
.SEG_DATA_WIDTH(SEG_DATA_WIDTH),
|
||||
.SEG_EMPTY_WIDTH(SEG_EMPTY_WIDTH),
|
||||
.TLP_DATA_WIDTH(TLP_DATA_WIDTH),
|
||||
.TLP_STRB_WIDTH(TLP_STRB_WIDTH),
|
||||
.TLP_HDR_WIDTH(TLP_HDR_WIDTH),
|
||||
.TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.TLP_SEG_DATA_WIDTH(TLP_SEG_DATA_WIDTH),
|
||||
.TLP_SEG_STRB_WIDTH(TLP_SEG_STRB_WIDTH),
|
||||
.TLP_SEG_HDR_WIDTH(TLP_SEG_HDR_WIDTH),
|
||||
.TX_SEQ_NUM_WIDTH(TX_SEQ_NUM_WIDTH),
|
||||
.L_TILE(L_TILE),
|
||||
.PF_COUNT(1),
|
||||
@ -274,6 +276,7 @@ pcie_s10_if_inst (
|
||||
* TLP output (request to BAR)
|
||||
*/
|
||||
.rx_req_tlp_data(pcie_rx_req_tlp_data),
|
||||
.rx_req_tlp_strb(pcie_rx_req_tlp_strb),
|
||||
.rx_req_tlp_hdr(pcie_rx_req_tlp_hdr),
|
||||
.rx_req_tlp_bar_id(pcie_rx_req_tlp_bar_id),
|
||||
.rx_req_tlp_func_num(pcie_rx_req_tlp_func_num),
|
||||
@ -286,6 +289,7 @@ pcie_s10_if_inst (
|
||||
* TLP output (completion to DMA)
|
||||
*/
|
||||
.rx_cpl_tlp_data(pcie_rx_cpl_tlp_data),
|
||||
.rx_cpl_tlp_strb(pcie_rx_cpl_tlp_strb),
|
||||
.rx_cpl_tlp_hdr(pcie_rx_cpl_tlp_hdr),
|
||||
.rx_cpl_tlp_error(pcie_rx_cpl_tlp_error),
|
||||
.rx_cpl_tlp_valid(pcie_rx_cpl_tlp_valid),
|
||||
@ -376,10 +380,10 @@ pcie_s10_if_inst (
|
||||
);
|
||||
|
||||
example_core_pcie #(
|
||||
.TLP_DATA_WIDTH(TLP_DATA_WIDTH),
|
||||
.TLP_STRB_WIDTH(TLP_STRB_WIDTH),
|
||||
.TLP_HDR_WIDTH(TLP_HDR_WIDTH),
|
||||
.TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.TLP_SEG_DATA_WIDTH(TLP_SEG_DATA_WIDTH),
|
||||
.TLP_SEG_STRB_WIDTH(TLP_SEG_STRB_WIDTH),
|
||||
.TLP_SEG_HDR_WIDTH(TLP_SEG_HDR_WIDTH),
|
||||
.TX_SEQ_NUM_COUNT(TX_SEQ_NUM_COUNT),
|
||||
.TX_SEQ_NUM_WIDTH(TX_SEQ_NUM_WIDTH),
|
||||
.TX_SEQ_NUM_ENABLE(TX_SEQ_NUM_ENABLE),
|
||||
@ -405,6 +409,7 @@ core_pcie_inst (
|
||||
* TLP input (request)
|
||||
*/
|
||||
.rx_req_tlp_data(pcie_rx_req_tlp_data),
|
||||
.rx_req_tlp_strb(pcie_rx_req_tlp_strb),
|
||||
.rx_req_tlp_hdr(pcie_rx_req_tlp_hdr),
|
||||
.rx_req_tlp_valid(pcie_rx_req_tlp_valid),
|
||||
.rx_req_tlp_bar_id(pcie_rx_req_tlp_bar_id),
|
||||
@ -428,6 +433,7 @@ core_pcie_inst (
|
||||
* TLP input (completion)
|
||||
*/
|
||||
.rx_cpl_tlp_data(pcie_rx_cpl_tlp_data),
|
||||
.rx_cpl_tlp_strb(pcie_rx_cpl_tlp_strb),
|
||||
.rx_cpl_tlp_hdr(pcie_rx_cpl_tlp_hdr),
|
||||
.rx_cpl_tlp_error(pcie_rx_cpl_tlp_error),
|
||||
.rx_cpl_tlp_valid(pcie_rx_cpl_tlp_valid),
|
||||
|
@ -45,6 +45,14 @@ module example_core_pcie_us #
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
// PCIe AXI stream CC tuser signal width
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
// RC interface TLP straddling
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
// RQ interface TLP straddling
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
// CQ interface TLP straddling
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
// CC interface TLP straddling
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
// RQ sequence number width
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
// RQ sequence number tracking enable
|
||||
@ -194,6 +202,7 @@ parameter F_COUNT = PF_COUNT+VF_COUNT;
|
||||
parameter MSI_COUNT = 32;
|
||||
|
||||
wire [TLP_DATA_WIDTH-1:0] pcie_rx_req_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] pcie_rx_req_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_rx_req_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*3-1:0] pcie_rx_req_tlp_bar_id;
|
||||
wire [TLP_SEG_COUNT*8-1:0] pcie_rx_req_tlp_func_num;
|
||||
@ -203,6 +212,7 @@ wire [TLP_SEG_COUNT-1:0] pcie_rx_req_tlp_eop;
|
||||
wire pcie_rx_req_tlp_ready;
|
||||
|
||||
wire [TLP_DATA_WIDTH-1:0] pcie_rx_cpl_tlp_data;
|
||||
wire [TLP_STRB_WIDTH-1:0] pcie_rx_cpl_tlp_strb;
|
||||
wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] pcie_rx_cpl_tlp_hdr;
|
||||
wire [TLP_SEG_COUNT*4-1:0] pcie_rx_cpl_tlp_error;
|
||||
wire [TLP_SEG_COUNT-1:0] pcie_rx_cpl_tlp_valid;
|
||||
@ -254,6 +264,10 @@ pcie_us_if #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.TLP_DATA_WIDTH(TLP_DATA_WIDTH),
|
||||
.TLP_STRB_WIDTH(TLP_STRB_WIDTH),
|
||||
@ -371,6 +385,7 @@ pcie_us_if_inst (
|
||||
* TLP output (request to BAR)
|
||||
*/
|
||||
.rx_req_tlp_data(pcie_rx_req_tlp_data),
|
||||
.rx_req_tlp_strb(pcie_rx_req_tlp_strb),
|
||||
.rx_req_tlp_hdr(pcie_rx_req_tlp_hdr),
|
||||
.rx_req_tlp_bar_id(pcie_rx_req_tlp_bar_id),
|
||||
.rx_req_tlp_func_num(pcie_rx_req_tlp_func_num),
|
||||
@ -383,6 +398,7 @@ pcie_us_if_inst (
|
||||
* TLP output (completion to DMA)
|
||||
*/
|
||||
.rx_cpl_tlp_data(pcie_rx_cpl_tlp_data),
|
||||
.rx_cpl_tlp_strb(pcie_rx_cpl_tlp_strb),
|
||||
.rx_cpl_tlp_hdr(pcie_rx_cpl_tlp_hdr),
|
||||
.rx_cpl_tlp_error(pcie_rx_cpl_tlp_error),
|
||||
.rx_cpl_tlp_valid(pcie_rx_cpl_tlp_valid),
|
||||
@ -435,6 +451,17 @@ pcie_us_if_inst (
|
||||
.tx_cpl_tlp_eop(pcie_tx_cpl_tlp_eop),
|
||||
.tx_cpl_tlp_ready(pcie_tx_cpl_tlp_ready),
|
||||
|
||||
/*
|
||||
* TLP input (write request from MSI-X)
|
||||
*/
|
||||
.tx_msix_wr_req_tlp_data(0),
|
||||
.tx_msix_wr_req_tlp_strb(0),
|
||||
.tx_msix_wr_req_tlp_hdr(0),
|
||||
.tx_msix_wr_req_tlp_valid(0),
|
||||
.tx_msix_wr_req_tlp_sop(0),
|
||||
.tx_msix_wr_req_tlp_eop(0),
|
||||
.tx_msix_wr_req_tlp_ready(),
|
||||
|
||||
/*
|
||||
* Flow control
|
||||
*/
|
||||
@ -488,6 +515,7 @@ core_pcie_inst (
|
||||
* TLP input (request)
|
||||
*/
|
||||
.rx_req_tlp_data(pcie_rx_req_tlp_data),
|
||||
.rx_req_tlp_strb(pcie_rx_req_tlp_strb),
|
||||
.rx_req_tlp_hdr(pcie_rx_req_tlp_hdr),
|
||||
.rx_req_tlp_valid(pcie_rx_req_tlp_valid),
|
||||
.rx_req_tlp_bar_id(pcie_rx_req_tlp_bar_id),
|
||||
@ -511,6 +539,7 @@ core_pcie_inst (
|
||||
* TLP input (completion)
|
||||
*/
|
||||
.rx_cpl_tlp_data(pcie_rx_cpl_tlp_data),
|
||||
.rx_cpl_tlp_strb(pcie_rx_cpl_tlp_strb),
|
||||
.rx_cpl_tlp_hdr(pcie_rx_cpl_tlp_hdr),
|
||||
.rx_cpl_tlp_error(pcie_rx_cpl_tlp_error),
|
||||
.rx_cpl_tlp_valid(pcie_rx_cpl_tlp_valid),
|
||||
|
@ -45,6 +45,9 @@ VERILOG_SOURCES += ../../../../rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_fifo_mux.v
|
||||
VERILOG_SOURCES += ../../../../rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../../../rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../../../rtl/dma_if_pcie_wr.v
|
||||
|
@ -414,7 +414,7 @@ rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
|
||||
pcie_rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', '..', '..', 'rtl'))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("data_width", [256])
|
||||
@pytest.mark.parametrize("data_width", [256, 512])
|
||||
@pytest.mark.parametrize("l_tile", [0, 1])
|
||||
def test_example_core_pcie_s10(request, data_width, l_tile):
|
||||
dut = "example_core_pcie_s10"
|
||||
@ -438,6 +438,9 @@ def test_example_core_pcie_s10(request, data_width, l_tile):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
|
@ -47,6 +47,8 @@ VERILOG_SOURCES += ../../../../rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../../../rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../../../rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../../../rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../../../rtl/dma_if_pcie_wr.v
|
||||
@ -62,6 +64,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= $(if $(filter-out 60,$(PARAM_AXIS_PCIE_RQ_USER_WIDTH)),6,4)
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 256
|
||||
@ -85,6 +91,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -96,8 +106,8 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).WRITE_OP_TABLE_SIZE=$(PARAM_WRITE_OP_TABLE_SIZE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).WRITE_TX_LIMIT=$(PARAM_WRITE_TX_LIMIT)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).WRITE_TX_FC_ENABLE=$(PARAM_WRITE_TX_FC_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).WRITE_BAR0_APERTURE=$(PARAM_BAR0_APERTURE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).WRITE_BAR2_APERTURE=$(PARAM_BAR2_APERTURE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).BAR0_APERTURE=$(PARAM_BAR0_APERTURE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).BAR2_APERTURE=$(PARAM_BAR2_APERTURE)
|
||||
|
||||
ifeq ($(WAVES), 1)
|
||||
VERILOG_SOURCES += iverilog_dump.v
|
||||
@ -112,6 +122,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -53,11 +53,11 @@ class TB(object):
|
||||
# pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=len(dut.pcie_us_if_inst.pcie_us_if_cq_inst.rx_req_tlp_valid_reg) > 1,
|
||||
cc_straddle=len(dut.pcie_us_if_inst.pcie_us_if_cc_inst.out_tlp_valid) > 1,
|
||||
rq_straddle=len(dut.pcie_us_if_inst.pcie_us_if_rq_inst.out_tlp_valid) > 1,
|
||||
rc_straddle=len(dut.pcie_us_if_inst.pcie_us_if_rc_inst.rx_cpl_tlp_valid_reg) > 1,
|
||||
rc_4tlp_straddle=len(dut.pcie_us_if_inst.pcie_us_if_rc_inst.rx_cpl_tlp_valid_reg) > 2,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -492,6 +492,8 @@ async def run_test(dut):
|
||||
if cnt == 0:
|
||||
break
|
||||
|
||||
await Timer(2000, 'ns')
|
||||
|
||||
tb.log.info("%s", mem.hexdump_str(dest_offset, region_len))
|
||||
|
||||
assert mem[src_offset:src_offset+region_len] == mem[dest_offset:dest_offset+region_len]
|
||||
@ -507,8 +509,9 @@ rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', 'rtl'))
|
||||
pcie_rtl_dir = os.path.abspath(os.path.join(tests_dir, '..', '..', '..', '..', 'rtl'))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("axis_pcie_data_width", [64, 128, 256, 512])
|
||||
def test_example_core_pcie_us(request, axis_pcie_data_width):
|
||||
@pytest.mark.parametrize(("axis_pcie_data_width", "straddle"),
|
||||
[(64, False), (128, False), (256, False), (256, True), (512, False), (512, True)])
|
||||
def test_example_core_pcie_us(request, axis_pcie_data_width, straddle):
|
||||
dut = "example_core_pcie_us"
|
||||
module = os.path.splitext(os.path.basename(__file__))[0]
|
||||
toplevel = dut
|
||||
@ -532,6 +535,8 @@ def test_example_core_pcie_us(request, axis_pcie_data_width):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -549,6 +554,10 @@ def test_example_core_pcie_us(request, axis_pcie_data_width):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256 and straddle)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512 and straddle)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512 and straddle)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512 and straddle)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 4 if parameters['AXIS_PCIE_RQ_USER_WIDTH'] == 60 else 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 256
|
||||
|
@ -28,6 +28,8 @@ SYN_FILES += lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_demux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_mux.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
SYN_FILES += lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
SYN_FILES += lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
|
@ -4,7 +4,9 @@ create_ip -name pcie4_uscale_plus -vendor xilinx.com -library ip -module_name pc
|
||||
set_property -dict [list \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_SPEED {8.0_GT/s} \
|
||||
CONFIG.PL_LINK_CAP_MAX_LINK_WIDTH {X16} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {false} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_CQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RQ_STRADDLE {true} \
|
||||
CONFIG.AXISTEN_IF_EXT_512_RC_4TLP_STRADDLE {true} \
|
||||
CONFIG.axisten_if_enable_client_tag {true} \
|
||||
CONFIG.axisten_if_width {512_bit} \
|
||||
CONFIG.axisten_freq {250} \
|
||||
|
@ -59,11 +59,15 @@ parameter AXIS_PCIE_RC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 75 : 161;
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137;
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183;
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81;
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256;
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512;
|
||||
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6;
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1;
|
||||
|
||||
parameter PCIE_TAG_COUNT = 64;
|
||||
parameter PCIE_TAG_COUNT = 256;
|
||||
parameter BAR0_APERTURE = 24;
|
||||
parameter BAR2_APERTURE = 24;
|
||||
|
||||
@ -388,6 +392,10 @@ fpga_core #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -39,9 +39,13 @@ module fpga_core #
|
||||
parameter AXIS_PCIE_RQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 60 : 137,
|
||||
parameter AXIS_PCIE_CQ_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 85 : 183,
|
||||
parameter AXIS_PCIE_CC_USER_WIDTH = AXIS_PCIE_DATA_WIDTH < 512 ? 33 : 81,
|
||||
parameter RC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 256,
|
||||
parameter RQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CQ_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter CC_STRADDLE = AXIS_PCIE_DATA_WIDTH >= 512,
|
||||
parameter RQ_SEQ_NUM_WIDTH = AXIS_PCIE_RQ_USER_WIDTH == 60 ? 4 : 6,
|
||||
parameter RQ_SEQ_NUM_ENABLE = 1,
|
||||
parameter PCIE_TAG_COUNT = 64,
|
||||
parameter PCIE_TAG_COUNT = 256,
|
||||
parameter BAR0_APERTURE = 24,
|
||||
parameter BAR2_APERTURE = 24
|
||||
)
|
||||
@ -150,6 +154,10 @@ example_core_pcie_us #(
|
||||
.AXIS_PCIE_RQ_USER_WIDTH(AXIS_PCIE_RQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CQ_USER_WIDTH(AXIS_PCIE_CQ_USER_WIDTH),
|
||||
.AXIS_PCIE_CC_USER_WIDTH(AXIS_PCIE_CC_USER_WIDTH),
|
||||
.RC_STRADDLE(RC_STRADDLE),
|
||||
.RQ_STRADDLE(RQ_STRADDLE),
|
||||
.CQ_STRADDLE(CQ_STRADDLE),
|
||||
.CC_STRADDLE(CC_STRADDLE),
|
||||
.RQ_SEQ_NUM_WIDTH(RQ_SEQ_NUM_WIDTH),
|
||||
.RQ_SEQ_NUM_ENABLE(RQ_SEQ_NUM_ENABLE),
|
||||
.PCIE_TAG_COUNT(PCIE_TAG_COUNT),
|
||||
|
@ -48,6 +48,8 @@ VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axi_master_wr.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
|
||||
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
|
||||
@ -63,6 +65,10 @@ export PARAM_AXIS_PCIE_RQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_
|
||||
export PARAM_AXIS_PCIE_RC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),75,161)
|
||||
export PARAM_AXIS_PCIE_CQ_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),88,183)
|
||||
export PARAM_AXIS_PCIE_CC_USER_WIDTH ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),33,81)
|
||||
export PARAM_RC_STRADDLE ?= $(if $(filter-out 256 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CQ_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_CC_STRADDLE ?= $(if $(filter-out 512,$(PARAM_AXIS_PCIE_DATA_WIDTH)),0,1)
|
||||
export PARAM_RQ_SEQ_NUM_WIDTH ?= 6
|
||||
export PARAM_RQ_SEQ_NUM_ENABLE ?= 1
|
||||
export PARAM_PCIE_TAG_COUNT ?= 64
|
||||
@ -78,6 +84,10 @@ ifeq ($(SIM), icarus)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).AXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).CC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).RQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -P $(TOPLEVEL).PCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
@ -97,6 +107,10 @@ else ifeq ($(SIM), verilator)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_RC_USER_WIDTH=$(PARAM_AXIS_PCIE_RC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CQ_USER_WIDTH=$(PARAM_AXIS_PCIE_CQ_USER_WIDTH)
|
||||
COMPILE_ARGS += -GAXIS_PCIE_CC_USER_WIDTH=$(PARAM_AXIS_PCIE_CC_USER_WIDTH)
|
||||
COMPILE_ARGS += -GRC_STRADDLE=$(PARAM_RC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_STRADDLE=$(PARAM_RQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCQ_STRADDLE=$(PARAM_CQ_STRADDLE)
|
||||
COMPILE_ARGS += -GCC_STRADDLE=$(PARAM_CC_STRADDLE)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_WIDTH=$(PARAM_RQ_SEQ_NUM_WIDTH)
|
||||
COMPILE_ARGS += -GRQ_SEQ_NUM_ENABLE=$(PARAM_RQ_SEQ_NUM_ENABLE)
|
||||
COMPILE_ARGS += -GPCIE_TAG_COUNT=$(PARAM_PCIE_TAG_COUNT)
|
||||
|
@ -52,11 +52,11 @@ class TB(object):
|
||||
pcie_link_width=16,
|
||||
user_clk_frequency=250e6,
|
||||
alignment="dword",
|
||||
cq_straddle=False,
|
||||
cc_straddle=False,
|
||||
rq_straddle=False,
|
||||
rc_straddle=False,
|
||||
rc_4tlp_straddle=False,
|
||||
cq_straddle=True,
|
||||
cc_straddle=True,
|
||||
rq_straddle=True,
|
||||
rc_straddle=True,
|
||||
rc_4tlp_straddle=True,
|
||||
pf_count=1,
|
||||
max_payload_size=1024,
|
||||
enable_client_tag=True,
|
||||
@ -515,6 +515,8 @@ def test_fpga_core(request):
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux_bar.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_demux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_mux.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo.v"),
|
||||
os.path.join(pcie_rtl_dir, "pcie_tlp_fifo_raw.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_rd.v"),
|
||||
os.path.join(pcie_rtl_dir, "dma_if_pcie_wr.v"),
|
||||
@ -532,6 +534,10 @@ def test_fpga_core(request):
|
||||
parameters['AXIS_PCIE_RC_USER_WIDTH'] = 75 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 161
|
||||
parameters['AXIS_PCIE_CQ_USER_WIDTH'] = 88 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 183
|
||||
parameters['AXIS_PCIE_CC_USER_WIDTH'] = 33 if parameters['AXIS_PCIE_DATA_WIDTH'] < 512 else 81
|
||||
parameters['RC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 256)
|
||||
parameters['RQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CQ_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['CC_STRADDLE'] = int(parameters['AXIS_PCIE_DATA_WIDTH'] >= 512)
|
||||
parameters['RQ_SEQ_NUM_WIDTH'] = 6
|
||||
parameters['RQ_SEQ_NUM_ENABLE'] = 1
|
||||
parameters['PCIE_TAG_COUNT'] = 64
|
||||
|
@ -54,7 +54,7 @@ module dma_if_pcie #
|
||||
// RAM segment count
|
||||
parameter RAM_SEG_COUNT = TLP_SEG_COUNT*2,
|
||||
// RAM segment data width
|
||||
parameter RAM_SEG_DATA_WIDTH = (TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH)*2/RAM_SEG_COUNT,
|
||||
parameter RAM_SEG_DATA_WIDTH = TLP_DATA_WIDTH*2/RAM_SEG_COUNT,
|
||||
// RAM segment byte enable width
|
||||
parameter RAM_SEG_BE_WIDTH = RAM_SEG_DATA_WIDTH/8,
|
||||
// RAM segment address width
|
||||
|
@ -52,7 +52,7 @@ module dma_if_pcie_rd #
|
||||
// RAM segment count
|
||||
parameter RAM_SEG_COUNT = TLP_SEG_COUNT*2,
|
||||
// RAM segment data width
|
||||
parameter RAM_SEG_DATA_WIDTH = (TLP_SEG_COUNT*TLP_SEG_DATA_WIDTH)*2/RAM_SEG_COUNT,
|
||||
parameter RAM_SEG_DATA_WIDTH = TLP_DATA_WIDTH*2/RAM_SEG_COUNT,
|
||||
// RAM segment byte enable width
|
||||
parameter RAM_SEG_BE_WIDTH = RAM_SEG_DATA_WIDTH/8,
|
||||
// RAM segment address width
|
||||
@ -351,6 +351,12 @@ reg [OFFSET_WIDTH-1:0] offset_reg = {OFFSET_WIDTH{1'b0}}, offset_next;
|
||||
reg [TLP_DATA_WIDTH-1:0] tlp_data_int_reg = 0, tlp_data_int_next;
|
||||
reg tlp_data_valid_int_reg = 0, tlp_data_valid_int_next;
|
||||
|
||||
reg [RAM_SEG_COUNT*RAM_SEL_WIDTH-1:0] ram_wr_cmd_sel_pipe_reg = 0, ram_wr_cmd_sel_pipe_next;
|
||||
reg [RAM_SEG_COUNT*RAM_SEG_BE_WIDTH-1:0] ram_wr_cmd_be_pipe_reg = 0, ram_wr_cmd_be_pipe_next;
|
||||
reg [RAM_SEG_COUNT*RAM_SEG_ADDR_WIDTH-1:0] ram_wr_cmd_addr_pipe_reg = 0, ram_wr_cmd_addr_pipe_next;
|
||||
reg [RAM_SEG_COUNT*RAM_SEG_DATA_WIDTH-1:0] ram_wr_cmd_data_pipe_reg = 0, ram_wr_cmd_data_pipe_next;
|
||||
reg [RAM_SEG_COUNT-1:0] ram_wr_cmd_valid_pipe_reg = 0, ram_wr_cmd_valid_pipe_next;
|
||||
|
||||
reg [2:0] rx_cpl_tlp_hdr_fmt;
|
||||
reg [4:0] rx_cpl_tlp_hdr_type;
|
||||
reg [2:0] rx_cpl_tlp_hdr_tc;
|
||||
@ -376,7 +382,7 @@ reg [10:0] max_read_request_size_dw_reg = 11'd0;
|
||||
reg have_credit_reg = 1'b0;
|
||||
|
||||
reg [STATUS_FIFO_ADDR_WIDTH+1-1:0] status_fifo_wr_ptr_reg = 0;
|
||||
reg [STATUS_FIFO_ADDR_WIDTH+1-1:0] status_fifo_rd_ptr_reg = 0, status_fifo_rd_ptr_next;
|
||||
reg [STATUS_FIFO_ADDR_WIDTH+1-1:0] status_fifo_rd_ptr_reg = 0;
|
||||
(* ram_style = "distributed", ramstyle = "no_rw_check, mlab" *)
|
||||
reg [OP_TAG_WIDTH-1:0] status_fifo_op_tag[(2**STATUS_FIFO_ADDR_WIDTH)-1:0];
|
||||
(* ram_style = "distributed", ramstyle = "no_rw_check, mlab" *)
|
||||
@ -389,16 +395,17 @@ reg [OP_TAG_WIDTH-1:0] status_fifo_wr_op_tag;
|
||||
reg [RAM_SEG_COUNT-1:0] status_fifo_wr_mask;
|
||||
reg status_fifo_wr_finish;
|
||||
reg [3:0] status_fifo_wr_error;
|
||||
reg status_fifo_we;
|
||||
reg status_fifo_wr_en;
|
||||
reg status_fifo_mask_reg = 1'b0, status_fifo_mask_next;
|
||||
reg status_fifo_finish_reg = 1'b0, status_fifo_finish_next;
|
||||
reg [3:0] status_fifo_error_reg = 4'd0, status_fifo_error_next;
|
||||
reg status_fifo_we_reg = 1'b0, status_fifo_we_next;
|
||||
reg status_fifo_wr_en_reg = 1'b0, status_fifo_wr_en_next;
|
||||
reg status_fifo_half_full_reg = 1'b0;
|
||||
reg [OP_TAG_WIDTH-1:0] status_fifo_rd_op_tag_reg = 0, status_fifo_rd_op_tag_next;
|
||||
reg [RAM_SEG_COUNT-1:0] status_fifo_rd_mask_reg = 0, status_fifo_rd_mask_next;
|
||||
reg status_fifo_rd_finish_reg = 1'b0, status_fifo_rd_finish_next;
|
||||
reg [3:0] status_fifo_rd_error_reg = 4'd0, status_fifo_rd_error_next;
|
||||
reg status_fifo_rd_en;
|
||||
reg [OP_TAG_WIDTH-1:0] status_fifo_rd_op_tag_reg = 0;
|
||||
reg [RAM_SEG_COUNT-1:0] status_fifo_rd_mask_reg = 0;
|
||||
reg status_fifo_rd_finish_reg = 1'b0;
|
||||
reg [3:0] status_fifo_rd_error_reg = 4'd0;
|
||||
reg status_fifo_rd_valid_reg = 1'b0, status_fifo_rd_valid_next;
|
||||
|
||||
reg [TX_COUNT_WIDTH-1:0] active_tx_count_reg = {TX_COUNT_WIDTH{1'b0}}, active_tx_count_next;
|
||||
@ -854,30 +861,36 @@ always @* begin
|
||||
status_fifo_mask_next = 1'b1;
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b0;
|
||||
status_fifo_wr_en_next = 1'b0;
|
||||
|
||||
out_done_ack = {RAM_SEG_COUNT{1'b0}};
|
||||
|
||||
// Write generation
|
||||
ram_wr_cmd_sel_int = {RAM_SEG_COUNT{ram_sel_reg}};
|
||||
ram_wr_cmd_sel_pipe_next = {RAM_SEG_COUNT{ram_sel_reg}};
|
||||
if (!ram_wrap_reg) begin
|
||||
ram_wr_cmd_be_int = ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} << start_offset_reg) & ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} >> (RAM_SEG_COUNT*RAM_SEG_BE_WIDTH-1-end_offset_reg));
|
||||
ram_wr_cmd_be_pipe_next = ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} << start_offset_reg) & ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} >> (RAM_SEG_COUNT*RAM_SEG_BE_WIDTH-1-end_offset_reg));
|
||||
end else begin
|
||||
ram_wr_cmd_be_int = ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} << start_offset_reg) | ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} >> (RAM_SEG_COUNT*RAM_SEG_BE_WIDTH-1-end_offset_reg));
|
||||
ram_wr_cmd_be_pipe_next = ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} << start_offset_reg) | ({RAM_SEG_COUNT*RAM_SEG_BE_WIDTH{1'b1}} >> (RAM_SEG_COUNT*RAM_SEG_BE_WIDTH-1-end_offset_reg));
|
||||
end
|
||||
for (i = 0; i < RAM_SEG_COUNT; i = i + 1) begin
|
||||
ram_wr_cmd_addr_int[i*RAM_SEG_ADDR_WIDTH +: RAM_SEG_ADDR_WIDTH] = addr_delay_reg[RAM_ADDR_WIDTH-1:RAM_ADDR_WIDTH-RAM_SEG_ADDR_WIDTH];
|
||||
ram_wr_cmd_addr_pipe_next[i*RAM_SEG_ADDR_WIDTH +: RAM_SEG_ADDR_WIDTH] = addr_delay_reg[RAM_ADDR_WIDTH-1:RAM_ADDR_WIDTH-RAM_SEG_ADDR_WIDTH];
|
||||
if (ram_mask_1_reg[i]) begin
|
||||
ram_wr_cmd_addr_int[i*RAM_SEG_ADDR_WIDTH +: RAM_SEG_ADDR_WIDTH] = addr_delay_reg[RAM_ADDR_WIDTH-1:RAM_ADDR_WIDTH-RAM_SEG_ADDR_WIDTH]+1;
|
||||
ram_wr_cmd_addr_pipe_next[i*RAM_SEG_ADDR_WIDTH +: RAM_SEG_ADDR_WIDTH] = addr_delay_reg[RAM_ADDR_WIDTH-1:RAM_ADDR_WIDTH-RAM_SEG_ADDR_WIDTH]+1;
|
||||
end
|
||||
end
|
||||
ram_wr_cmd_data_int = {3{tlp_data_int_reg}} >> (TLP_DATA_WIDTH - offset_reg*8);
|
||||
ram_wr_cmd_valid_int = {RAM_SEG_COUNT{1'b0}};
|
||||
ram_wr_cmd_data_pipe_next = {3{tlp_data_int_reg}} >> (TLP_DATA_WIDTH - offset_reg*8);
|
||||
ram_wr_cmd_valid_pipe_next = {RAM_SEG_COUNT{1'b0}};
|
||||
|
||||
if (tlp_data_valid_int_reg) begin
|
||||
ram_wr_cmd_valid_int = ram_mask_reg;
|
||||
ram_wr_cmd_valid_pipe_next = ram_mask_reg;
|
||||
end
|
||||
|
||||
ram_wr_cmd_sel_int = ram_wr_cmd_sel_pipe_reg;
|
||||
ram_wr_cmd_be_int = ram_wr_cmd_be_pipe_reg;
|
||||
ram_wr_cmd_addr_int = ram_wr_cmd_addr_pipe_reg;
|
||||
ram_wr_cmd_data_int = ram_wr_cmd_data_pipe_reg;
|
||||
ram_wr_cmd_valid_int = ram_wr_cmd_valid_pipe_reg;
|
||||
|
||||
status_error_cor_next = 1'b0;
|
||||
status_error_uncor_next = 1'b0;
|
||||
|
||||
@ -920,7 +933,7 @@ always @* begin
|
||||
addr_next = pcie_tag_table_ram_addr[pcie_tag_next] - rx_cpl_tlp_hdr_byte_count;
|
||||
zero_len_next = pcie_tag_table_zero_len[pcie_tag_next];
|
||||
|
||||
offset_next = addr_next[OFFSET_WIDTH-1:0] - rx_cpl_tlp_hdr_lower_addr[1:0];
|
||||
offset_next = pcie_tag_table_ram_addr[pcie_tag_next] - (rx_cpl_tlp_hdr_byte_count + rx_cpl_tlp_hdr_lower_addr[1:0]);
|
||||
|
||||
if (rx_cpl_tlp_hdr_byte_count > (op_dword_count_next << 2) - rx_cpl_tlp_hdr_lower_addr[1:0]) begin
|
||||
// more completions to follow
|
||||
@ -1045,7 +1058,7 @@ always @* begin
|
||||
|
||||
status_fifo_mask_next = 1'b0;
|
||||
status_fifo_finish_next = 1'b1;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
stat_rd_req_finish_tag_next = pcie_tag_next;
|
||||
stat_rd_req_finish_status_next = status_fifo_error_next;
|
||||
@ -1066,7 +1079,7 @@ always @* begin
|
||||
status_fifo_mask_next = 1'b1;
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
if (zero_len_next) begin
|
||||
tlp_data_valid_int_next = 1'b0;
|
||||
@ -1133,7 +1146,7 @@ always @* begin
|
||||
status_fifo_mask_next = 1'b1;
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
stat_rd_req_finish_tag_next = pcie_tag_next;
|
||||
stat_rd_req_finish_status_next = DMA_ERROR_NONE;
|
||||
@ -1205,27 +1218,14 @@ always @* begin
|
||||
end
|
||||
end
|
||||
|
||||
status_fifo_rd_ptr_next = status_fifo_rd_ptr_reg;
|
||||
|
||||
status_fifo_wr_op_tag = op_tag_reg;
|
||||
status_fifo_wr_mask = status_fifo_mask_reg ? ram_mask_reg : 0;
|
||||
status_fifo_wr_finish = status_fifo_finish_reg;
|
||||
status_fifo_wr_error = status_fifo_error_reg;
|
||||
status_fifo_we = 1'b0;
|
||||
status_fifo_wr_en = status_fifo_wr_en_reg;
|
||||
|
||||
if (status_fifo_we_reg) begin
|
||||
status_fifo_wr_op_tag = op_tag_reg;
|
||||
status_fifo_wr_mask = status_fifo_mask_reg ? ram_mask_reg : 0;
|
||||
status_fifo_wr_finish = status_fifo_finish_reg;
|
||||
status_fifo_wr_error = status_fifo_error_reg;
|
||||
status_fifo_we = 1'b1;
|
||||
end
|
||||
|
||||
status_fifo_rd_op_tag_next = status_fifo_rd_op_tag_reg;
|
||||
status_fifo_rd_mask_next = status_fifo_rd_mask_reg;
|
||||
status_fifo_rd_finish_next = status_fifo_rd_finish_reg;
|
||||
status_fifo_rd_error_next = status_fifo_rd_error_reg;
|
||||
status_fifo_rd_valid_next = status_fifo_rd_valid_reg;
|
||||
status_fifo_rd_en = 1'b0;
|
||||
|
||||
m_axis_read_desc_status_tag_next = op_table_tag[status_fifo_rd_op_tag_reg];
|
||||
if (status_fifo_rd_error_reg != DMA_ERROR_NONE) begin
|
||||
@ -1280,12 +1280,8 @@ always @* begin
|
||||
|
||||
if (!status_fifo_rd_valid_next && status_fifo_rd_ptr_reg != status_fifo_wr_ptr_reg) begin
|
||||
// status FIFO not empty
|
||||
status_fifo_rd_op_tag_next = status_fifo_op_tag[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_mask_next = status_fifo_mask[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_finish_next = status_fifo_finish[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_error_next = status_fifo_error[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_en = 1'b1;
|
||||
status_fifo_rd_valid_next = 1'b1;
|
||||
status_fifo_rd_ptr_next = status_fifo_rd_ptr_reg + 1;
|
||||
end
|
||||
end
|
||||
|
||||
@ -1357,6 +1353,12 @@ always @(posedge clk) begin
|
||||
tlp_data_int_reg <= tlp_data_int_next;
|
||||
tlp_data_valid_int_reg <= tlp_data_valid_int_next;
|
||||
|
||||
ram_wr_cmd_sel_pipe_reg <= ram_wr_cmd_sel_pipe_next;
|
||||
ram_wr_cmd_be_pipe_reg <= ram_wr_cmd_be_pipe_next;
|
||||
ram_wr_cmd_addr_pipe_reg <= ram_wr_cmd_addr_pipe_next;
|
||||
ram_wr_cmd_data_pipe_reg <= ram_wr_cmd_data_pipe_next;
|
||||
ram_wr_cmd_valid_pipe_reg <= ram_wr_cmd_valid_pipe_next;
|
||||
|
||||
tx_rd_req_tlp_hdr_reg <= tx_rd_req_tlp_hdr_next;
|
||||
tx_rd_req_tlp_valid_reg <= tx_rd_req_tlp_valid_next;
|
||||
|
||||
@ -1394,24 +1396,27 @@ always @(posedge clk) begin
|
||||
|
||||
have_credit_reg <= pcie_tx_fc_nph_av > 4;
|
||||
|
||||
if (status_fifo_we) begin
|
||||
if (status_fifo_wr_en) begin
|
||||
status_fifo_op_tag[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_op_tag;
|
||||
status_fifo_mask[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_mask;
|
||||
status_fifo_finish[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_finish;
|
||||
status_fifo_error[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_error;
|
||||
status_fifo_wr_ptr_reg <= status_fifo_wr_ptr_reg + 1;
|
||||
end
|
||||
status_fifo_rd_ptr_reg <= status_fifo_rd_ptr_next;
|
||||
|
||||
if (status_fifo_rd_en) begin
|
||||
status_fifo_rd_op_tag_reg <= status_fifo_op_tag[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_mask_reg <= status_fifo_mask[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_finish_reg <= status_fifo_finish[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_error_reg <= status_fifo_error[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_ptr_reg <= status_fifo_rd_ptr_reg + 1;
|
||||
end
|
||||
|
||||
status_fifo_mask_reg <= status_fifo_mask_next;
|
||||
status_fifo_finish_reg <= status_fifo_finish_next;
|
||||
status_fifo_error_reg <= status_fifo_error_next;
|
||||
status_fifo_we_reg <= status_fifo_we_next;
|
||||
status_fifo_wr_en_reg <= status_fifo_wr_en_next;
|
||||
|
||||
status_fifo_rd_op_tag_reg <= status_fifo_rd_op_tag_next;
|
||||
status_fifo_rd_mask_reg <= status_fifo_rd_mask_next;
|
||||
status_fifo_rd_finish_reg <= status_fifo_rd_finish_next;
|
||||
status_fifo_rd_error_reg <= status_fifo_rd_error_next;
|
||||
status_fifo_rd_valid_reg <= status_fifo_rd_valid_next;
|
||||
|
||||
status_fifo_half_full_reg <= $unsigned(status_fifo_wr_ptr_reg - status_fifo_rd_ptr_reg) >= 2**(STATUS_FIFO_ADDR_WIDTH-1);
|
||||
@ -1536,7 +1541,7 @@ always @(posedge clk) begin
|
||||
|
||||
status_fifo_wr_ptr_reg <= 0;
|
||||
status_fifo_rd_ptr_reg <= 0;
|
||||
status_fifo_we_reg <= 1'b0;
|
||||
status_fifo_wr_en_reg <= 1'b0;
|
||||
status_fifo_rd_valid_reg <= 1'b0;
|
||||
|
||||
active_tx_count_reg <= {TX_COUNT_WIDTH{1'b0}};
|
||||
|
@ -391,7 +391,7 @@ reg [10:0] max_read_request_size_dw_reg = 11'd0;
|
||||
reg have_credit_reg = 1'b0;
|
||||
|
||||
reg [STATUS_FIFO_ADDR_WIDTH+1-1:0] status_fifo_wr_ptr_reg = 0;
|
||||
reg [STATUS_FIFO_ADDR_WIDTH+1-1:0] status_fifo_rd_ptr_reg = 0, status_fifo_rd_ptr_next;
|
||||
reg [STATUS_FIFO_ADDR_WIDTH+1-1:0] status_fifo_rd_ptr_reg = 0;
|
||||
(* ram_style = "distributed", ramstyle = "no_rw_check, mlab" *)
|
||||
reg [OP_TAG_WIDTH-1:0] status_fifo_op_tag[(2**STATUS_FIFO_ADDR_WIDTH)-1:0];
|
||||
(* ram_style = "distributed", ramstyle = "no_rw_check, mlab" *)
|
||||
@ -404,16 +404,17 @@ reg [OP_TAG_WIDTH-1:0] status_fifo_wr_op_tag;
|
||||
reg [SEG_COUNT-1:0] status_fifo_wr_mask;
|
||||
reg status_fifo_wr_finish;
|
||||
reg [3:0] status_fifo_wr_error;
|
||||
reg status_fifo_we;
|
||||
reg status_fifo_wr_en;
|
||||
reg status_fifo_mask_reg = 1'b0, status_fifo_mask_next;
|
||||
reg status_fifo_finish_reg = 1'b0, status_fifo_finish_next;
|
||||
reg [3:0] status_fifo_error_reg = 4'd0, status_fifo_error_next;
|
||||
reg status_fifo_we_reg = 1'b0, status_fifo_we_next;
|
||||
reg status_fifo_wr_en_reg = 1'b0, status_fifo_wr_en_next;
|
||||
reg status_fifo_half_full_reg = 1'b0;
|
||||
reg [OP_TAG_WIDTH-1:0] status_fifo_rd_op_tag_reg = 0, status_fifo_rd_op_tag_next;
|
||||
reg [SEG_COUNT-1:0] status_fifo_rd_mask_reg = 0, status_fifo_rd_mask_next;
|
||||
reg status_fifo_rd_finish_reg = 1'b0, status_fifo_rd_finish_next;
|
||||
reg [3:0] status_fifo_rd_error_reg = 4'd0, status_fifo_rd_error_next;
|
||||
reg status_fifo_rd_en;
|
||||
reg [OP_TAG_WIDTH-1:0] status_fifo_rd_op_tag_reg = 0;
|
||||
reg [SEG_COUNT-1:0] status_fifo_rd_mask_reg = 0;
|
||||
reg status_fifo_rd_finish_reg = 1'b0;
|
||||
reg [3:0] status_fifo_rd_error_reg = 4'd0;
|
||||
reg status_fifo_rd_valid_reg = 1'b0, status_fifo_rd_valid_next;
|
||||
|
||||
reg [RQ_SEQ_NUM_WIDTH-1:0] active_tx_count_reg = {RQ_SEQ_NUM_WIDTH{1'b0}};
|
||||
@ -873,7 +874,7 @@ always @* begin
|
||||
status_fifo_mask_next = 1'b1;
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b0;
|
||||
status_fifo_wr_en_next = 1'b0;
|
||||
|
||||
out_done_ack = {SEG_COUNT{1'b0}};
|
||||
|
||||
@ -1053,7 +1054,7 @@ always @* begin
|
||||
|
||||
status_fifo_mask_next = 1'b0;
|
||||
status_fifo_finish_next = 1'b1;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
if (s_axis_rc_tlast) begin
|
||||
tlp_state_next = TLP_STATE_IDLE;
|
||||
@ -1070,7 +1071,7 @@ always @* begin
|
||||
status_fifo_mask_next = 1'b1;
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
if (zero_len_next) begin
|
||||
rc_tvalid_int_next = 1'b0;
|
||||
@ -1241,7 +1242,7 @@ always @* begin
|
||||
|
||||
status_fifo_mask_next = 1'b0;
|
||||
status_fifo_finish_next = 1'b1;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
if (s_axis_rc_tlast) begin
|
||||
tlp_state_next = TLP_STATE_IDLE;
|
||||
@ -1263,7 +1264,7 @@ always @* begin
|
||||
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
if (last_cycle) begin
|
||||
if (final_cpl_next) begin
|
||||
@ -1320,7 +1321,7 @@ always @* begin
|
||||
status_fifo_mask_next = 1'b1;
|
||||
status_fifo_finish_next = 1'b0;
|
||||
status_fifo_error_next = DMA_ERROR_NONE;
|
||||
status_fifo_we_next = 1'b1;
|
||||
status_fifo_wr_en_next = 1'b1;
|
||||
|
||||
if (last_cycle) begin
|
||||
if (final_cpl_reg) begin
|
||||
@ -1390,27 +1391,14 @@ always @* begin
|
||||
end
|
||||
end
|
||||
|
||||
status_fifo_rd_ptr_next = status_fifo_rd_ptr_reg;
|
||||
|
||||
status_fifo_wr_op_tag = op_tag_reg;
|
||||
status_fifo_wr_mask = status_fifo_mask_reg ? ram_mask_reg : 0;
|
||||
status_fifo_wr_finish = status_fifo_finish_reg;
|
||||
status_fifo_wr_error = status_fifo_error_reg;
|
||||
status_fifo_we = 1'b0;
|
||||
status_fifo_wr_en = status_fifo_wr_en_reg;
|
||||
|
||||
if (status_fifo_we_reg) begin
|
||||
status_fifo_wr_op_tag = op_tag_reg;
|
||||
status_fifo_wr_mask = status_fifo_mask_reg ? ram_mask_reg : 0;
|
||||
status_fifo_wr_finish = status_fifo_finish_reg;
|
||||
status_fifo_wr_error = status_fifo_error_reg;
|
||||
status_fifo_we = 1'b1;
|
||||
end
|
||||
|
||||
status_fifo_rd_op_tag_next = status_fifo_rd_op_tag_reg;
|
||||
status_fifo_rd_mask_next = status_fifo_rd_mask_reg;
|
||||
status_fifo_rd_finish_next = status_fifo_rd_finish_reg;
|
||||
status_fifo_rd_error_next = status_fifo_rd_error_reg;
|
||||
status_fifo_rd_valid_next = status_fifo_rd_valid_reg;
|
||||
status_fifo_rd_en = 1'b0;
|
||||
|
||||
m_axis_read_desc_status_tag_next = op_table_tag[status_fifo_rd_op_tag_reg];
|
||||
if (status_fifo_rd_error_reg != DMA_ERROR_NONE) begin
|
||||
@ -1460,12 +1448,8 @@ always @* begin
|
||||
|
||||
if (!status_fifo_rd_valid_next && status_fifo_rd_ptr_reg != status_fifo_wr_ptr_reg) begin
|
||||
// status FIFO not empty
|
||||
status_fifo_rd_op_tag_next = status_fifo_op_tag[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_mask_next = status_fifo_mask[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_finish_next = status_fifo_finish[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_error_next = status_fifo_error[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_en = 1'b1;
|
||||
status_fifo_rd_valid_next = 1'b1;
|
||||
status_fifo_rd_ptr_next = status_fifo_rd_ptr_reg + 1;
|
||||
end
|
||||
end
|
||||
|
||||
@ -1531,24 +1515,27 @@ always @(posedge clk) begin
|
||||
|
||||
have_credit_reg <= pcie_tx_fc_nph_av > 4;
|
||||
|
||||
if (status_fifo_we) begin
|
||||
if (status_fifo_wr_en) begin
|
||||
status_fifo_op_tag[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_op_tag;
|
||||
status_fifo_mask[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_mask;
|
||||
status_fifo_finish[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_finish;
|
||||
status_fifo_error[status_fifo_wr_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]] <= status_fifo_wr_error;
|
||||
status_fifo_wr_ptr_reg <= status_fifo_wr_ptr_reg + 1;
|
||||
end
|
||||
status_fifo_rd_ptr_reg <= status_fifo_rd_ptr_next;
|
||||
|
||||
if (status_fifo_rd_en) begin
|
||||
status_fifo_rd_op_tag_reg <= status_fifo_op_tag[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_mask_reg <= status_fifo_mask[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_finish_reg <= status_fifo_finish[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_error_reg <= status_fifo_error[status_fifo_rd_ptr_reg[STATUS_FIFO_ADDR_WIDTH-1:0]];
|
||||
status_fifo_rd_ptr_reg <= status_fifo_rd_ptr_reg + 1;
|
||||
end
|
||||
|
||||
status_fifo_mask_reg <= status_fifo_mask_next;
|
||||
status_fifo_finish_reg <= status_fifo_finish_next;
|
||||
status_fifo_error_reg <= status_fifo_error_next;
|
||||
status_fifo_we_reg <= status_fifo_we_next;
|
||||
status_fifo_wr_en_reg <= status_fifo_wr_en_next;
|
||||
|
||||
status_fifo_rd_op_tag_reg <= status_fifo_rd_op_tag_next;
|
||||
status_fifo_rd_mask_reg <= status_fifo_rd_mask_next;
|
||||
status_fifo_rd_finish_reg <= status_fifo_rd_finish_next;
|
||||
status_fifo_rd_error_reg <= status_fifo_rd_error_next;
|
||||
status_fifo_rd_valid_reg <= status_fifo_rd_valid_next;
|
||||
|
||||
status_fifo_half_full_reg <= $unsigned(status_fifo_wr_ptr_reg - status_fifo_rd_ptr_reg) >= 2**(STATUS_FIFO_ADDR_WIDTH-1);
|
||||
@ -1669,7 +1656,7 @@ always @(posedge clk) begin
|
||||
|
||||
status_fifo_wr_ptr_reg <= 0;
|
||||
status_fifo_rd_ptr_reg <= 0;
|
||||
status_fifo_we_reg <= 1'b0;
|
||||
status_fifo_wr_en_reg <= 1'b0;
|
||||
status_fifo_rd_valid_reg <= 1'b0;
|
||||
|
||||
active_tx_count_reg <= {RQ_SEQ_NUM_WIDTH{1'b0}};
|
||||
|
@ -87,7 +87,7 @@ generate
|
||||
|
||||
for (n = 0; n < SEG_COUNT; n = n + 1) begin
|
||||
|
||||
(* ramstyle = "no_rw_check" *)
|
||||
(* ramstyle = "no_rw_check, mlab" *)
|
||||
reg [SEG_DATA_WIDTH-1:0] mem_reg[2**INT_ADDR_WIDTH-1:0];
|
||||
|
||||
reg wr_done_reg = 1'b0;
|
||||
|
@ -88,7 +88,7 @@ generate
|
||||
|
||||
for (n = 0; n < SEG_COUNT; n = n + 1) begin
|
||||
|
||||
(* ramstyle = "no_rw_check" *)
|
||||
(* ramstyle = "no_rw_check, mlab" *)
|
||||
reg [SEG_DATA_WIDTH-1:0] mem_reg[2**INT_ADDR_WIDTH-1:0];
|
||||
|
||||
reg wr_done_reg = 1'b0;
|
||||
|
@ -168,7 +168,9 @@ pcie_tlp_demux #(
|
||||
.TLP_DATA_WIDTH(TLP_DATA_WIDTH),
|
||||
.TLP_STRB_WIDTH(TLP_STRB_WIDTH),
|
||||
.TLP_HDR_WIDTH(TLP_HDR_WIDTH),
|
||||
.TLP_SEG_COUNT(TLP_SEG_COUNT)
|
||||
.IN_TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.OUT_TLP_SEG_COUNT(TLP_SEG_COUNT),
|
||||
.FIFO_ENABLE(0)
|
||||
)
|
||||
pcie_tlp_demux_inst (
|
||||
.clk(clk),
|
||||
@ -214,7 +216,13 @@ pcie_tlp_demux_inst (
|
||||
*/
|
||||
.enable(1'b1),
|
||||
.drop({TLP_SEG_COUNT{1'b0}}),
|
||||
.select(select)
|
||||
.select(select),
|
||||
|
||||
/*
|
||||
* Status
|
||||
*/
|
||||
.fifo_half_full(),
|
||||
.fifo_watermark()
|
||||
);
|
||||
|
||||
pcie_axi_master_rd #(
|
||||
|
@ -42,63 +42,60 @@ module pcie_msix #
|
||||
parameter AXIL_STRB_WIDTH = (AXIL_DATA_WIDTH/8),
|
||||
|
||||
// TLP interface configuration
|
||||
parameter TLP_DATA_WIDTH = 256,
|
||||
parameter TLP_STRB_WIDTH = TLP_DATA_WIDTH/32,
|
||||
parameter TLP_HDR_WIDTH = 128,
|
||||
parameter TLP_SEG_COUNT = 1,
|
||||
parameter TLP_FORCE_64_BIT_ADDR = 0
|
||||
)
|
||||
(
|
||||
input wire clk,
|
||||
input wire rst,
|
||||
input wire clk,
|
||||
input wire rst,
|
||||
|
||||
/*
|
||||
* AXI lite interface for MSI-X tables
|
||||
*/
|
||||
input wire [AXIL_ADDR_WIDTH-1:0] s_axil_awaddr,
|
||||
input wire [2:0] s_axil_awprot,
|
||||
input wire s_axil_awvalid,
|
||||
output wire s_axil_awready,
|
||||
input wire [AXIL_DATA_WIDTH-1:0] s_axil_wdata,
|
||||
input wire [AXIL_STRB_WIDTH-1:0] s_axil_wstrb,
|
||||
input wire s_axil_wvalid,
|
||||
output wire s_axil_wready,
|
||||
output wire [1:0] s_axil_bresp,
|
||||
output wire s_axil_bvalid,
|
||||
input wire s_axil_bready,
|
||||
input wire [AXIL_ADDR_WIDTH-1:0] s_axil_araddr,
|
||||
input wire [2:0] s_axil_arprot,
|
||||
input wire s_axil_arvalid,
|
||||
output wire s_axil_arready,
|
||||
output wire [AXIL_DATA_WIDTH-1:0] s_axil_rdata,
|
||||
output wire [1:0] s_axil_rresp,
|
||||
output wire s_axil_rvalid,
|
||||
input wire s_axil_rready,
|
||||
input wire [AXIL_ADDR_WIDTH-1:0] s_axil_awaddr,
|
||||
input wire [2:0] s_axil_awprot,
|
||||
input wire s_axil_awvalid,
|
||||
output wire s_axil_awready,
|
||||
input wire [AXIL_DATA_WIDTH-1:0] s_axil_wdata,
|
||||
input wire [AXIL_STRB_WIDTH-1:0] s_axil_wstrb,
|
||||
input wire s_axil_wvalid,
|
||||
output wire s_axil_wready,
|
||||
output wire [1:0] s_axil_bresp,
|
||||
output wire s_axil_bvalid,
|
||||
input wire s_axil_bready,
|
||||
input wire [AXIL_ADDR_WIDTH-1:0] s_axil_araddr,
|
||||
input wire [2:0] s_axil_arprot,
|
||||
input wire s_axil_arvalid,
|
||||
output wire s_axil_arready,
|
||||
output wire [AXIL_DATA_WIDTH-1:0] s_axil_rdata,
|
||||
output wire [1:0] s_axil_rresp,
|
||||
output wire s_axil_rvalid,
|
||||
input wire s_axil_rready,
|
||||
|
||||
/*
|
||||
* Interrupt request input
|
||||
*/
|
||||
input wire [IRQ_INDEX_WIDTH-1:0] irq_index,
|
||||
input wire irq_valid,
|
||||
output wire irq_ready,
|
||||
input wire [IRQ_INDEX_WIDTH-1:0] irq_index,
|
||||
input wire irq_valid,
|
||||
output wire irq_ready,
|
||||
|
||||
/*
|
||||
* Memory write TLP output
|
||||
*/
|
||||
output wire [TLP_DATA_WIDTH-1:0] tx_wr_req_tlp_data,
|
||||
output wire [TLP_STRB_WIDTH-1:0] tx_wr_req_tlp_strb,
|
||||
output wire [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] tx_wr_req_tlp_hdr,
|
||||
output wire [TLP_SEG_COUNT-1:0] tx_wr_req_tlp_valid,
|
||||
output wire [TLP_SEG_COUNT-1:0] tx_wr_req_tlp_sop,
|
||||
output wire [TLP_SEG_COUNT-1:0] tx_wr_req_tlp_eop,
|
||||
input wire tx_wr_req_tlp_ready,
|
||||
output wire [31:0] tx_wr_req_tlp_data,
|
||||
output wire tx_wr_req_tlp_strb,
|
||||
output wire [TLP_HDR_WIDTH-1:0] tx_wr_req_tlp_hdr,
|
||||
output wire tx_wr_req_tlp_valid,
|
||||
output wire tx_wr_req_tlp_sop,
|
||||
output wire tx_wr_req_tlp_eop,
|
||||
input wire tx_wr_req_tlp_ready,
|
||||
|
||||
/*
|
||||
* Configuration
|
||||
*/
|
||||
input wire [15:0] requester_id,
|
||||
input wire msix_enable,
|
||||
input wire msix_mask
|
||||
input wire [15:0] requester_id,
|
||||
input wire msix_enable,
|
||||
input wire msix_mask
|
||||
);
|
||||
|
||||
parameter TBL_ADDR_WIDTH = IRQ_INDEX_WIDTH+1;
|
||||
@ -184,9 +181,9 @@ reg s_axil_rvalid_reg = 1'b0, s_axil_rvalid_next;
|
||||
|
||||
reg irq_ready_reg = 1'b0, irq_ready_next;
|
||||
|
||||
reg [TLP_DATA_WIDTH-1:0] tx_wr_req_tlp_data_reg = 0, tx_wr_req_tlp_data_next;
|
||||
reg [TLP_SEG_COUNT*TLP_HDR_WIDTH-1:0] tx_wr_req_tlp_hdr_reg = 0, tx_wr_req_tlp_hdr_next;
|
||||
reg [TLP_SEG_COUNT-1:0] tx_wr_req_tlp_valid_reg = 0, tx_wr_req_tlp_valid_next;
|
||||
reg [31:0] tx_wr_req_tlp_data_reg = 0, tx_wr_req_tlp_data_next;
|
||||
reg [TLP_HDR_WIDTH-1:0] tx_wr_req_tlp_hdr_reg = 0, tx_wr_req_tlp_hdr_next;
|
||||
reg tx_wr_req_tlp_valid_reg = 0, tx_wr_req_tlp_valid_next;
|
||||
|
||||
// MSI-X table
|
||||
(* ramstyle = "no_rw_check, mlab" *)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user