Add upstream ip check
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,2 +1,9 @@
|
||||
# Draw.io
|
||||
*.bkp
|
||||
|
||||
# Python
|
||||
*.pyc
|
||||
__pycache__/
|
||||
|
||||
# Simulations
|
||||
sim_build/
|
||||
11
init_env.sh
Normal file
11
init_env.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
PYTHON=python3
|
||||
|
||||
module load verilator
|
||||
# module load vivado/2024.2
|
||||
|
||||
$PYTHON -m venv .venv/${HOSTNAME}
|
||||
source .venv/${HOSTNAME}/bin/activate
|
||||
|
||||
pip install -r requirements.txt
|
||||
|
||||
export TOP_DIR=$(git rev-parse --show-toplevel)
|
||||
11
requirements.txt
Normal file
11
requirements.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
scapy
|
||||
cocotb
|
||||
cocotbext-axi
|
||||
cocotbext-eth
|
||||
cocotbext-pcie
|
||||
rtl-manifest
|
||||
build_fpga
|
||||
fpga-sim
|
||||
peakrdl
|
||||
peakrdl-python-regmap
|
||||
git+https://git.byronlathi.com/bslathi19/PeakRDL-BusDecoder.git@taxi_apb
|
||||
@@ -0,0 +1,2 @@
|
||||
yaml:
|
||||
- ../src/sub/upstream_path/sim/upstream_path.yaml
|
||||
3
sim/verilator.vlt
Normal file
3
sim/verilator.vlt
Normal file
@@ -0,0 +1,3 @@
|
||||
`verilator_config
|
||||
|
||||
lint_off -rule TIMESCALEMOD
|
||||
Submodule src/common/taxi updated: 8328f50673...62da198a76
342
src/common/taxi_sources.list
Normal file
342
src/common/taxi_sources.list
Normal file
@@ -0,0 +1,342 @@
|
||||
taxi/src/cndm_proto/tb/cndm_proto_pcie_us/test_cndm_proto_pcie_us.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_desc_rd.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_tx.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_core.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_rx.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_pcie_us.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_port.sv
|
||||
taxi/src/cndm_proto/rtl/cndm_proto_cpl_wr.sv
|
||||
taxi/src/axi/tb/taxi_axi_adapter/test_taxi_axi_adapter.sv
|
||||
taxi/src/axi/tb/taxi_axi_axil_adapter/test_taxi_axi_axil_adapter.sv
|
||||
taxi/src/axi/tb/taxi_axil_dp_ram/test_taxi_axil_dp_ram.sv
|
||||
taxi/src/axi/tb/taxi_axil_crossbar/test_taxi_axil_crossbar.sv
|
||||
taxi/src/axi/tb/taxi_axi_interconnect/test_taxi_axi_interconnect.sv
|
||||
taxi/src/axi/tb/taxi_axil_interconnect/test_taxi_axil_interconnect.sv
|
||||
taxi/src/axi/tb/taxi_axi_ram/test_taxi_axi_ram.sv
|
||||
taxi/src/axi/tb/taxi_axil_adapter/test_taxi_axil_adapter.sv
|
||||
taxi/src/axi/tb/taxi_axi_fifo/test_taxi_axi_fifo.sv
|
||||
taxi/src/axi/tb/taxi_axil_interconnect_1s/test_taxi_axil_interconnect_1s.sv
|
||||
taxi/src/axi/tb/taxi_axil_ram/test_taxi_axil_ram.sv
|
||||
taxi/src/axi/tb/taxi_axi_crossbar_1s/test_taxi_axi_crossbar_1s.sv
|
||||
taxi/src/axi/tb/taxi_axi_interconnect_1s/test_taxi_axi_interconnect_1s.sv
|
||||
taxi/src/axi/tb/taxi_axi_crossbar/test_taxi_axi_crossbar.sv
|
||||
taxi/src/axi/tb/taxi_axi_register/test_taxi_axi_register.sv
|
||||
taxi/src/axi/tb/taxi_axil_register/test_taxi_axil_register.sv
|
||||
taxi/src/axi/tb/taxi_axil_apb_adapter/test_taxi_axil_apb_adapter.sv
|
||||
taxi/src/axi/tb/taxi_axil_crossbar_1s/test_taxi_axil_crossbar_1s.sv
|
||||
taxi/src/axi/tb/taxi_axil_axi_adapter/test_taxi_axil_axi_adapter.sv
|
||||
taxi/src/axi/rtl/taxi_axil_axi_adapter_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar_1s_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_interconnect_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_ram.sv
|
||||
taxi/src/axi/rtl/taxi_axi_axil_adapter_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_dp_ram.sv
|
||||
taxi/src/axi/rtl/taxi_axi_adapter_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_axil_adapter.sv
|
||||
taxi/src/axi/rtl/taxi_axil_register_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_tie_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_adapter_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_interconnect_1s_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_tie.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_adapter_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_if.sv
|
||||
taxi/src/axi/rtl/taxi_axi_tie.sv
|
||||
taxi/src/axi/rtl/taxi_axil_tie_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_interconnect_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_interconnect_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_apb_adapter.sv
|
||||
taxi/src/axi/rtl/taxi_axi_interconnect_1s.sv
|
||||
taxi/src/axi/rtl/taxi_axil_interconnect_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar_1s.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar_1s_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_fifo_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_interconnect.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar_addr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_tie_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_register_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_interconnect.sv
|
||||
taxi/src/axi/rtl/taxi_axi_adapter_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar_addr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_axi_adapter.sv
|
||||
taxi/src/axi/rtl/taxi_axil_register_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_ram.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar_1s_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_tie_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_register.sv
|
||||
taxi/src/axi/rtl/taxi_axi_interconnect_1s_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_axil_adapter_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar_1s_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_crossbar.sv
|
||||
taxi/src/axi/rtl/taxi_axi_interconnect_1s_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axil_interconnect_1s.sv
|
||||
taxi/src/axi/rtl/taxi_axi_if.sv
|
||||
taxi/src/axi/rtl/taxi_axi_fifo.sv
|
||||
taxi/src/axi/rtl/taxi_axil_adapter.sv
|
||||
taxi/src/axi/rtl/taxi_axi_adapter.sv
|
||||
taxi/src/axi/rtl/taxi_axil_interconnect_1s_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_register_wr.sv
|
||||
taxi/src/axi/rtl/taxi_axi_register.sv
|
||||
taxi/src/axi/rtl/taxi_axil_axi_adapter_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axi_fifo_rd.sv
|
||||
taxi/src/axi/rtl/taxi_axil_crossbar_1s.sv
|
||||
taxi/src/sync/rtl/taxi_sync_reset.sv
|
||||
taxi/src/sync/rtl/taxi_sync_signal.sv
|
||||
taxi/src/lfsr/rtl/taxi_lfsr_crc.sv
|
||||
taxi/src/lfsr/rtl/taxi_lfsr_prbs_gen.sv
|
||||
taxi/src/lfsr/rtl/taxi_lfsr_scramble.sv
|
||||
taxi/src/lfsr/rtl/taxi_lfsr.sv
|
||||
taxi/src/lfsr/rtl/taxi_lfsr_prbs_check.sv
|
||||
taxi/src/lfsr/rtl/taxi_lfsr_descramble.sv
|
||||
taxi/src/axis/tb/taxi_axis_register/test_taxi_axis_register.sv
|
||||
taxi/src/axis/tb/taxi_axis_pipeline_register/test_taxi_axis_pipeline_register.sv
|
||||
taxi/src/axis/tb/taxi_axis_fifo/test_taxi_axis_fifo.sv
|
||||
taxi/src/axis/tb/taxi_axis_async_fifo_adapter/test_taxi_axis_async_fifo_adapter.sv
|
||||
taxi/src/axis/tb/taxi_axis_cobs_decode/test_taxi_axis_cobs_decode.sv
|
||||
taxi/src/axis/tb/taxi_axis_adapter/test_taxi_axis_adapter.sv
|
||||
taxi/src/axis/tb/taxi_axis_mux/test_taxi_axis_mux.sv
|
||||
taxi/src/axis/tb/taxi_axis_concat/test_taxi_axis_concat.sv
|
||||
taxi/src/axis/tb/taxi_axis_fifo_adapter/test_taxi_axis_fifo_adapter.sv
|
||||
taxi/src/axis/tb/taxi_axis_demux/test_taxi_axis_demux.sv
|
||||
taxi/src/axis/tb/taxi_axis_pipeline_fifo/test_taxi_axis_pipeline_fifo.sv
|
||||
taxi/src/axis/tb/taxi_axis_switch/test_taxi_axis_switch.sv
|
||||
taxi/src/axis/tb/taxi_axis_cobs_encode/test_taxi_axis_cobs_encode.sv
|
||||
taxi/src/axis/tb/taxi_axis_async_fifo/test_taxi_axis_async_fifo.sv
|
||||
taxi/src/axis/tb/taxi_axis_broadcast/test_taxi_axis_broadcast.sv
|
||||
taxi/src/axis/tb/taxi_axis_arb_mux/test_taxi_axis_arb_mux.sv
|
||||
taxi/src/axis/rtl/taxi_axis_switch.sv
|
||||
taxi/src/axis/rtl/taxi_axis_async_fifo.sv
|
||||
taxi/src/axis/rtl/taxi_axis_broadcast.sv
|
||||
taxi/src/axis/rtl/taxi_axis_demux.sv
|
||||
taxi/src/axis/rtl/taxi_axis_async_fifo_adapter.sv
|
||||
taxi/src/axis/rtl/taxi_axis_cobs_encode.sv
|
||||
taxi/src/axis/rtl/taxi_axis_tie.sv
|
||||
taxi/src/axis/rtl/taxi_axis_pipeline_fifo.sv
|
||||
taxi/src/axis/rtl/taxi_axis_arb_mux.sv
|
||||
taxi/src/axis/rtl/taxi_axis_cobs_decode.sv
|
||||
taxi/src/axis/rtl/taxi_axis_pipeline_register.sv
|
||||
taxi/src/axis/rtl/taxi_axis_fifo_adapter.sv
|
||||
taxi/src/axis/rtl/taxi_axis_mux.sv
|
||||
taxi/src/axis/rtl/taxi_axis_concat.sv
|
||||
taxi/src/axis/rtl/taxi_axis_fifo.sv
|
||||
taxi/src/axis/rtl/taxi_axis_null_snk.sv
|
||||
taxi/src/axis/rtl/taxi_axis_if.sv
|
||||
taxi/src/axis/rtl/taxi_axis_adapter.sv
|
||||
taxi/src/axis/rtl/taxi_axis_register.sv
|
||||
taxi/src/axis/rtl/taxi_axis_null_src.sv
|
||||
taxi/src/prim/rtl/taxi_arbiter.sv
|
||||
taxi/src/prim/rtl/taxi_penc.sv
|
||||
taxi/src/zircon/tb/zircon_ip_tx_deparse/test_zircon_ip_tx_deparse.sv
|
||||
taxi/src/zircon/tb/zircon_ip_len_cksum/test_zircon_ip_len_cksum.sv
|
||||
taxi/src/zircon/tb/zircon_ip_rx_parse/test_zircon_ip_rx_parse.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_tx_deparse.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_tx_ingress.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_rx_egress.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_len_cksum.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_tx_buffer.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_rx_ingress.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_rx_parse.sv
|
||||
taxi/src/zircon/rtl/zircon_ip_tx_egress.sv
|
||||
taxi/src/dma/tb/taxi_dma_if_pcie_us/test_taxi_dma_if_pcie_us.sv
|
||||
taxi/src/dma/tb/taxi_dma_if_axi/test_taxi_dma_if_axi.sv
|
||||
taxi/src/dma/tb/taxi_dma_psdpram_async/test_taxi_dma_psdpram_async.sv
|
||||
taxi/src/dma/tb/taxi_dma_if_pcie_us_rd/test_taxi_dma_if_pcie_us_rd.sv
|
||||
taxi/src/dma/tb/taxi_dma_if_axi_rd/test_taxi_dma_if_axi_rd.sv
|
||||
taxi/src/dma/tb/taxi_axi_cdma/test_taxi_axi_cdma.sv
|
||||
taxi/src/dma/tb/taxi_dma_psdpram/test_taxi_dma_psdpram.sv
|
||||
taxi/src/dma/tb/taxi_dma_client_axis_source/test_taxi_dma_client_axis_source.sv
|
||||
taxi/src/dma/tb/taxi_axi_dma/test_taxi_axi_dma.sv
|
||||
taxi/src/dma/tb/taxi_dma_if_pcie_us_wr/test_taxi_dma_if_pcie_us_wr.sv
|
||||
taxi/src/dma/tb/taxi_dma_if_axi_wr/test_taxi_dma_if_axi_wr.sv
|
||||
taxi/src/dma/tb/taxi_dma_client_axis_sink/test_taxi_dma_client_axis_sink.sv
|
||||
taxi/src/dma/rtl/taxi_axi_dma_rd.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_pcie_us_wr.sv
|
||||
taxi/src/dma/rtl/taxi_dma_ram_demux_rd.sv
|
||||
taxi/src/dma/rtl/taxi_dma_desc_if.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_pcie_us_rd.sv
|
||||
taxi/src/dma/rtl/taxi_dma_desc_mux.sv
|
||||
taxi/src/dma/rtl/taxi_dma_ram_demux_wr.sv
|
||||
taxi/src/dma/rtl/taxi_axi_cdma.sv
|
||||
taxi/src/dma/rtl/taxi_dma_client_axis_source.sv
|
||||
taxi/src/dma/rtl/taxi_dma_psdpram_async.sv
|
||||
taxi/src/dma/rtl/taxi_dma_ram_demux.sv
|
||||
taxi/src/dma/rtl/taxi_axi_dma.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_mux.sv
|
||||
taxi/src/dma/rtl/taxi_dma_psdpram.sv
|
||||
taxi/src/dma/rtl/taxi_dma_client_axis_sink.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_mux_rd.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_axi_wr.sv
|
||||
taxi/src/dma/rtl/taxi_axi_dma_wr.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_mux_wr.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_pcie_us.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_axi.sv
|
||||
taxi/src/dma/rtl/taxi_dma_ram_if.sv
|
||||
taxi/src/dma/rtl/taxi_dma_if_axi_rd.sv
|
||||
taxi/src/pcie/tb/taxi_pcie_axil_master/test_taxi_pcie_axil_master.sv
|
||||
taxi/src/pcie/tb/taxi_pcie_us_axil_master/test_taxi_pcie_us_axil_master.sv
|
||||
taxi/src/pcie/tb/taxi_pcie_axil_master_minimal/test_taxi_pcie_axil_master_minimal.sv
|
||||
taxi/src/pcie/rtl/taxi_pcie_us_axil_master.sv
|
||||
taxi/src/pcie/rtl/taxi_pcie_axil_master.sv
|
||||
taxi/src/pcie/rtl/taxi_pcie_tlp_if.sv
|
||||
taxi/src/pcie/rtl/taxi_pcie_us_msi.sv
|
||||
taxi/src/pcie/rtl/taxi_pcie_axil_master_minimal.sv
|
||||
taxi/src/xfcp/tb/taxi_xfcp_if_uart/test_taxi_xfcp_if_uart.sv
|
||||
taxi/src/xfcp/tb/taxi_xfcp_mod_i2c_master/test_taxi_xfcp_mod_i2c_master.sv
|
||||
taxi/src/xfcp/tb/taxi_xfcp_switch/test_taxi_xfcp_switch.sv
|
||||
taxi/src/xfcp/tb/taxi_xfcp_mod_axi/test_taxi_xfcp_mod_axi.sv
|
||||
taxi/src/xfcp/tb/taxi_xfcp_mod_apb/test_taxi_xfcp_mod_apb.sv
|
||||
taxi/src/xfcp/tb/taxi_xfcp_mod_axil/test_taxi_xfcp_mod_axil.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_mod_axi.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_switch.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_if_uart.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_mod_axil.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_mod_apb.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_mod_i2c_master.sv
|
||||
taxi/src/xfcp/rtl/taxi_xfcp_mod_stats.sv
|
||||
taxi/src/math/tb/taxi_mt19937/test_taxi_mt19937.sv
|
||||
taxi/src/math/rtl/taxi_mt19937.sv
|
||||
taxi/src/hip/rtl/us/taxi_gt_qpll_reset.sv
|
||||
taxi/src/hip/rtl/us/taxi_gt_rx_reset.sv
|
||||
taxi/src/hip/rtl/us/taxi_gt_tx_reset.sv
|
||||
taxi/src/hip/rtl/us/taxi_mmcm_frac.sv
|
||||
taxi/src/cndm/board/AS02MC04/fpga/tb/fpga_core/test_fpga_core.sv
|
||||
taxi/src/cndm/board/AS02MC04/fpga/rtl/fpga_core.sv
|
||||
taxi/src/cndm/board/AS02MC04/fpga/rtl/fpga.sv
|
||||
taxi/src/cndm/tb/cndm_micro_pcie_us/test_cndm_micro_pcie_us.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_core.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_tx.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_pcie_us.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_desc_rd.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_cpl_wr.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_rx.sv
|
||||
taxi/src/cndm/rtl/cndm_micro_port.sv
|
||||
taxi/src/stats/tb/taxi_stats_collect/test_taxi_stats_collect.sv
|
||||
taxi/src/stats/tb/taxi_stats_strings_full/test_taxi_stats_strings_full.sv
|
||||
taxi/src/stats/tb/taxi_stats_counter/test_taxi_stats_counter.sv
|
||||
taxi/src/stats/rtl/taxi_stats_counter.sv
|
||||
taxi/src/stats/rtl/taxi_stats_collect.sv
|
||||
taxi/src/stats/rtl/taxi_stats_strings_full.sv
|
||||
taxi/src/io/rtl/taxi_ssio_sdr_out_diff.sv
|
||||
taxi/src/io/rtl/taxi_iddr.sv
|
||||
taxi/src/io/rtl/taxi_ssio_sdr_in.sv
|
||||
taxi/src/io/rtl/taxi_ssio_ddr_in.sv
|
||||
taxi/src/io/rtl/taxi_ssio_sdr_in_diff.sv
|
||||
taxi/src/io/rtl/taxi_led_sreg.sv
|
||||
taxi/src/io/rtl/taxi_ssio_ddr_out_diff.sv
|
||||
taxi/src/io/rtl/taxi_debounce_switch.sv
|
||||
taxi/src/io/rtl/taxi_ssio_ddr_out.sv
|
||||
taxi/src/io/rtl/taxi_ssio_sdr_out.sv
|
||||
taxi/src/io/rtl/taxi_ssio_ddr_in_diff.sv
|
||||
taxi/src/io/rtl/taxi_oddr.sv
|
||||
taxi/src/eth/tb/taxi_axis_xgmii_tx_64/test_taxi_axis_xgmii_tx_64.sv
|
||||
taxi/src/eth/tb/taxi_axis_baser_tx_32/test_taxi_axis_baser_tx_32.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_25g_us/test_taxi_eth_mac_25g_us.sv
|
||||
taxi/src/eth/tb/taxi_mac_ctrl_tx/test_taxi_mac_ctrl_tx.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_1g_gmii_fifo/test_taxi_eth_mac_1g_gmii_fifo.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_1g_rgmii_fifo/test_taxi_eth_mac_1g_rgmii_fifo.sv
|
||||
taxi/src/eth/tb/taxi_axis_baser_rx_32/test_taxi_axis_baser_rx_32.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_mii/test_taxi_eth_mac_mii.sv
|
||||
taxi/src/eth/tb/taxi_mac_ctrl_rx/test_taxi_mac_ctrl_rx.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_1g_gmii/test_taxi_eth_mac_1g_gmii.sv
|
||||
taxi/src/eth/tb/taxi_axis_gmii_rx/test_taxi_axis_gmii_rx.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_phy_10g_fifo/test_taxi_eth_mac_phy_10g_fifo.sv
|
||||
taxi/src/eth/tb/taxi_axis_xgmii_rx_32/test_taxi_axis_xgmii_rx_32.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_mii_fifo/test_taxi_eth_mac_mii_fifo.sv
|
||||
taxi/src/eth/tb/taxi_axis_baser_rx_64/test_taxi_axis_baser_rx_64.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_1g_rgmii/test_taxi_eth_mac_1g_rgmii.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_phy_10g/test_taxi_eth_mac_phy_10g.sv
|
||||
taxi/src/eth/tb/taxi_axis_xgmii_rx_64/test_taxi_axis_xgmii_rx_64.sv
|
||||
taxi/src/eth/tb/taxi_axis_gmii_tx/test_taxi_axis_gmii_tx.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_1g_fifo/test_taxi_eth_mac_1g_fifo.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_10g_fifo/test_taxi_eth_mac_10g_fifo.sv
|
||||
taxi/src/eth/tb/taxi_axis_xgmii_tx_32/test_taxi_axis_xgmii_tx_32.sv
|
||||
taxi/src/eth/tb/taxi_axis_baser_tx_64/test_taxi_axis_baser_tx_64.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_10g/test_taxi_eth_mac_10g.sv
|
||||
taxi/src/eth/tb/taxi_eth_mac_1g/test_taxi_eth_mac_1g.sv
|
||||
taxi/src/eth/rtl/taxi_axis_baser_rx_64.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_1g_gmii_fifo.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_mii_fifo.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_rx_frame_sync.sv
|
||||
taxi/src/eth/rtl/taxi_xgmii_baser_dec.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_tx.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_rx_ber_mon.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_rx_watchdog.sv
|
||||
taxi/src/eth/rtl/taxi_axis_baser_rx_32.sv
|
||||
taxi/src/eth/rtl/taxi_axis_xgmii_rx_32.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_rx.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_mac_25g_us.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_phy_10g_us_gt_ll.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_phy_25g_us_gt_ll.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_phy_10g_7_gt.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_phy_25g_us_gt_apb.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_phy_10g_us_gt.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_mac_25g_us_ch.sv
|
||||
taxi/src/eth/rtl/us/taxi_eth_phy_25g_us_gt.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_1g_fifo.sv
|
||||
taxi/src/eth/rtl/taxi_xgmii_baser_enc.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_10g_fifo.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_rx_if.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_stats.sv
|
||||
taxi/src/eth/rtl/taxi_axis_baser_tx_32.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_phy_10g_rx.sv
|
||||
taxi/src/eth/rtl/taxi_mac_ctrl_rx.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_phy_10g_tx.sv
|
||||
taxi/src/eth/rtl/taxi_axis_gmii_rx.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g.sv
|
||||
taxi/src/eth/rtl/taxi_axis_xgmii_rx_64.sv
|
||||
taxi/src/eth/rtl/taxi_axis_xgmii_tx_64.sv
|
||||
taxi/src/eth/rtl/taxi_rgmii_phy_if.sv
|
||||
taxi/src/eth/rtl/taxi_eth_phy_10g_tx_if.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_phy_10g.sv
|
||||
taxi/src/eth/rtl/taxi_axis_xgmii_tx_32.sv
|
||||
taxi/src/eth/rtl/taxi_mac_pause_ctrl_tx.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_mii.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_1g_gmii.sv
|
||||
taxi/src/eth/rtl/taxi_mac_ctrl_tx.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_1g_rgmii.sv
|
||||
taxi/src/eth/rtl/taxi_mac_pause_ctrl_rx.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_1g_rgmii_fifo.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_10g.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_1g.sv
|
||||
taxi/src/eth/rtl/taxi_mii_phy_if.sv
|
||||
taxi/src/eth/rtl/taxi_axis_gmii_tx.sv
|
||||
taxi/src/eth/rtl/taxi_axis_baser_tx_64.sv
|
||||
taxi/src/eth/rtl/taxi_gmii_phy_if.sv
|
||||
taxi/src/eth/rtl/taxi_eth_mac_phy_10g_fifo.sv
|
||||
taxi/src/lss/tb/taxi_i2c_master/test_taxi_i2c_master.sv
|
||||
taxi/src/lss/tb/taxi_uart/test_taxi_uart.sv
|
||||
taxi/src/lss/tb/taxi_i2c_slave_apb_master/test_taxi_i2c_slave_apb_master.sv
|
||||
taxi/src/lss/tb/taxi_i2c_slave_axil_master/test_taxi_i2c_slave_axil_master.sv
|
||||
taxi/src/lss/tb/taxi_i2c_single_reg/test_taxi_i2c_single_reg.sv
|
||||
taxi/src/lss/tb/taxi_i2c_slave/test_taxi_i2c_slave.sv
|
||||
taxi/src/lss/rtl/taxi_mdio_master.sv
|
||||
taxi/src/lss/rtl/taxi_i2c_slave_axil_master.sv
|
||||
taxi/src/lss/rtl/taxi_i2c_single_reg.sv
|
||||
taxi/src/lss/rtl/taxi_i2c_master.sv
|
||||
taxi/src/lss/rtl/taxi_i2c_slave.sv
|
||||
taxi/src/lss/rtl/taxi_i2c_slave_apb_master.sv
|
||||
taxi/src/lss/rtl/taxi_uart_brg.sv
|
||||
taxi/src/lss/rtl/taxi_i2c_init.sv
|
||||
taxi/src/lss/rtl/taxi_uart_rx.sv
|
||||
taxi/src/lss/rtl/taxi_uart.sv
|
||||
taxi/src/lss/rtl/taxi_uart_tx.sv
|
||||
taxi/src/ptp/tb/taxi_ptp_td_rel2tod/test_taxi_ptp_td_rel2tod.sv
|
||||
taxi/src/ptp/rtl/taxi_ptp_clock_cdc.sv
|
||||
taxi/src/ptp/rtl/taxi_ptp_clock.sv
|
||||
taxi/src/ptp/rtl/taxi_ptp_td_leaf.sv
|
||||
taxi/src/ptp/rtl/taxi_ptp_td_phc.sv
|
||||
taxi/src/ptp/rtl/taxi_ptp_td_rel2tod.sv
|
||||
taxi/src/ptp/rtl/taxi_ptp_perout.sv
|
||||
taxi/src/apb/tb/taxi_apb_adapter/test_taxi_apb_adapter.sv
|
||||
taxi/src/apb/tb/taxi_apb_dp_ram/test_taxi_apb_dp_ram.sv
|
||||
taxi/src/apb/tb/taxi_apb_ram/test_taxi_apb_ram.sv
|
||||
taxi/src/apb/tb/taxi_apb_interconnect/test_taxi_apb_interconnect.sv
|
||||
taxi/src/apb/rtl/taxi_apb_interconnect.sv
|
||||
taxi/src/apb/rtl/taxi_apb_ram.sv
|
||||
taxi/src/apb/rtl/taxi_apb_if.sv
|
||||
taxi/src/apb/rtl/taxi_apb_adapter.sv
|
||||
taxi/src/apb/rtl/taxi_apb_dp_ram.sv
|
||||
7
src/sub/upstream_path/sim/sources.list
Normal file
7
src/sub/upstream_path/sim/sources.list
Normal file
@@ -0,0 +1,7 @@
|
||||
../../../../sim/verilator.vlt
|
||||
|
||||
upstream_ip_check_harness.sv
|
||||
|
||||
../src/sources.list
|
||||
|
||||
../../../common/taxi_sources.list
|
||||
65
src/sub/upstream_path/sim/upstream_ip_check.py
Normal file
65
src/sub/upstream_path/sim/upstream_ip_check.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import cocotb
|
||||
from scapy.layers.l2 import Ether
|
||||
from scapy.layers.inet import IP, TCP
|
||||
|
||||
from cocotb.handle import Immediate
|
||||
|
||||
from cocotb.clock import Clock
|
||||
from cocotb.triggers import Timer, RisingEdge
|
||||
|
||||
from cocotbext.axi import AxiStreamBus, AxiStreamSink, AxiStreamSource
|
||||
|
||||
|
||||
import logging
|
||||
|
||||
|
||||
CLK_PERIOD = 5
|
||||
|
||||
class TB:
|
||||
def __init__(self, dut):
|
||||
self.dut = dut
|
||||
|
||||
self.log = logging.getLogger("cocotb.tb")
|
||||
self.log.setLevel(logging.INFO)
|
||||
|
||||
cocotb.start_soon(Clock(self.dut.clk, CLK_PERIOD, unit="ns").start())
|
||||
|
||||
self.s_axis_data = AxiStreamSource(AxiStreamBus.from_prefix(dut.s_axis_data, ""), dut.clk, dut.rst)
|
||||
self.m_axis_dma = AxiStreamSink(AxiStreamBus.from_prefix(dut.m_axis_dma, ""), dut.clk, dut.rst)
|
||||
self.m_axis_data = AxiStreamSink(AxiStreamBus.from_prefix(dut.m_axis_data, ""), dut.clk, dut.rst)
|
||||
|
||||
|
||||
async def cycle_reset(self):
|
||||
await self._cycle_reset(self.dut.rst, self.dut.clk)
|
||||
|
||||
|
||||
async def _cycle_reset(self, rst, clk):
|
||||
rst.value = Immediate(0)
|
||||
await RisingEdge(clk)
|
||||
await RisingEdge(clk)
|
||||
rst.value = 1
|
||||
await RisingEdge(clk)
|
||||
await RisingEdge(clk)
|
||||
rst.value = 0
|
||||
await RisingEdge(clk)
|
||||
await RisingEdge(clk)
|
||||
|
||||
|
||||
@cocotb.test
|
||||
async def test_sanity(dut):
|
||||
tb = TB(dut)
|
||||
|
||||
await tb.cycle_reset()
|
||||
|
||||
tb.dut.i_dest_ip.value = 0xc0a85715
|
||||
|
||||
pkt_0 = Ether() / IP(src="127.0.0.1", dst="192.168.87.21") / TCP() / "Hello, world!"
|
||||
await tb.s_axis_data.send(pkt_0.build())
|
||||
pkt_1 = Ether() / IP(src="127.0.0.1", dst="192.168.87.22") / TCP() / "Different Data now!"
|
||||
await tb.s_axis_data.send(pkt_1.build())
|
||||
|
||||
recv_pkt_0 = await tb.m_axis_data.recv()
|
||||
recv_pkt_1 = await tb.m_axis_dma.recv()
|
||||
|
||||
assert recv_pkt_0.tdata == pkt_0.build()
|
||||
assert recv_pkt_1.tdata == pkt_1.build()
|
||||
21
src/sub/upstream_path/sim/upstream_ip_check_harness.sv
Normal file
21
src/sub/upstream_path/sim/upstream_ip_check_harness.sv
Normal file
@@ -0,0 +1,21 @@
|
||||
module upstream_ip_check_harness();
|
||||
|
||||
taxi_axis_if #(.DATA_W(32)) s_axis_data();
|
||||
taxi_axis_if #(.DATA_W(32)) m_axis_dma();
|
||||
taxi_axis_if #(.DATA_W(32)) m_axis_data();
|
||||
|
||||
logic clk;
|
||||
logic rst;
|
||||
|
||||
logic [31:0] i_dest_ip;
|
||||
|
||||
upstream_ip_check #(.DATA_W(32)) u_dut (
|
||||
.clk (clk),
|
||||
.rst (rst),
|
||||
.s_axis_data (s_axis_data),
|
||||
.m_axis_dma (m_axis_dma),
|
||||
.m_axis_data (m_axis_data),
|
||||
.i_dest_ip (i_dest_ip)
|
||||
);
|
||||
|
||||
endmodule
|
||||
7
src/sub/upstream_path/sim/upstream_path.yaml
Normal file
7
src/sub/upstream_path/sim/upstream_path.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
tests:
|
||||
- name: "upstream_ip_check"
|
||||
toplevel: "upstream_ip_check_harness"
|
||||
modules:
|
||||
- "upstream_ip_check"
|
||||
sources: "sources.list"
|
||||
waves: True
|
||||
1
src/sub/upstream_path/src/sources.list
Normal file
1
src/sub/upstream_path/src/sources.list
Normal file
@@ -0,0 +1 @@
|
||||
upstream_ip_check.sv
|
||||
144
src/sub/upstream_path/src/upstream_ip_check.sv
Normal file
144
src/sub/upstream_path/src/upstream_ip_check.sv
Normal file
@@ -0,0 +1,144 @@
|
||||
// Destination IP address of packet is checked. If it does not match,
|
||||
// then the packet is either sent to the CPU or dropped.
|
||||
|
||||
module upstream_ip_check #(
|
||||
parameter DATA_W = 32 //supported values are 32 and 128
|
||||
)(
|
||||
input clk,
|
||||
input rst,
|
||||
|
||||
taxi_axis_if.snk s_axis_data,
|
||||
|
||||
taxi_axis_if.src m_axis_dma,
|
||||
taxi_axis_if.src m_axis_data,
|
||||
|
||||
input logic [31:0] i_dest_ip
|
||||
);
|
||||
|
||||
if (s_axis_data.DATA_W != DATA_W)
|
||||
$fatal(0, "Error: s_axis_data.DATA_W does not match DATA_W (instance %m)");
|
||||
|
||||
if (m_axis_dma.DATA_W != DATA_W)
|
||||
$fatal(0, "Error: m_axis_dma.DATA_W does not match DATA_W (instance %m)");
|
||||
|
||||
if (m_axis_data.DATA_W != DATA_W)
|
||||
$fatal(0, "Error: m_axis_data.DATA_W does not match DATA_W (instance %m)");
|
||||
|
||||
taxi_axis_if #(.DATA_W(DATA_W)) int_axis_data();
|
||||
|
||||
// eth header is 14 bytes
|
||||
// ip dest header is 16 bytes after that, or 30 bytes total
|
||||
// for 32 bit data, this is at 30/4 -> 7.5 cycles in (split over 2 cycles)
|
||||
// for 128 bit data, this is at 30/16 -> 1.875 cycles (also split over 2 cycles)
|
||||
|
||||
localparam WAIT_CYCLES = DATA_W == 32 ? 10 : 3;
|
||||
|
||||
// Dest IP scanner
|
||||
|
||||
enum logic {SCAN, DRAIN} state, state_next;
|
||||
logic [4:0] counter, counter_next;
|
||||
|
||||
logic [31:0] temp_dest_ip, temp_dest_ip_next;
|
||||
|
||||
logic [31:0] dest_ip, dest_ip_next;
|
||||
|
||||
assign int_axis_data.tready = '1;
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
if (rst) begin
|
||||
counter <= '0;
|
||||
state <= SCAN;
|
||||
temp_dest_ip <= '0;
|
||||
dest_ip <= '0;
|
||||
end else begin
|
||||
counter <= counter_next;
|
||||
state <= state_next;
|
||||
temp_dest_ip <= temp_dest_ip_next;
|
||||
dest_ip <= dest_ip_next;
|
||||
end
|
||||
end
|
||||
|
||||
always_comb begin
|
||||
counter_next = counter;
|
||||
state_next = state;
|
||||
temp_dest_ip_next = temp_dest_ip;
|
||||
dest_ip_next = dest_ip;
|
||||
|
||||
if (s_axis_data.tvalid && s_axis_data.tready) begin
|
||||
if (state == SCAN) begin
|
||||
counter_next = counter + 1;
|
||||
if (DATA_W == 32) begin
|
||||
if (counter == 7) begin
|
||||
temp_dest_ip_next[31:16] = {s_axis_data.tdata[23:16], s_axis_data.tdata[31:24]};
|
||||
end else if (counter == 8) begin
|
||||
dest_ip_next = {temp_dest_ip[31:16], s_axis_data.tdata[7:0], s_axis_data.tdata[15:8]};
|
||||
state_next = DRAIN;
|
||||
counter_next = '0;
|
||||
end
|
||||
end else if (DATA_W == 128) begin
|
||||
|
||||
end
|
||||
|
||||
end else if (state == DRAIN) begin
|
||||
if (s_axis_data.tlast) begin
|
||||
state_next = SCAN;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
// Shift register
|
||||
|
||||
assign s_axis_data.tready = int_axis_data.tready;
|
||||
|
||||
logic [1+1+s_axis_data.KEEP_W+s_axis_data.DATA_W-1:0] data_sr [WAIT_CYCLES];
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
if (s_axis_data.tready) begin
|
||||
for (int idx = 0; idx < WAIT_CYCLES-1; idx++) begin
|
||||
data_sr[idx+1] <= data_sr[idx];
|
||||
end
|
||||
data_sr[0] <= {s_axis_data.tvalid, s_axis_data.tlast, s_axis_data.tkeep, s_axis_data.tdata};
|
||||
end
|
||||
end
|
||||
|
||||
assign {int_axis_data.tvalid, int_axis_data.tlast, int_axis_data.tkeep, int_axis_data.tdata} = data_sr[WAIT_CYCLES-1];
|
||||
|
||||
|
||||
// Demux
|
||||
|
||||
logic dest_ip_matches;
|
||||
|
||||
taxi_axis_if #(.DATA_W(DATA_W)) int_axis_demux[2]();
|
||||
|
||||
taxi_axis_tie u_data_tie (
|
||||
.s_axis(int_axis_demux[1]),
|
||||
.m_axis(m_axis_data)
|
||||
);
|
||||
|
||||
taxi_axis_tie u_dma_tie (
|
||||
.s_axis(int_axis_demux[0]),
|
||||
.m_axis(m_axis_dma)
|
||||
);
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
dest_ip_matches <= dest_ip == i_dest_ip;
|
||||
end
|
||||
|
||||
taxi_axis_demux #(
|
||||
.M_COUNT(2)
|
||||
) u_demux (
|
||||
.clk (clk),
|
||||
.rst (rst),
|
||||
|
||||
.s_axis (int_axis_data),
|
||||
|
||||
.m_axis (int_axis_demux),
|
||||
|
||||
.enable ('1),
|
||||
.drop ('0), // we could drop here if a bit is set.
|
||||
.select (dest_ip_matches)
|
||||
);
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user