Skip to content

Commit 74b3e99

Browse files
committed
fpga/app/custom_port_demo: Add testbench for pass-through demo application
Signed-off-by: Alex Forencich <alex@alexforencich.com>
1 parent 39479be commit 74b3e99

File tree

3 files changed

+1323
-0
lines changed

3 files changed

+1323
-0
lines changed
Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
# SPDX-License-Identifier: BSD-2-Clause-Views
2+
# Copyright (c) 2021-2023 The Regents of the University of California
3+
4+
TOPLEVEL_LANG = verilog
5+
6+
SIM ?= icarus
7+
WAVES ?= 0
8+
9+
COCOTB_HDL_TIMEUNIT = 1ns
10+
COCOTB_HDL_TIMEPRECISION = 1ps
11+
12+
DUT = mqnic_core_pcie_us
13+
TOPLEVEL = $(DUT)
14+
MODULE = test_$(DUT)
15+
VERILOG_INCLUDE_DIRS += ../../rtl/
16+
VERILOG_SOURCES += ../../rtl/common/$(DUT).v
17+
VERILOG_SOURCES += ../../rtl/common/mqnic_core_pcie.v
18+
VERILOG_SOURCES += ../../rtl/common/mqnic_core.v
19+
VERILOG_SOURCES += ../../rtl/common/mqnic_dram_if.v
20+
VERILOG_SOURCES += ../../rtl/common/mqnic_interface.v
21+
VERILOG_SOURCES += ../../rtl/common/mqnic_interface_tx.v
22+
VERILOG_SOURCES += ../../rtl/common/mqnic_interface_rx.v
23+
VERILOG_SOURCES += ../../rtl/common/mqnic_port.v
24+
VERILOG_SOURCES += ../../rtl/common/mqnic_port_tx.v
25+
VERILOG_SOURCES += ../../rtl/common/mqnic_port_rx.v
26+
VERILOG_SOURCES += ../../rtl/common/mqnic_egress.v
27+
VERILOG_SOURCES += ../../rtl/common/mqnic_ingress.v
28+
VERILOG_SOURCES += ../../rtl/common/mqnic_l2_egress.v
29+
VERILOG_SOURCES += ../../rtl/common/mqnic_l2_ingress.v
30+
VERILOG_SOURCES += ../../rtl/common/mqnic_rx_queue_map.v
31+
VERILOG_SOURCES += ../../rtl/common/mqnic_ptp.v
32+
VERILOG_SOURCES += ../../rtl/common/mqnic_ptp_clock.v
33+
VERILOG_SOURCES += ../../rtl/common/mqnic_ptp_perout.v
34+
VERILOG_SOURCES += ../../rtl/common/mqnic_rb_clk_info.v
35+
VERILOG_SOURCES += ../../rtl/common/cpl_write.v
36+
VERILOG_SOURCES += ../../rtl/common/cpl_op_mux.v
37+
VERILOG_SOURCES += ../../rtl/common/desc_fetch.v
38+
VERILOG_SOURCES += ../../rtl/common/desc_op_mux.v
39+
VERILOG_SOURCES += ../../rtl/common/queue_manager.v
40+
VERILOG_SOURCES += ../../rtl/common/cpl_queue_manager.v
41+
VERILOG_SOURCES += ../../rtl/common/tx_fifo.v
42+
VERILOG_SOURCES += ../../rtl/common/rx_fifo.v
43+
VERILOG_SOURCES += ../../rtl/common/tx_req_mux.v
44+
VERILOG_SOURCES += ../../rtl/common/tx_engine.v
45+
VERILOG_SOURCES += ../../rtl/common/rx_engine.v
46+
VERILOG_SOURCES += ../../rtl/common/tx_checksum.v
47+
VERILOG_SOURCES += ../../rtl/common/rx_hash.v
48+
VERILOG_SOURCES += ../../rtl/common/rx_checksum.v
49+
VERILOG_SOURCES += ../../rtl/common/stats_counter.v
50+
VERILOG_SOURCES += ../../rtl/common/stats_collect.v
51+
VERILOG_SOURCES += ../../rtl/common/stats_pcie_if.v
52+
VERILOG_SOURCES += ../../rtl/common/stats_pcie_tlp.v
53+
VERILOG_SOURCES += ../../rtl/common/stats_dma_if_pcie.v
54+
VERILOG_SOURCES += ../../rtl/common/stats_dma_latency.v
55+
VERILOG_SOURCES += ../../rtl/common/mqnic_tx_scheduler_block_rr.v
56+
VERILOG_SOURCES += ../../rtl/common/tx_scheduler_rr.v
57+
VERILOG_SOURCES += ../../rtl/mqnic_app_block_custom_port_demo.v
58+
VERILOG_SOURCES += ../../lib/eth/rtl/mac_ctrl_rx.v
59+
VERILOG_SOURCES += ../../lib/eth/rtl/mac_ctrl_tx.v
60+
VERILOG_SOURCES += ../../lib/eth/rtl/mac_pause_ctrl_rx.v
61+
VERILOG_SOURCES += ../../lib/eth/rtl/mac_pause_ctrl_tx.v
62+
VERILOG_SOURCES += ../../lib/eth/rtl/ptp_td_phc.v
63+
VERILOG_SOURCES += ../../lib/eth/rtl/ptp_td_leaf.v
64+
VERILOG_SOURCES += ../../lib/eth/rtl/ptp_perout.v
65+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_crossbar.v
66+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_crossbar_addr.v
67+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_crossbar_rd.v
68+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_crossbar_wr.v
69+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_ram.v
70+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_reg_if.v
71+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_reg_if_rd.v
72+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_reg_if_wr.v
73+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_register_rd.v
74+
VERILOG_SOURCES += ../../lib/axi/rtl/axil_register_wr.v
75+
VERILOG_SOURCES += ../../lib/axi/rtl/arbiter.v
76+
VERILOG_SOURCES += ../../lib/axi/rtl/priority_encoder.v
77+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_adapter.v
78+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_arb_mux.v
79+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_async_fifo.v
80+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_async_fifo_adapter.v
81+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_demux.v
82+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_fifo.v
83+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_fifo_adapter.v
84+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_pipeline_fifo.v
85+
VERILOG_SOURCES += ../../lib/axis/rtl/axis_register.v
86+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_axil_master.v
87+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux.v
88+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_demux_bar.v
89+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_mux.v
90+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo.v
91+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_tlp_fifo_raw.v
92+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_msix.v
93+
VERILOG_SOURCES += ../../lib/pcie/rtl/irq_rate_limit.v
94+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie.v
95+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_rd.v
96+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_pcie_wr.v
97+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_mux.v
98+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_mux_rd.v
99+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_mux_wr.v
100+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_if_desc_mux.v
101+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_ram_demux_rd.v
102+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_ram_demux_wr.v
103+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_psdpram.v
104+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_client_axis_sink.v
105+
VERILOG_SOURCES += ../../lib/pcie/rtl/dma_client_axis_source.v
106+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_us_if.v
107+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_us_if_rc.v
108+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_us_if_rq.v
109+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_us_if_cc.v
110+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_us_if_cq.v
111+
VERILOG_SOURCES += ../../lib/pcie/rtl/pcie_us_cfg.v
112+
VERILOG_SOURCES += ../../lib/pcie/rtl/pulse_merge.v
113+
114+
# module parameters
115+
116+
# Structural configuration
117+
export PARAM_IF_COUNT := 1
118+
export PARAM_PORTS_PER_IF := 1
119+
export PARAM_SCHED_PER_IF := $(PARAM_PORTS_PER_IF)
120+
121+
# Clock configuration
122+
export PARAM_CLK_PERIOD_NS_NUM := 4
123+
export PARAM_CLK_PERIOD_NS_DENOM := 1
124+
125+
# PTP configuration
126+
export PARAM_PTP_CLK_PERIOD_NS_NUM := 32
127+
export PARAM_PTP_CLK_PERIOD_NS_DENOM := 5
128+
export PARAM_PTP_CLOCK_PIPELINE := 0
129+
export PARAM_PTP_CLOCK_CDC_PIPELINE := 0
130+
export PARAM_PTP_SEPARATE_TX_CLOCK := 0
131+
export PARAM_PTP_SEPARATE_RX_CLOCK := 0
132+
export PARAM_PTP_PORT_CDC_PIPELINE := 0
133+
export PARAM_PTP_PEROUT_ENABLE := 0
134+
export PARAM_PTP_PEROUT_COUNT := 1
135+
136+
# Queue manager configuration
137+
export PARAM_EVENT_QUEUE_OP_TABLE_SIZE := 32
138+
export PARAM_TX_QUEUE_OP_TABLE_SIZE := 32
139+
export PARAM_RX_QUEUE_OP_TABLE_SIZE := 32
140+
export PARAM_CQ_OP_TABLE_SIZE := 32
141+
export PARAM_EQN_WIDTH := 6
142+
export PARAM_TX_QUEUE_INDEX_WIDTH := 13
143+
export PARAM_RX_QUEUE_INDEX_WIDTH := 8
144+
export PARAM_CQN_WIDTH := $(shell python -c "print(max($(PARAM_TX_QUEUE_INDEX_WIDTH), $(PARAM_RX_QUEUE_INDEX_WIDTH)) + 1)")
145+
export PARAM_EQ_PIPELINE := 3
146+
export PARAM_TX_QUEUE_PIPELINE := $(shell python -c "print(3 + max($(PARAM_TX_QUEUE_INDEX_WIDTH)-12, 0))")
147+
export PARAM_RX_QUEUE_PIPELINE := $(shell python -c "print(3 + max($(PARAM_RX_QUEUE_INDEX_WIDTH)-12, 0))")
148+
export PARAM_CQ_PIPELINE := $(shell python -c "print(3 + max($(PARAM_CQN_WIDTH)-12, 0))")
149+
150+
# TX and RX engine configuration
151+
export PARAM_TX_DESC_TABLE_SIZE := 32
152+
export PARAM_RX_DESC_TABLE_SIZE := 32
153+
export PARAM_RX_INDIR_TBL_ADDR_WIDTH := $(shell python -c "print(min($(PARAM_RX_QUEUE_INDEX_WIDTH), 8))")
154+
155+
# Scheduler configuration
156+
export PARAM_TX_SCHEDULER_OP_TABLE_SIZE := $(PARAM_TX_DESC_TABLE_SIZE)
157+
export PARAM_TX_SCHEDULER_PIPELINE := $(PARAM_TX_QUEUE_PIPELINE)
158+
export PARAM_TDMA_INDEX_WIDTH := 6
159+
160+
# Interface configuration
161+
export PARAM_PTP_TS_ENABLE := 1
162+
export PARAM_TX_CPL_ENABLE := $(PARAM_PTP_TS_ENABLE)
163+
export PARAM_TX_CPL_FIFO_DEPTH := 32
164+
export PARAM_TX_TAG_WIDTH := 16
165+
export PARAM_TX_CHECKSUM_ENABLE := 1
166+
export PARAM_RX_HASH_ENABLE := 1
167+
export PARAM_RX_CHECKSUM_ENABLE := 1
168+
export PARAM_LFC_ENABLE := 1
169+
export PARAM_PFC_ENABLE := $(PARAM_LFC_ENABLE)
170+
export PARAM_MAC_CTRL_ENABLE := 1
171+
export PARAM_TX_FIFO_DEPTH := 32768
172+
export PARAM_RX_FIFO_DEPTH := 131072
173+
export PARAM_MAX_TX_SIZE := 9214
174+
export PARAM_MAX_RX_SIZE := 9214
175+
export PARAM_TX_RAM_SIZE := 131072
176+
export PARAM_RX_RAM_SIZE := 131072
177+
178+
# RAM configuration
179+
export PARAM_DDR_CH := 1
180+
export PARAM_DDR_ENABLE := 0
181+
export PARAM_DDR_GROUP_SIZE := 1
182+
export PARAM_AXI_DDR_DATA_WIDTH := 256
183+
export PARAM_AXI_DDR_ADDR_WIDTH := 32
184+
export PARAM_AXI_DDR_ID_WIDTH := 8
185+
export PARAM_AXI_DDR_MAX_BURST_LEN := 256
186+
export PARAM_HBM_CH := 1
187+
export PARAM_HBM_ENABLE := 0
188+
export PARAM_HBM_GROUP_SIZE := $(PARAM_HBM_CH)
189+
export PARAM_AXI_HBM_DATA_WIDTH := 256
190+
export PARAM_AXI_HBM_ADDR_WIDTH := 32
191+
export PARAM_AXI_HBM_ID_WIDTH := 6
192+
export PARAM_AXI_HBM_MAX_BURST_LEN := 16
193+
194+
# Application block configuration
195+
export PARAM_APP_ID := $(shell echo $$((0x12349001)) )
196+
export PARAM_APP_ENABLE := 1
197+
export PARAM_APP_CTRL_ENABLE := 1
198+
export PARAM_APP_DMA_ENABLE := 1
199+
export PARAM_APP_AXIS_DIRECT_ENABLE := 1
200+
export PARAM_APP_AXIS_SYNC_ENABLE := 1
201+
export PARAM_APP_AXIS_IF_ENABLE := 1
202+
export PARAM_APP_STAT_ENABLE := 1
203+
204+
DEFINES += APP_CUSTOM_PARAMS_ENABLE
205+
DEFINES += APP_CUSTOM_PORTS_ENABLE
206+
207+
export PARAM_AXIL_APP_CUSTOM_DATA_WIDTH := 32
208+
209+
# DMA interface configuration
210+
export PARAM_DMA_IMM_ENABLE := 0
211+
export PARAM_DMA_IMM_WIDTH := 32
212+
export PARAM_DMA_LEN_WIDTH := 16
213+
export PARAM_DMA_TAG_WIDTH := 16
214+
export PARAM_RAM_ADDR_WIDTH := $(shell python -c "print((max($(PARAM_TX_RAM_SIZE), $(PARAM_RX_RAM_SIZE))-1).bit_length())")
215+
export PARAM_RAM_PIPELINE := 2
216+
217+
# PCIe interface configuration
218+
export PARAM_AXIS_PCIE_DATA_WIDTH := 512
219+
export PARAM_PF_COUNT := 1
220+
export PARAM_VF_COUNT := 0
221+
222+
# Interrupt configuration
223+
export PARAM_IRQ_INDEX_WIDTH := $(PARAM_EQN_WIDTH)
224+
225+
# AXI lite interface configuration (control)
226+
export PARAM_AXIL_CTRL_DATA_WIDTH := 32
227+
export PARAM_AXIL_CTRL_ADDR_WIDTH := 24
228+
export PARAM_AXIL_CSR_PASSTHROUGH_ENABLE := 0
229+
230+
# AXI lite interface configuration (application control)
231+
export PARAM_AXIL_APP_CTRL_DATA_WIDTH := $(PARAM_AXIL_CTRL_DATA_WIDTH)
232+
export PARAM_AXIL_APP_CTRL_ADDR_WIDTH := 24
233+
234+
# Ethernet interface configuration
235+
export PARAM_AXIS_ETH_DATA_WIDTH := 512
236+
export PARAM_AXIS_ETH_SYNC_DATA_WIDTH := $(PARAM_AXIS_ETH_DATA_WIDTH)
237+
export PARAM_AXIS_ETH_RX_USE_READY := 0
238+
export PARAM_AXIS_ETH_TX_PIPELINE := 0
239+
export PARAM_AXIS_ETH_TX_FIFO_PIPELINE := 2
240+
export PARAM_AXIS_ETH_TX_TS_PIPELINE := 0
241+
export PARAM_AXIS_ETH_RX_PIPELINE := 0
242+
export PARAM_AXIS_ETH_RX_FIFO_PIPELINE := 2
243+
244+
# Statistics counter subsystem
245+
export PARAM_STAT_ENABLE := 1
246+
export PARAM_STAT_DMA_ENABLE := 1
247+
export PARAM_STAT_PCIE_ENABLE := 1
248+
export PARAM_STAT_INC_WIDTH := 24
249+
export PARAM_STAT_ID_WIDTH := 12
250+
251+
ifeq ($(SIM), icarus)
252+
PLUSARGS += -fst
253+
254+
COMPILE_ARGS += $(addprefix -D, $(DEFINES))
255+
256+
COMPILE_ARGS += $(foreach v,$(filter PARAM_%,$(.VARIABLES)),-P $(TOPLEVEL).$(subst PARAM_,,$(v))=$($(v)))
257+
258+
ifeq ($(WAVES), 1)
259+
VERILOG_SOURCES += iverilog_dump.v
260+
COMPILE_ARGS += -s iverilog_dump
261+
endif
262+
else ifeq ($(SIM), verilator)
263+
COMPILE_ARGS += -Wno-SELRANGE -Wno-WIDTH
264+
265+
COMPILE_ARGS += $(addprefix -D,$(DEFINES))
266+
267+
COMPILE_ARGS += $(foreach v,$(filter PARAM_%,$(.VARIABLES)),-G$(subst PARAM_,,$(v))=$($(v)))
268+
269+
ifeq ($(WAVES), 1)
270+
COMPILE_ARGS += --trace-fst
271+
endif
272+
endif
273+
274+
include $(shell cocotb-config --makefiles)/Makefile.sim
275+
276+
iverilog_dump.v:
277+
echo 'module iverilog_dump();' > $@
278+
echo 'initial begin' >> $@
279+
echo ' $$dumpfile("$(TOPLEVEL).fst");' >> $@
280+
echo ' $$dumpvars(0, $(TOPLEVEL));' >> $@
281+
echo 'end' >> $@
282+
echo 'endmodule' >> $@
283+
284+
clean::
285+
@rm -rf iverilog_dump.v
286+
@rm -rf dump.fst $(TOPLEVEL).fst
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../common/tb/mqnic.py

0 commit comments

Comments
 (0)