`

范围:fpga/nv_hsb_ip/
语言/风格:全部为 SystemVerilog(.sv)。该目录内没有 README、TCL、XDC 等元数据文件。
顶层实体:HOLOLINK_top(top/HOLOLINK_top.sv)。
板级配置:HOLOLINK_def.svh / HOLOLINK_pkg 位于 fpga/<board>/rtl/top/,被本 IP 包含使用。


1. 顶层结构与总体角色

nv_hsb_ip/ 是 Holoscan Sensor Bridge 的 FPGA 核心 IP,用于把高速传感器数据流桥接到以太网主机,同时提供 APB 控制面、IEEE 1588/gPTP 时间同步、低速控制包处理以及若干外设接口(SPI/I2C/UART/GPIO)。

1.1 顶层模块 HOLOLINK_top 的外部接口

域接口方向作用
控制面APB(apb_m2s / apb_s2m)Master/Slave对所有内部模块及用户扩展寄存器的读写访问
传感器数据i_sif_* AXI-StreamRX/TX + 时钟/复位高速传感器数据通路
主机数据i_hif_* / o_hif_* AXI-StreamRX/TX + 时钟/复位以太网 MAC / 主机数据通路
外设SPI、I2C、UART、GPIO外部引脚传感器/外设控制
时间同步PTP 时钟 + PPS + o_ptp_sec/nanosec输入/输出IEEE 1588 / gPTP 授时
杂项i_sys_rst、o_init_done、o_sw_*_rst输入/输出系统复位与初始化

1.2 主要数据通路

传感器 → 主机(Sensor RX path):
  i_sif_axis_*  → packetizer_top → dp_pkt_top → eth_pkt → o_hif_axis_*

主机 → 传感器(Host RX path):
  i_hif_axis_* → rx_parser
                     ├── sensor_tx_pkt_proc → tx_stream_buffer → o_sif_axis_*
                     ├── ptp_top
                     ├── rx_ls_parser → eth_pkt (低速控制返回)
                     └── bridge_pkt_proc (桥接模式)

低速控制回路:
  rx_parser → rx_ls_parser → { bootp, ecb_rdwr_ctrl, ctrl_bus_evt_int, arp_ping_pkt_proc }
                              → eth_pkt → 主机

PTP:
  ptp_top 生成本地时间/PPS,或根据外部 PTP 报文进行同步

1.3 时钟与复位结构

  • reset_gen 为以下时钟域生成同步复位:
    • i_apb_clk → o_apb_rst
    • i_hif_clk → o_hif_rst
    • i_ptp_clk → o_ptp_rst
    • i_sif_rx_clk → o_sif_rx_rst
    • i_sif_tx_clk → o_sif_tx_rst
  • glb_ctrl_top 提供软件复位位(o_sw_sys_rst、o_sw_sen_rst)。

2. 依赖关系 / 模块层次

HOLOLINK_top
├── reset_gen
├── apb_intc_top
│   ├── apb_switch (多层:user/hololink、global/ptp/event/roce、sensor、host、bridge、peri)
│   ├── apb_ff
│   └── 连接各子系统的 s_apb_reg / s_apb_ram 从机
├── glb_ctrl_top
│   └── s_apb_reg
├── sys_init
│   └── m_apb_reg
├── eeprom_info
├── ptp_top
│   ├── s_apb_reg
│   ├── ptp_ingress
│   ├── ptp_parser
│   ├── ptp_sync
│   ├── ptp_dly
│   ├── ptp_calc
│   ├── ptp_timer
│   ├── dpll
│   └── ptp_egress
├── rx_parser(每个 HOST_IF_INST 一个)
│   ├── s_apb_reg
│   ├── axis_buffer (x2)
│   ├── axis_reg
│   ├── axis_remove
│   ├── axis_to_vec
│   ├── sc_fifo (x3)
│   └── roce_ack
├── rx_ls_parser
│   ├── bootp
│   ├── ctrl_bus_evt_int
│   │   └── ctrl_bus_evt_fsm
│   │       └── s_apb_ram
│   ├── ecb_rdwr_ctrl
│   ├── axis_arb (x2)
│   ├── axis_buffer
│   ├── axis_hdr
│   ├── roce_icrc
│   │   └── lfsr_hc(来自 roce/)
│   └── arp_ping_pkt_proc
│       ├── axis_reg, axis_to_vec, vec_to_axis
├── sensor_tx_pkt_proc
│   ├── axis_drop
│   └── axis_drop_tail
├── tx_stream_buffer(每个 SENSOR_TX_IF_INST 一个)
│   ├── s_apb_reg
│   ├── data_sync (x2)
│   └── axis_buffer_tx
│       ├── axis_gearbox (x2)
│       ├── axis_reg
│       ├── dc_fifo_stub → dc_fifo_generic
│       ├── pulse_sync
│       └── sc_fifo
├── pause_gen
│   └── vec_to_axis
├── packetizer_top(每个 SENSOR_RX_IF_INST 一个)
│   ├── s_apb_reg
│   ├── data_sync
│   └── packetizer
│       └── virtual_port → axis_buffer
├── dp_pkt_top
│   ├── s_apb_reg(per host)
│   ├── s_apb_ram
│   ├── dp_pkt(per host)
│   ├── dp_pkt_hdr
│   ├── dp_pkt_ts
│   ├── roce_icrc → lfsr_hc
│   ├── axis_checker
│   ├── axis_reg
│   └── rrarb
├── eth_pkt(每个 HOST_IF_INST 一个)
│   ├── s_apb_reg
│   ├── axis_arb
│   ├── axis_reg
│   ├── axis_insert
│   └── axis_checker
├── bridge_pkt_proc(桥接模式)
│   ├── s_apb_reg
│   ├── axis_buffer (x3)
│   ├── axis_mask
│   ├── rrarb (x2)
│   └── sc_fifo (x2)
├── routing_table(桥接模式)
│   ├── axis_to_vec
│   ├── cam
│   └── rrarb (x2)
├── spi_ctrl_fsm
│   ├── s_apb_reg
│   ├── dp_ram
│   └── spi
├── i2c_ctrl_fsm
│   ├── s_apb_reg
│   └── i2c
├── uart_ctrl_fsm
│   ├── s_apb_reg
│   ├── edge_to_pulse
│   ├── sc_fifo (x2)
│   └── uart
└── misc 通用原语
    ├── sc_fifo, dc_fifo_generic/dc_fifo_stub, str_fwd_fifo
    ├── streaming_cdc, data_sync, pulse_sync, reg_cdc, cdc_reset_handshake
    ├── reset_sync, rst_pb_debounce, debouncer, glitch_filter
    ├── cam, rrarb, priority_arb, comparator, moving_avg
    └── dp_ram

3. 共享 Package 文件

Package文件作用
apb_pkglib_apb/apb_pkg.svAPB4 结构体(apb_m2s、apb_s2m)
regmap_pkgreg_map/regmap_pkg.sv地址译码、寄存器偏移、子模块 ID
axis_pkglib_axis/axis_pkg.sv大小端转换与 tkeep 辅助函数
ptp_pkgptp/ptp_pkg.svPTP 常量(Ethertype、消息类型、位宽)
rx_parser_pkgrx_parser/rx_parser_pkg.svEthernet/IP/UDP/ARP/Ping/RoCE 头结构体
ecb_pkgecb/ecb_pkg.sv外部控制总线(ECB)操作码
i2s_pkgref_design/i2s/i2s_pkg.svI2S 参考设计常量

4. 各子目录详细分析

4.1 bootp/ — BOOTP/DHCP 枚举客户端

  • 文件:bootp.sv
  • 角色:在启动阶段发送 BOOTP 风格请求报文,解析回复以获取主机 MAC/IP/UDP 端口,并为本设备分配 IP。
  • 关键接口:PTP 时间/PPS、i_dev_mac_addr、i_eeprom_ip_addr、低速 AXI-Stream RX/TX;输出 o_host_mac_addr、o_host_ip_addr、o_dev_ip_addr、o_dev_udp_port、o_pld_len 等。
  • 依赖:无内部子模块,导入 HOLOLINK_pkg::*。

4.2 ctrl_bus_evt/ — 事件驱动 APB 控制序列器

  • 文件:ctrl_bus_evt_fsm.sv、ctrl_bus_evt_int.sv
  • 角色:ctrl_bus_evt_fsm 执行一段存储在 RAM 中的小程序(poll/read/write/compare),响应事件向量;ctrl_bus_evt_int 作为包装层把其接入低速控制通路。
  • 关键接口:APB 从机(程序 RAM)、事件向量输入、APB 主机输出。
  • 依赖:ctrl_bus_evt_fsm 实例化 s_apb_ram;导入 apb_pkg、regmap_pkg。

4.3 data_gen/ — 内置传感器测试图案生成器

  • 文件:data_gen.sv、prbs_lfsr_hc.sv、ram_player.sv
  • 角色:用于调试/ bring-up,可向传感器 RX 路径注入 PRBS、计数器或 RAM 回放数据。
  • 关键模块:
    • data_gen:APB 控制,输出传感器位宽 AXI-Stream 及复用选择 o_data_gen_axis_mux。
    • prbs_lfsr_hc:LFSR PRBS 生成器。
    • ram_player:基于 APB/RAM 的播放引擎。
  • 依赖:data_gen 实例化 prbs_lfsr_hc;导入 apb_pkg、regmap_pkg、axis_pkg。

4.4 dp_pkt/ — 数据面封包器

  • 文件:dp_pkt_top.sv、dp_pkt.sv、dp_pkt_hdr.sv、dp_pkt_ts.sv
  • 角色:接收已按虚拟端口排序的传感器流,为其封装 Ethernet/IPv4/UDP/RoCE 头、插入时间戳、计算 CRC,输出主机位宽 AXI-Stream 报文。
  • 关键模块:
    • dp_pkt_top:顶层封装,含 per-host APB 配置、PTP 时间戳、SOF 向量、MAC/IP 数组。
    • dp_pkt:per-host 有效载荷/CRC 流水线。
    • dp_pkt_hdr:报文头构造。
    • dp_pkt_ts:时间戳插入逻辑。
  • 依赖:实例化 s_apb_reg、s_apb_ram、axis_checker、axis_reg、dp_pkt、dp_pkt_hdr、dp_pkt_ts、roce_icrc、rrarb;导入 apb_pkg、regmap_pkg。

4.5 ecb/ — 外部控制总线(ECB)读写控制器

  • 文件:ecb_pkg.sv、ecb_rdwr_ctrl.sv
  • 角色:解析低速控制包中的 ECB 命令并代为执行 APB 读/写,返回响应 AXI-Stream。
  • 关键接口:APB 从机 + APB 主机、低速 AXI-Stream 数据/响应、解析后的主机信息。
  • 依赖:实例化 s_apb_reg;定义 ecb_pkg(RD_BYTE、WR_DWORD 等操作码)。

4.6 eth_pkt/ — 主机发送聚合器

  • 文件:eth_pkt.sv
  • 角色:仲裁多路输入流(数据面、PTP、低速控制、暂停帧、桥接),汇聚成单一主机 AXI-Stream;可插入 VLAN 标签,并做 AXI-Stream 协议检查。
  • 关键接口:APB、PTP 时间触发、N_INPT 路 AXI-Stream 输入;输出到 MAC 的单路 AXI-Stream、o_ptp_val、o_del_req_val、o_pkt_inc。
  • 依赖:实例化 s_apb_reg、axis_arb、axis_reg、axis_insert、axis_checker;导入 apb_pkg、regmap_pkg。

4.7 glb_ctrl/ — 全局控制/状态寄存器

  • 文件:glb_ctrl_top.sv
  • 角色:保存版本、日期、scratch、GPIO 输出/三态、软件复位输出等全局寄存器。
  • 关键接口:APB 从机、GPIO in/out/direction、o_hsb_ctrl(含 o_sw_sys_rst/o_sw_sen_rst)。
  • 依赖:实例化 s_apb_reg;导入 apb_pkg、regmap_pkg。

4.8 i2c/ — APB 控制 I2C 主设备

  • 文件:i2c.sv、i2c_ctrl_fsm.sv
  • 角色:APB 控制的 I2C 主外设。
  • 关键模块:
    • i2c:位级 I2C 控制器(scl_i/o、sda_i/o、时钟分频)。
    • i2c_ctrl_fsm:APB 寄存器接口 + 事务 FSM,支持多实例。
  • 依赖:i2c_ctrl_fsm 实例化 s_apb_reg 与 i2c;导入 apb_pkg、regmap_pkg。

4.9 lib_apb/ — APB 基础设施库

  • 文件:apb_pkg.sv、apb_adapter.sv、apb_ff.sv、apb_intc_top.sv、apb_switch.sv、apb_to_axi4l.sv、m_apb_reg.sv、s_apb_ila.sv、s_apb_ram_dyn.sv、s_apb_ram.sv、s_apb_reg.sv
  • 角色:提供 APB4 结构体、从寄存器/从 RAM、开关路由、流水线寄存器、APB-to-AXI4-Lite 桥、中断控制器与 ILA 探针。
  • 关键模块:
    • apb_pkg:APB4 apb_m2s/apb_s2m 打包结构体。
    • s_apb_reg:通用控制/状态寄存器 APB 从机。
    • m_apb_reg:可播放寄存器初始化序列的 APB 主机。
    • s_apb_ram / s_apb_ram_dyn:APB 从 RAM。
    • apb_switch:地址译码 APB 路由器。
    • apb_ff:APB 流水线寄存器。
    • apb_intc_top:多层 APB 互联,被 HOLOLINK_top 使用。
    • apb_to_axi4l:APB 转 AXI4-Lite 适配器。
  • 依赖:apb_intc_top 实例化多层 apb_switch、apb_ff;导入 HOLOLINK_pkg、regmap_pkg。

4.10 lib_axis/ — 可复用 AXI-Stream 构建块

  • 文件:axis_arb.sv、axis_buffer.sv、axis_checker.sv、axis_demux.sv、axis_drop_tail.sv、axis_drop.sv、axis_ftr.sv、axis_gearbox.sv、axis_hdr.sv、axis_insert.sv、axis_mask.sv、axis_packer.sv、axis_pkg.sv、axis_reg.sv、axis_remove.sv、axis_to_vec.sv、vec_to_axis.sv、vec_to_axis_dyn_len.sv
  • 角色:提供缓冲区、仲裁器、转换器、报文头操作、协议检查等通用 AXI-Stream 原语。
  • 关键模块:
    • axis_buffer:单/双时钟 AXI-Stream FIFO,支持位宽转换。
    • axis_arb:优先级/轮询 AXI-Stream 仲裁器。
    • axis_reg:skid/流水线寄存器。
    • axis_drop / axis_drop_tail:从头部/尾部删除字节。
    • axis_insert / axis_hdr / axis_mask / axis_ftr:插入/删除/掩码操作。
    • axis_gearbox:位宽转换。
    • axis_demux:解复用。
    • axis_packer:打包/解包。
    • axis_to_vec / vec_to_axis / vec_to_axis_dyn_len:AXIS 与向量互转。
    • axis_checker:协议/断言检查器。
  • 依赖:virtual_port 实例化 axis_buffer;axis_buffer_tx 实例化 axis_gearbox、axis_reg、dc_fifo_stub、pulse_sync、sc_fifo;定义 axis_pkg。

4.11 misc/ — 通用 FPGA 原语

  • 文件:cam.sv、cdc_reset_handshake.sv、comparator.sv、data_sync.sv、dc_fifo_generic.sv、dc_fifo_stub.sv、debouncer.sv、dp_ram.sv、edge_to_pulse.sv、glitch_filter.sv、moving_avg.sv、priority_arb.sv、pulse_sync.sv、reg_cdc.sv、reg_fifo.sv、reset_sync.sv、rrarb.sv、rst_pb_debounce.sv、sc_fifo.sv、str_fwd_fifo.sv、streaming_cdc.sv
  • 角色:全设计公用的基础单元。
  • 关键模块:
    • FIFO:sc_fifo、dc_fifo_generic、dc_fifo_stub、str_fwd_fifo、reg_fifo
    • CDC:streaming_cdc、data_sync、pulse_sync、reg_cdc、cdc_reset_handshake
    • 复位:reset_sync、rst_pb_debounce
    • IO 调理:debouncer、glitch_filter、edge_to_pulse
    • 存储/查找:dp_ram、cam
    • 仲裁:rrarb、priority_arb
    • 数学:comparator、moving_avg
  • 依赖:dc_fifo_stub 实例化 dc_fifo_generic。

4.12 packetizer/ — 传感器侧分组/排序

  • 文件:packetizer_top.sv、packetizer.sv、virtual_port.sv、odd_even_gen.sv
  • 角色:对输入传感器数据按帧起始(SOF)进行虚拟端口排序、位宽转换,生成供数据面封包器使用的 AXI-Stream 报文。
  • 关键模块:
    • packetizer_top:APB 控制顶层,跨传感器时钟 i_sclk 与主机时钟 i_pclk。
    • packetizer:虚拟端口排序引擎,支持可配置 VP 数量/大小与排序网络。
    • virtual_port:per-VP 缓冲区(实例化 axis_buffer)。
    • odd_even_gen:排序网络配置辅助。
  • 依赖:packetizer_top 实例化 s_apb_reg、data_sync、packetizer;packetizer 实例化 virtual_port;导入 regmap_pkg、apb_pkg。

4.13 ptp/ — IEEE 1588 / gPTP 时间同步子系统

  • 文件:ptp_pkg.sv、ptp_top.sv、ptp_ingress.sv、ptp_parser.sv、ptp_sync.sv、ptp_dly.sv、ptp_calc.sv、ptp_timer.sv、ptp_egress.sv、dpll.sv
  • 角色:接收主机 PTP 报文,计算 offset/mean delay,驱动 DPLL,生成本地时间(sec/nanosec/frac)、PPS,并发送 PTP delay-request/response 报文。
  • 关键模块:
    • ptp_top:顶层封装;APB 从机、主机 AXI-Stream RX/TX、PTP 时间输出。
    • ptp_ingress:捕获并打时间戳。
    • ptp_parser:解码 PTP 消息类型/字段。
    • ptp_sync:Sync/Follow-up 处理。
    • ptp_dly:Delay-request/response 处理与 egress 报文构造。
    • ptp_calc:Offset-from-master 与 mean-delay 计算。
    • ptp_timer:带频率调整的自由运行时间计数器。
    • dpll:数字锁相环。
    • ptp_egress:将 PTP 报文转回 AXI-Stream。
  • 依赖:ptp_top 实例化 s_apb_reg、pulse_sync、ptp_ingress、ptp_parser、ptp_sync、ptp_dly、ptp_calc、ptp_timer、dpll、ptp_egress;定义 ptp_pkg。

4.14 ref_design/ — 参考传感器/外设设计

这些模块 不被 HOLOLINK_top 直接实例化,而是展示如何把外部传感器 IP 接到 Holoscan Sensor Bridge。

4.14.1 ref_design/delayed_io/
  • 文件:delayed_io.sv、delayed_io_ctrl_fsm.sv
  • 角色:带延迟 set/clear 的 APB 控制 GPIO 块。
  • 关键模块:delayed_io(双时钟 cmd/proc,可扩展 o_io_pins)、delayed_io_ctrl_fsm。
  • 依赖:delayed_io 实例化 delayed_io_ctrl_fsm;导入 apb_pkg。
4.14.2 ref_design/i2s/
  • 文件:i2s_top.sv、i2s_serdes.sv、i2s_clk_gen.sv、i2s_axis_buffer_rx.sv、i2s_axis_buffer_tx.sv、i2s_pkg.sv
  • 角色:完整 I2S 音频参考外设,含 APB 配置与 TX/RX AXI-Stream 主机接口。
  • 关键模块:i2s_top、时钟生成 i2s_clk_gen、串并转换 i2s_serdes、AXIS 缓冲 i2s_axis_buffer_rx/tx。
  • 依赖:i2s_top 实例化其余 i2s_* 模块;定义 i2s_pkg。
4.14.3 ref_design/imu/
  • 文件:imu_top.sv、imu.sv
  • 角色:基于 I2C 的 IMU 传感器参考,读取 IMU 数据并带 PTP 时间戳以 AXI-Stream 输出。
  • 关键模块:imu_top(加时间戳与 AXIS 帧封装)、imu(APB 控制 I2C 事务引擎)。
  • 依赖:imu_top 实例化 imu;导入 apb_pkg、regmap_pkg。
4.14.4 ref_design/vsync/
  • 文件:vsync_gen.sv
  • 角色:APB 可配置的 VSYNC/帧同步脉冲生成器,与 PTP 同步。
  • 关键接口:APB 从机、PTP PPS/nanosec 输入、o_vsync_strb、GPIO 复用使能。
  • 依赖:无;导入 apb_pkg。

4.15 reg_map/ — 寄存器映射中心

  • 文件:regmap_pkg.sv
  • 角色:定义全 IP 共享的地址译码字段、子模块索引、global/host/sensor/peripheral 寄存器偏移。
  • 依赖:被几乎所有带 APB 的模块导入。

4.16 reset_gen/ — 复位生成

  • 文件:reset_gen.sv
  • 角色:为所有时钟域生成同步复位。
  • 关键接口:i_sys_rst(低有效异步)、i_cfg_rst(软复位)、各路时钟;输出 per-domain 高有效同步复位。
  • 依赖:实例化 misc/reset_sync。

4.17 roce/ — RoCE 支持

  • 文件:roce_icrc.sv、roce_ack.sv、lfsr_hc.sv
  • 角色:提供 RoCE 内联 CRC(roce_icrc)、ACK 生成(roce_ack)及共享 LFSR CRC 核。
  • 关键模块:
    • roce_icrc:AXIS CRC 追加/删除,使用 lfsr_hc。
    • roce_ack:RoCE ACK 生成与 QP 状态。
    • lfsr_hc:硬件优化的 LFSR CRC 引擎。
  • 依赖:roce_icrc 实例化 lfsr_hc;roce_ack 导入 apb_pkg、axis_pkg、regmap_pkg、rx_parser_pkg。

4.18 routing_table/ — 桥接模式路由表

  • 文件:routing_table.sv、bridge_pkt_proc.sv
  • 角色:在 Hololink 桥接模式下,学习源 MAC 并决定转发目的端口。
  • 关键模块:
    • routing_table:AXIS 输入、CAM 查找、目的端口向量、delay-request 标志。
    • bridge_pkt_proc:APB 控制,处理 host/sensor AXI-Stream、路由信息、PTP sync/del 标志,输出转发流。
  • 依赖:routing_table 实例化 axis_to_vec、cam、rrarb(x2),导入 ptp_pkg;bridge_pkt_proc 实例化 s_apb_reg、axis_buffer(x3)、axis_mask、rrarb(x2)、sc_fifo(x2),导入 ptp_pkg、apb_pkg、regmap_pkg。

4.19 rx_parser/ — 接收侧报文解析与分类

  • 文件:rx_parser.sv、rx_ls_parser.sv、arp_ping_pkt_proc.sv、rx_parser_pkg.sv
  • 角色:每个主机接口一个 rx_parser,解码 Ethernet/IP/UDP/RoCE/VLAN,把流量导向传感器 TX、PTP、低速控制、桥接与 RoCE ACK 路径。
  • 关键模块:
    • rx_parser:主机 AXIS 输入,输出 sensor TX、PTP、低速 AXIS、bridge TX、RoCE ACK、o_dest_info、o_ptp_sync_msg。
    • rx_ls_parser:低速控制聚合器,处理 BOOTP、ECB、事件、ARP/ping、回环,输出行率 AXIS 到 eth_pkt。
    • arp_ping_pkt_proc:生成 ARP 响应与 ICMP echo 响应。
  • 依赖:rx_parser 实例化 s_apb_reg、axis_buffer(x2)、axis_reg、axis_remove、axis_to_vec、sc_fifo(x3)、roce_ack;rx_ls_parser 实例化 bootp、ctrl_bus_evt_int、ecb_rdwr_ctrl、axis_arb(x2)、axis_buffer、axis_hdr、roce_icrc、arp_ping_pkt_proc;arp_ping_pkt_proc 实例化 axis_reg、axis_to_vec、vec_to_axis;定义 rx_parser_pkg。

4.20 sensor_tx/ — 主机到传感器发送路径

  • 文件:sensor_tx_pkt_proc.sv、tx_stream_buffer.sv、axis_buffer_tx.sv、pause_gen.sv
  • 角色:剥离网络头与 ICRC,缓冲有效载荷,跨时钟域,并在传感器缓冲区将满时生成 Ethernet 暂停帧。
  • 关键模块:
    • sensor_tx_pkt_proc:移除 RoCE/Ethernet 头+ICRC,路由到对应传感器。
    • tx_stream_buffer:per-sensor CDC 缓冲,带可编程阈值与暂停生成。
    • axis_buffer_tx:内部双时钟缓冲/变速箱,被 tx_stream_buffer 使用。
    • pause_gen:构造 802.3x 暂停帧。
  • 依赖:sensor_tx_pkt_proc 实例化 axis_drop、axis_drop_tail;tx_stream_buffer 实例化 s_apb_reg、data_sync(x2)、axis_buffer_tx;axis_buffer_tx 实例化 axis_gearbox(x2)、axis_reg、dc_fifo_stub、pulse_sync、sc_fifo;pause_gen 实例化 vec_to_axis。

4.21 spi/ — APB 控制 SPI 主设备

  • 文件:spi.sv、spi_ctrl_fsm.sv
  • 角色:APB 控制 SPI 主外设(支持 QSPI)。
  • 关键模块:
    • spi:位级 SPI 引擎(CS_N、SCK、4-bit SDIO)。
    • spi_ctrl_fsm:APB 寄存器接口、命令/数据 RAM、事务 FSM。
  • 依赖:spi_ctrl_fsm 实例化 s_apb_reg、dp_ram、spi;导入 apb_pkg、regmap_pkg。

4.22 sys_init/ — 系统初始化

  • 文件:sys_init.sv、eeprom_info.sv
  • 角色:sys_init 上电后播放 APB 寄存器初始化序列;eeprom_info 从外部 I2C EEPROM 读取 MAC/IP/板卡信息。
  • 关键模块:
    • sys_init:输入 i_init、i_init_reg[N_REG];输出 APB master、o_done。
    • eeprom_info:输出 APB master 到 I2C/EEPROM,以及 mac_addr、ip_addr、board_version、board_sn、eeprom_crc_err。
  • 依赖:sys_init 实例化 m_apb_reg;导入 apb_pkg;eeprom_info 额外导入 regmap_pkg。

4.23 top/ — 顶层集成

  • 文件:HOLOLINK_top.sv
  • 角色:整个 Holoscan Sensor Bridge IP 的顶层集成模块。
  • 关键接口:外部 APB 控制面、传感器 RX/TX AXIS、主机 RX/TX AXIS、SPI/I2C/UART/GPIO、PTP 时钟与时间输出、系统复位输出。
  • 集成关系:
    • reset_gen 提供所有复位。
    • apb_intc_top 将来自 ECB、sys_init、EEPROM、decoder 的 4 个内部主机端口路由到 device/global、sensor RX/TX、host、peripheral、bridge 与外部用户寄存器。
    • 每个主机接口一个 rx_parser 接收主机报文并分流。
    • rx_ls_parser 处理低速控制响应并回送给 eth_pkt。
    • ptp_top 接收 PTP 报文并驱动 PPS/时间。
    • dp_pkt_top + packetizer_top 构成传感器→主机数据通路。
    • sensor_tx_pkt_proc + tx_stream_buffer 构成主机→传感器通路。
    • eth_pkt 仲裁所有主机 TX 源。
    • 可选桥接模式使用 routing_table + bridge_pkt_proc。
    • 外设由 spi_ctrl_fsm、i2c_ctrl_fsm、uart_ctrl_fsm 控制。
    • sys_init + eeprom_info 完成上电初始化。
  • 依赖:包含 HOLOLINK_def.svh;导入 HOLOLINK_pkg、apb_pkg、regmap_pkg。

4.24 uart/ — APB 控制 UART 外设

  • 文件:uart.sv、uart_ctrl_fsm.sv
  • 角色:带 FIFO 与流控制的 APB 控制 UART 外设。
  • 关键模块:
    • uart:可配置波特率、校验、数据位宽、毛刺滤波的 UART 核心。
    • uart_ctrl_fsm:APB 寄存器接口、TX/RX FIFO、中断生成。
  • 依赖:uart_ctrl_fsm 实例化 s_apb_reg、edge_to_pulse、sc_fifo(x2)、uart;导入 apb_pkg、regmap_pkg。

5. 各目录文件数量统计

目录.sv 文件数
bootp1
ctrl_bus_evt2
data_gen3
dp_pkt4
ecb2
eth_pkt1
glb_ctrl1
i2c2
lib_apb11
lib_axis18
misc21
packetizer4
ptp10
ref_design10
reg_map1
reset_gen1
roce3
routing_table2
rx_parser4
sensor_tx4
spi2
sys_init2
top1
uart2
合计112

6. 关键结论

  1. 纯 SystemVerilog 实现:nv_hsb_ip 完全由 .sv 源文件构成,无 TCL、XDC 或 README 文档。板级相关配置放在 fpga/<board>/rtl/top/。
  2. 高度模块化:通用 APB/AXIS 库(lib_apb、lib_axis、misc)与面向应用的子系统(packetizer、dp_pkt、rx_parser、ptp、sensor_tx 等)分离清晰。
  3. 跨时钟域广泛:传感器、主机、APB、PTP 多个时钟域之间大量使用 misc/ 中的 CDC 原语(streaming_cdc、data_sync、pulse_sync、reset_sync、各类 FIFO)。
  4. 可配置工作模式:通过外部 HOLOLINK_def.svh 与顶层参数,可支持 sensor-only、host-only 与 bridge 模式;接收数据通路按主机接口数复制(gen_rx_parser),传感器 TX/RX 与外设按 SENSOR_*_IF_INST 宏索引。
  5. 控制面与数据面分离:APB 负责寄存器配置和低速命令,AXI-Stream 负责高速数据;低速控制包通过 rx_ls_parser 闭环返回主机。

更多推荐