mirror of
https://github.com/corundum/corundum.git
synced 2025-01-16 08:12:53 +08:00
Use 64 bit BARs in example designs
This commit is contained in:
parent
a79027fdd1
commit
ccc44d7dbb
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -145,19 +145,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -185,12 +185,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -209,7 +209,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -229,14 +229,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -697,22 +697,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
async def init(self):
|
||||
|
||||
@ -255,17 +255,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -144,19 +144,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -184,12 +184,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -208,7 +208,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -228,14 +228,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -694,22 +694,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
dut.sw.setimmediatevalue(0)
|
||||
|
||||
@ -257,17 +257,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -144,19 +144,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -184,12 +184,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -208,7 +208,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -228,14 +228,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -694,22 +694,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
dut.sw.setimmediatevalue(0)
|
||||
|
||||
@ -257,17 +257,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4c_uscale_plus_0]
|
||||
|
@ -138,19 +138,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -178,12 +178,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -202,7 +202,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -222,14 +222,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -686,22 +686,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
async def init(self):
|
||||
|
||||
@ -255,17 +255,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4c_uscale_plus_0]
|
||||
|
@ -145,19 +145,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -185,12 +185,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -209,7 +209,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -229,14 +229,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -697,22 +697,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
async def init(self):
|
||||
|
||||
@ -255,17 +255,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -18,12 +18,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_class_code_base {02} \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.PF0_INTERRUPT_PIN {NONE} \
|
||||
CONFIG.PF0_MSIX_CAP_TABLE_BIR {BAR_0} \
|
||||
CONFIG.PF0_MSIX_CAP_PBA_BIR {BAR_0} \
|
||||
|
@ -145,19 +145,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -185,12 +185,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -209,7 +209,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -229,14 +229,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -699,22 +699,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -229,7 +229,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
async def init(self):
|
||||
|
||||
@ -249,17 +249,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -19,12 +19,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
CONFIG.mode_selection {Advanced} \
|
||||
|
@ -145,19 +145,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -185,12 +185,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -209,7 +209,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -229,14 +229,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -697,22 +697,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
async def init(self):
|
||||
|
||||
@ -255,17 +255,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -18,12 +18,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_class_code_base {02} \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.PF0_INTERRUPT_PIN {NONE} \
|
||||
CONFIG.PF0_MSIX_CAP_TABLE_BIR {BAR_0} \
|
||||
CONFIG.PF0_MSIX_CAP_PBA_BIR {BAR_0} \
|
||||
|
@ -145,19 +145,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [32:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [84:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [84:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [32:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [32:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -184,12 +184,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -208,7 +208,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -228,14 +228,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -691,22 +691,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -229,7 +229,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
dut.btnu.setimmediatevalue(0)
|
||||
dut.btnl.setimmediatevalue(0)
|
||||
@ -256,17 +256,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -149,19 +149,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -189,12 +189,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -213,7 +213,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -233,14 +233,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -699,22 +699,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
dut.btnu.setimmediatevalue(0)
|
||||
dut.btnl.setimmediatevalue(0)
|
||||
@ -262,17 +262,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -144,19 +144,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -184,12 +184,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -208,7 +208,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -228,14 +228,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -694,22 +694,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
dut.sw.setimmediatevalue(0)
|
||||
|
||||
@ -257,17 +257,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -149,19 +149,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -189,12 +189,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -213,7 +213,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -233,14 +233,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -699,22 +699,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
dut.btnu.setimmediatevalue(0)
|
||||
dut.btnl.setimmediatevalue(0)
|
||||
@ -262,17 +262,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
@ -157,11 +157,11 @@ static int edev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
dev_info(dev, "CC: %d", ioread32(edev->bar[0]+0x00040C));
|
||||
|
||||
// Read/write test
|
||||
dev_info(dev, "write to BAR1");
|
||||
iowrite32(0x11223344, edev->bar[1]);
|
||||
dev_info(dev, "write to BAR2");
|
||||
iowrite32(0x11223344, edev->bar[2]);
|
||||
|
||||
dev_info(dev, "read from BAR1");
|
||||
dev_info(dev, "%08x", ioread32(edev->bar[1]));
|
||||
dev_info(dev, "read from BAR2");
|
||||
dev_info(dev, "%08x", ioread32(edev->bar[2]));
|
||||
|
||||
// Dump counters
|
||||
dev_info(dev, "TLP counters");
|
||||
|
@ -17,12 +17,16 @@ set_property -dict [list \
|
||||
CONFIG.pf0_class_code_sub {00} \
|
||||
CONFIG.pf0_base_class_menu {Network_controller} \
|
||||
CONFIG.pf0_sub_class_interface_menu {Ethernet_controller} \
|
||||
CONFIG.pf0_bar0_64bit {true} \
|
||||
CONFIG.pf0_bar0_prefetchable {true} \
|
||||
CONFIG.pf0_bar0_scale {Megabytes} \
|
||||
CONFIG.pf0_bar0_size {16} \
|
||||
CONFIG.pf0_bar1_enabled {true} \
|
||||
CONFIG.pf0_bar1_type {Memory} \
|
||||
CONFIG.pf0_bar1_scale {Megabytes} \
|
||||
CONFIG.pf0_bar1_size {16} \
|
||||
CONFIG.pf0_bar2_64bit {true} \
|
||||
CONFIG.pf0_bar2_prefetchable {true} \
|
||||
CONFIG.pf0_bar2_enabled {true} \
|
||||
CONFIG.pf0_bar2_type {Memory} \
|
||||
CONFIG.pf0_bar2_scale {Megabytes} \
|
||||
CONFIG.pf0_bar2_size {16} \
|
||||
CONFIG.vendor_id {1234} \
|
||||
CONFIG.en_msi_per_vec_masking {true} \
|
||||
] [get_ips pcie4_uscale_plus_0]
|
||||
|
@ -146,19 +146,19 @@ wire axis_cc_tready_bar_0;
|
||||
wire axis_cc_tlast_bar_0;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_0;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_1;
|
||||
wire axis_cq_tvalid_bar_1;
|
||||
wire axis_cq_tready_bar_1;
|
||||
wire axis_cq_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cq_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cq_tkeep_bar_2;
|
||||
wire axis_cq_tvalid_bar_2;
|
||||
wire axis_cq_tready_bar_2;
|
||||
wire axis_cq_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CQ_USER_WIDTH-1:0] axis_cq_tuser_bar_2;
|
||||
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_1;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_1;
|
||||
wire axis_cc_tvalid_bar_1;
|
||||
wire axis_cc_tready_bar_1;
|
||||
wire axis_cc_tlast_bar_1;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_1;
|
||||
wire [AXIS_PCIE_DATA_WIDTH-1:0] axis_cc_tdata_bar_2;
|
||||
wire [AXIS_PCIE_KEEP_WIDTH-1:0] axis_cc_tkeep_bar_2;
|
||||
wire axis_cc_tvalid_bar_2;
|
||||
wire axis_cc_tready_bar_2;
|
||||
wire axis_cc_tlast_bar_2;
|
||||
wire [AXIS_PCIE_CC_USER_WIDTH-1:0] axis_cc_tuser_bar_2;
|
||||
|
||||
wire [2:0] bar_id;
|
||||
wire [1:0] select;
|
||||
@ -186,12 +186,12 @@ cq_demux_inst (
|
||||
/*
|
||||
* AXI output (CQ)
|
||||
*/
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_1, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_1, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_1, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_1, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_1, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_1, axis_cq_tuser_bar_0}),
|
||||
.m_axis_cq_tdata({axis_cq_tdata_bar_2, axis_cq_tdata_bar_0}),
|
||||
.m_axis_cq_tkeep({axis_cq_tkeep_bar_2, axis_cq_tkeep_bar_0}),
|
||||
.m_axis_cq_tvalid({axis_cq_tvalid_bar_2, axis_cq_tvalid_bar_0}),
|
||||
.m_axis_cq_tready({axis_cq_tready_bar_2, axis_cq_tready_bar_0}),
|
||||
.m_axis_cq_tlast({axis_cq_tlast_bar_2, axis_cq_tlast_bar_0}),
|
||||
.m_axis_cq_tuser({axis_cq_tuser_bar_2, axis_cq_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* Fields
|
||||
@ -210,7 +210,7 @@ cq_demux_inst (
|
||||
.select(select)
|
||||
);
|
||||
|
||||
assign select[1] = bar_id == 3'd1;
|
||||
assign select[1] = bar_id == 3'd2;
|
||||
assign select[0] = bar_id == 3'd0;
|
||||
|
||||
axis_arb_mux #(
|
||||
@ -230,14 +230,14 @@ cc_mux_inst (
|
||||
/*
|
||||
* AXI inputs
|
||||
*/
|
||||
.s_axis_tdata({axis_cc_tdata_bar_1, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_1, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_1, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_1, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_1, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tdata({axis_cc_tdata_bar_2, axis_cc_tdata_bar_0}),
|
||||
.s_axis_tkeep({axis_cc_tkeep_bar_2, axis_cc_tkeep_bar_0}),
|
||||
.s_axis_tvalid({axis_cc_tvalid_bar_2, axis_cc_tvalid_bar_0}),
|
||||
.s_axis_tready({axis_cc_tready_bar_2, axis_cc_tready_bar_0}),
|
||||
.s_axis_tlast({axis_cc_tlast_bar_2, axis_cc_tlast_bar_0}),
|
||||
.s_axis_tid(0),
|
||||
.s_axis_tdest(0),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_1, axis_cc_tuser_bar_0}),
|
||||
.s_axis_tuser({axis_cc_tuser_bar_2, axis_cc_tuser_bar_0}),
|
||||
|
||||
/*
|
||||
* AXI output
|
||||
@ -699,22 +699,22 @@ pcie_us_axi_master_inst (
|
||||
/*
|
||||
* AXI input (CQ)
|
||||
*/
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_1),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_1),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_1),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_1),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_1),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_1),
|
||||
.s_axis_cq_tdata(axis_cq_tdata_bar_2),
|
||||
.s_axis_cq_tkeep(axis_cq_tkeep_bar_2),
|
||||
.s_axis_cq_tvalid(axis_cq_tvalid_bar_2),
|
||||
.s_axis_cq_tready(axis_cq_tready_bar_2),
|
||||
.s_axis_cq_tlast(axis_cq_tlast_bar_2),
|
||||
.s_axis_cq_tuser(axis_cq_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI output (CC)
|
||||
*/
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_1),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_1),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_1),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_1),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_1),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_1),
|
||||
.m_axis_cc_tdata(axis_cc_tdata_bar_2),
|
||||
.m_axis_cc_tkeep(axis_cc_tkeep_bar_2),
|
||||
.m_axis_cc_tvalid(axis_cc_tvalid_bar_2),
|
||||
.m_axis_cc_tready(axis_cc_tready_bar_2),
|
||||
.m_axis_cc_tlast(axis_cc_tlast_bar_2),
|
||||
.m_axis_cc_tuser(axis_cc_tuser_bar_2),
|
||||
|
||||
/*
|
||||
* AXI Master output
|
||||
|
@ -235,7 +235,7 @@ class TB(object):
|
||||
self.dev.functions[0].msi_multiple_message_capable = 5
|
||||
|
||||
self.dev.functions[0].configure_bar(0, 2**22)
|
||||
self.dev.functions[0].configure_bar(1, 2**22)
|
||||
self.dev.functions[0].configure_bar(2, 2**22)
|
||||
|
||||
async def init(self):
|
||||
|
||||
@ -255,17 +255,17 @@ async def run_test(dut):
|
||||
mem_base, mem_data = tb.rc.alloc_region(16*1024*1024)
|
||||
|
||||
dev_pf0_bar0 = tb.rc.tree[0][0].bar_addr[0]
|
||||
dev_pf0_bar1 = tb.rc.tree[0][0].bar_addr[1]
|
||||
dev_pf0_bar2 = tb.rc.tree[0][0].bar_addr[2]
|
||||
|
||||
tb.log.info("Test memory write to BAR 1")
|
||||
tb.log.info("Test memory write to BAR 2")
|
||||
|
||||
await tb.rc.mem_write(dev_pf0_bar1, b'\x11\x22\x33\x44')
|
||||
await tb.rc.mem_write(dev_pf0_bar2, b'\x11\x22\x33\x44')
|
||||
|
||||
await Timer(100, 'ns')
|
||||
|
||||
tb.log.info("Test memory read from BAR 1")
|
||||
tb.log.info("Test memory read from BAR 2")
|
||||
|
||||
val = await tb.rc.mem_read(dev_pf0_bar1, 4, 1000)
|
||||
val = await tb.rc.mem_read(dev_pf0_bar2, 4, 1000)
|
||||
tb.log.info("Read data: %s", val)
|
||||
assert val == b'\x11\x22\x33\x44'
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user