Add upstream ip check

This commit is contained in:
2026-01-18 01:32:40 -08:00
parent 098ba2e2cd
commit a76a054387
14 changed files with 623 additions and 2 deletions

9
.gitignore vendored
View File

@@ -1,2 +1,9 @@
# Draw.io # Draw.io
*.bkp *.bkp
# Python
*.pyc
__pycache__/
# Simulations
sim_build/

11
init_env.sh Normal file
View 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
View 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

View File

@@ -0,0 +1,2 @@
yaml:
- ../src/sub/upstream_path/sim/upstream_path.yaml

3
sim/verilator.vlt Normal file
View File

@@ -0,0 +1,3 @@
`verilator_config
lint_off -rule TIMESCALEMOD

View 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

View File

@@ -0,0 +1,7 @@
../../../../sim/verilator.vlt
upstream_ip_check_harness.sv
../src/sources.list
../../../common/taxi_sources.list

View 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()

View 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

View File

@@ -0,0 +1,7 @@
tests:
- name: "upstream_ip_check"
toplevel: "upstream_ip_check_harness"
modules:
- "upstream_ip_check"
sources: "sources.list"
waves: True

View File

@@ -0,0 +1 @@
upstream_ip_check.sv

View 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