hsb fpga/ 目录分析

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_egress:PTP 报文的收发接口。
    • 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_TOP:MIPI 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/ 中的代码本质上实现了一个智能传感器网络桥接器:

  1. 输入侧:通过 MIPI CSI、I2S、I2C 等物理接口接收传感器原始数据。
  2. 处理侧:在 FPGA 内完成数据重排、时间戳标记、RoCE/UDP 协议封装。
  3. 输出侧:通过高速以太网直接发送到主机,利用 NVIDIA ConnectX 网卡的 GPUDirect RDMA 能力,绕过 CPU 将数据直接写入 GPU 显存。
  4. 控制侧:通过 APB 寄存器、EEPROM 和低速网络包管理设备配置与固件升级。
  5. 同步侧:通过硬件 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 Pair
    • psn:Packet Sequence Number
    • roce_vaddr / rkey:远程虚拟地址和 RDMA Key
    • roce_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_array42;

    assign bth_hdr_i.dest_qp = {hdr_array47, hdr_array48, hdr_array49};

    assign bth_hdr_i.psn = {hdr_array51, hdr_array52, hdr_array53};

  • 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, // 读取状态 RAM

ROCE_GRANT, // 授权传输

ROCE_CALC, // 计算下一包地址/长度/PSN

ROCE_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 传输 的核心硬件逻辑。

相关推荐
尤老师FPGA2 小时前
GT系列2:GT基础架构(二)
fpga开发
想你依然心痛4 小时前
电源时序控制:多路电源的上电顺序与监控——复位、看门狗
fpga开发
AI科技星7 小时前
精细结构常数 α 全套自洽公式体系(论文定稿版)
开发语言·平面·重构·概率论·量子计算
AI科技星8 小时前
超复数全域分形四维 / 八维超立方体框架下四种基本相互作用的维度正交性与特征作用距离解析推导
网络·人工智能·机器学习·概率论·量子计算·乖乖数学·全域数学
Hello-FPGA9 小时前
GPU Direct DMA RDMA 与FPGA 通讯在Jetson 平台的测试表现
fpga开发
坏孩子的诺亚方舟17 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐17 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐17 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Eloudy18 天前
全文 - An Introduction to LDPC Codes
量子计算