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

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