
1.主要结构根据对 fpga/ 目录下代码的深入分析该目录包含的是 Holoscan Sensor Bridge (HSB) 的 FPGA 核心 IP 及参考设计其主要功能可以概括为将各类传感器数据通过 FPGA 采集、封装为网络数据包并以极低延迟通过以太网RoCE/UDP传输到主机 GPU 内存同时提供精确时间同步PTP和完整的控制通路。以下是代码的主要功能模块分析1.1. 核心 IP (nv_hsb_ip/) — Holosink 桥接逻辑这是 NVIDIA 设计的通用 FPGA IP 核不依赖特定厂商是整个项目的核心。顶层集成 (top/HOLOLINK_top.sv)系统的顶层模块整合所有子系统。定义了清晰的接口边界传感器接口 (Sensor IF)、主机网络接口 (Host IF)、外设控制接口 (SPI/I2C/UART/GPIO)、PTP 时钟接口。通过 APB 总线互联 (apb_intc_top) 管理所有寄存器配置。数据包接收与解析 (rx_parser/)rx_parser.sv解析从主机接收到的以太网包。支持识别多种协议UDP 控制包 (ECB)、RoCE 数据包 (BTH 头解析)、ARP、ICMP (Ping)、PTP 同步消息、传感器回传数据 (STX)。将解析后的控制流导向对应的低速控制通路数据流则转发给传感器发送接口。传感器数据包化 (packetizer/)packetizer_top.sv负责将原始传感器数据如 MIPI CSI 输出的视频流进行重排序、虚拟通道 (Virtual Port) 分配、打包。支持动态虚拟通道 (DYNAMIC_VP)、混合数据包大小 (MIXED_VP_SIZE)可将多路传感器数据复用到一个数据流中。生成帧起始 (SOF) 信号用于后续打时间戳。数据平面网络封装 (dp_pkt/)dp_pkt_top.sv这是数据通路的核心网络封包模块。功能极其关键它将传感器数据封装成 RoCE v2 (RDMA over Converged Ethernet) 或 UDP 数据包。自动生成完整的网络协议头以太网头 (Ethernet)、IPv4 头 (含校验和计算)、UDP 头、RoCE BTH 头、以及可选的 CoE (Camera over Ethernet) 头。支持 Write Immediate 操作使 Mellanox/NVIDIA ConnectX 网卡能直接将数据写入 GPU 显存。内含状态机 (ROCE_IDLE - ROCE_LOAD_STS - ROCE_GRANT 等) 管理缓冲区地址计算、包序号 (PSN)、CRC 校验。以太网发送仲裁 (eth_pkt/)eth_pkt.sv一个多端口仲裁器将多个数据源数据平面 Data Plane、PTP 包、低速控制包 ARP/ICMP、Bridge 包、Pause 帧按优先级合并到单个以太网 MAC 发送接口。使用 Skid Buffer 优化高速数据路径时序。精确时间同步 (ptp/)ptp_top.sv完整的 IEEE 1588 / gPTP (IEEE 802.1AS) 硬件协议栈实现。包含子模块ptp_ingress / ptp_egressPTP 报文的收发接口。ptp_parser解析 Sync、Follow_Up、Delay_Resp、Pdelay 等消息类型。ptp_timer维护硬件时钟秒 纳秒 分数纳秒。ptp_sync / ptp_dly计算时钟偏移 (offset) 和链路延迟 (delay)。ptp_calc / dpll数字锁相环根据 PTP 计算结果调整本地时钟频率。输出 PPS (Pulse Per Second) 信号和精确时间戳用于多传感器同步。传感器外设接口 (sensors/)i2s/I2S 音频接口控制器支持 8K~192KHz 采样率、多种位深和数据格式提供 AXI-Stream 主/从接口。imu/IMU惯性测量单元接口通过 I2C 读取数据并为每个采样附加 64位 PTP 时间戳。系统与外设控制sys_init/上电初始化序列从 EEPROM 读取 MAC 地址、IP 地址、板卡序列号等。glb_ctrl/全局控制寄存器版本号、GPIO 方向、软件复位。uart/ / lib_apb/ / lib_axis/UART 控制器、APB 总线基础设施、AXI-Stream 工具库FIFO、Gearbox、Arbiter 等。1.2. 厂商特定参考设计Microchip PolarFire (microchip/mfp200-eth-sensor-bridge/)针对 Microchip Holoscan Sensor Bridge 评估板IMX477 相机。PF_ESB_top.v顶层框图实例化包含IMX477_IF_TOPMIPI CSI-2 接收接口将相机数据转为 AXI-Stream。MAC_Hololink集成 HSB IP 核和以太网 MAC/PHY (SGMII)。支持双路相机输入 (CAM1/CAM2)。Lattice CertusPro-NX (lattice/cpnx100-eth-sensor-bridge/)针对 Lattice Holoscan Sensor Bridge 评估板IMX274 相机。包含 cpnx100主 FPGA和 clnx17辅助 FPGA/桥接芯片两个子目录。包含 MIPI CSI-2 接收、LVDS 发送、时钟复位管理、SPI 外设控制等 RTL。提供基于 Lattice Radiant 的完整编译脚本 (build.sh)。1.3. 配置脚本 (script/)eeprom/eeprom_utility.py用于烧录/读取板载 EEPROM 的工具存储 MAC 地址、IP 配置、板卡版本等信息。1.4. 总结fpga/ 中的代码本质上实现了一个智能传感器网络桥接器输入侧通过 MIPI CSI、I2S、I2C 等物理接口接收传感器原始数据。处理侧在 FPGA 内完成数据重排、时间戳标记、RoCE/UDP 协议封装。输出侧通过高速以太网直接发送到主机利用 NVIDIA ConnectX 网卡的 GPUDirect RDMA 能力绕过 CPU 将数据直接写入 GPU 显存。控制侧通过 APB 寄存器、EEPROM 和低速网络包管理设备配置与固件升级。同步侧通过硬件 PTP/gPTP 协议栈实现亚微秒级的时间同步保证多传感器数据的时间一致性。这是 Holoscan 平台实现零拷贝 (Zero-Copy)、低延迟传感器到 GPU 数据传输的关键硬件基础。2. 关于 RoCE 协议的实现RoCE 协议的封装和解析是在这些 Verilog 代码中实现的。以下是具体的代码证据2.1. RoCE 数据包发送封装 (dp_pkt_top.sv)在 fpga/nv_hsb_ip/dp_pkt/dp_pkt_top.sv 中FPGA 将传感器数据封装为 RoCE v2 数据包RoCE 头生成代码中定义了完整的 hdr_roce 信号包含以太网头 (14B)IPv4 头 (20B含动态校验和计算)UDP 头 (8B)RoCE BTH 头 (12B)包括 opcode、dest_qp、psn 等字段Write Immediate 支持assign opcode (pkt_is_imm || is_data_wr_imm) ? 8’h2B : 8’h2A;8’h2A UC SEND ONLY普通 RoCE 写操作8’h2B UC SEND ONLY WITH IMMEDIATE带 Immediate 的写操作使 ConnectX 网卡可以直接将数据写入 GPU 显存地址与序列号管理roce_dest_qp目标 Queue PairpsnPacket Sequence Numberroce_vaddr / rkey远程虚拟地址和 RDMA Keyroce_buf_len / roce_buf_start管理 GPU 环形缓冲区地址2.2. RoCE 数据包接收解析 (rx_parser.sv)在 fpga/nv_hsb_ip/rx_parser/rx_parser.sv 中FPGA 解析从主机接收到的 RoCE 包BTH 头解析assign bth_hdr_i.opcode hdr_array[42];assign bth_hdr_i.dest_qp {hdr_array[47], hdr_array[48], hdr_array[49]};assign bth_hdr_i.psn {hdr_array[51], hdr_array[52], hdr_array[53]};Opcode 匹配检查是否为有效的 BTH 发送操作assign bth_tx_opcode_match (bth_hdr_i.opcode inside {BTH_UC_SEND_LAST, BTH_UC_SEND_MIDDLE, BTH_UC_SEND_FIRST, BTH_UC_SEND_ONLY});Dest QP 匹配验证目标 QP 地址将 RoCE 控制包路由到正确的处理通路assign roce_ecb_dest_qp_match (bth_hdr_i.dest_qp cfg_roce_ecb_dest_qp);2.3. 状态机管理 RoCE 传输流程 (dp_pkt_top.sv)dp_pkt_top.sv 中有一个显式的 RoCE 状态机管理整个 RDMA 传输流程typedef enum logic [3:0] {ROCE_IDLE, // 等待传感器数据请求ROCE_LOAD_STS, // 读取状态 RAMROCE_GRANT, // 授权传输ROCE_CALC, // 计算下一包地址/长度/PSNROCE_STORE, // 存储状态ROCE_WR_IMM, // 写 Immediate 数据ROCE_HDR_WAIT // 等待头部发送完成} roce_fsm_t;2.4. 总结这些 Verilog 代码完整实现了 RoCE 协议栈中 FPGA 侧所需的功能发送侧将传感器数据打包成 RoCE 报文Eth IP UDP BTH支持 RDMA Write Immediate直接写入 GPU 显存。接收侧解析 RoCE BTH 头提取 QP、PSN、Opcode实现对主机 RDMA 控制命令的接收。这正是 Holoscan Sensor Bridge 实现 零拷贝 (Zero-Copy)、绕过 CPU 的低延迟传感器到 GPU 传输 的核心硬件逻辑。