fpga/nv_hsb_ip代码分析
·
`
范围:
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-Stream | RX/TX + 时钟/复位 | 高速传感器数据通路 |
| 主机数据 | i_hif_* / o_hif_* AXI-Stream | RX/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_rsti_hif_clk→o_hif_rsti_ptp_clk→o_ptp_rsti_sif_rx_clk→o_sif_rx_rsti_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_pkg | lib_apb/apb_pkg.sv | APB4 结构体(apb_m2s、apb_s2m) |
regmap_pkg | reg_map/regmap_pkg.sv | 地址译码、寄存器偏移、子模块 ID |
axis_pkg | lib_axis/axis_pkg.sv | 大小端转换与 tkeep 辅助函数 |
ptp_pkg | ptp/ptp_pkg.sv | PTP 常量(Ethertype、消息类型、位宽) |
rx_parser_pkg | rx_parser/rx_parser_pkg.sv | Ethernet/IP/UDP/ARP/Ping/RoCE 头结构体 |
ecb_pkg | ecb/ecb_pkg.sv | 外部控制总线(ECB)操作码 |
i2s_pkg | ref_design/i2s/i2s_pkg.sv | I2S 参考设计常量 |
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:APB4apb_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
- FIFO:
- 依赖:
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-bitSDIO)。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 文件数 |
|---|---|
bootp | 1 |
ctrl_bus_evt | 2 |
data_gen | 3 |
dp_pkt | 4 |
ecb | 2 |
eth_pkt | 1 |
glb_ctrl | 1 |
i2c | 2 |
lib_apb | 11 |
lib_axis | 18 |
misc | 21 |
packetizer | 4 |
ptp | 10 |
ref_design | 10 |
reg_map | 1 |
reset_gen | 1 |
roce | 3 |
routing_table | 2 |
rx_parser | 4 |
sensor_tx | 4 |
spi | 2 |
sys_init | 2 |
top | 1 |
uart | 2 |
| 合计 | 112 |
6. 关键结论
- 纯 SystemVerilog 实现:
nv_hsb_ip完全由.sv源文件构成,无 TCL、XDC 或 README 文档。板级相关配置放在fpga/<board>/rtl/top/。 - 高度模块化:通用 APB/AXIS 库(
lib_apb、lib_axis、misc)与面向应用的子系统(packetizer、dp_pkt、rx_parser、ptp、sensor_tx等)分离清晰。 - 跨时钟域广泛:传感器、主机、APB、PTP 多个时钟域之间大量使用
misc/中的 CDC 原语(streaming_cdc、data_sync、pulse_sync、reset_sync、各类 FIFO)。 - 可配置工作模式:通过外部
HOLOLINK_def.svh与顶层参数,可支持 sensor-only、host-only 与 bridge 模式;接收数据通路按主机接口数复制(gen_rx_parser),传感器 TX/RX 与外设按SENSOR_*_IF_INST宏索引。 - 控制面与数据面分离:APB 负责寄存器配置和低速命令,AXI-Stream 负责高速数据;低速控制包通过
rx_ls_parser闭环返回主机。
更多推荐
所有评论(0)