☰
如何快速掌握 Zircon IP协议栈:1G~100G 线速 IPv4/IPv6/UDP 硬件卸载指南
2026/10/23 4:31:12 网站建设 项目流程
  • 硬件开发
  • 网络
  • 嵌入式

【免费下载链接】taxi

AXI, AXI stream, Ethernet, and PCIe components in System Verilog

项目地址:https://gitcode.com/gh_mirrors/taxi7/taxi
点击查看免费下载

Taxi 是 FPGA Ninja 开源的 System Verilog 传输组件库,其中的Zircon IP 协议栈实现了 IPv4、IPv6 与 UDP 的硬件卸载,覆盖 1Gbps 到 100Gbps 线速场景:它在硬件里完成报文头解析(parse)与重组(deparse)、VLAN 标签插拔、头部与载荷校验和计算/校验、接收报文规则匹配与哈希,并在多个应用接口间复用传输。本文将带你拆解 Zircon 的 8 个核心模块、收发流水线设计以及如何用仓库自带的 Cocotb + Verilator 仿真框架验证它。

为什么需要硬件 IP 协议栈?

在高速网卡场景中,CPU 逐包解析 IP 头、算校验和的软处理早已成为瓶颈。把协议处理下沉到 FPGA 硬件(即"硬件卸载")可以:

  • 线速处理:报文以流水方式穿过解析器,不依赖 CPU,100G 端口也能零丢包;
  • 低延迟:报文头在硬件内被直接拆解,应用逻辑只拿到需要的字段或纯载荷;
  • 可复用:基于 AXI4-Stream 标准接口,接任何 MAC 都能用。

Zircon 的定位正是"轻量级线速 IP 栈",它也是下一代开源网卡 Corundum 的重要组成模块,源码位于 src/zircon/rtl/。

Zircon 功能一览

能力说明实现模块
IPv4 / IPv6 解析提取地址、TTL、DSCP、协议号等字段zircon_ip_rx_parse.sv
报文重组根据元数据重建以太网帧、插入 VLANzircon_ip_tx_deparse.sv
长度与校验和硬件计算/校验 IP 头及 UDP 校验和zircon_ip_len_cksum.sv
VLAN 插拔收发方向均支持 VLAN 标签parse / deparse
RSS 哈希接收方向对报文做流哈希(可关)rx_ingress
多应用复用最多 4 路用户接口(N_UI)并发tx_ingress / rx_egress
交付模式可配原始包、剥离 VLAN、简化头、仅载荷应用逻辑按需取用

说明:Zircon 仍处于活跃开发阶段,TCP、RDMA 支持与 Corundum 集成是官方计划中的功能。

整体架构:8 个模块组成收发两条流水线

Zircon 全部由 8 个 System Verilog 模块组成,收(RX)发(TX)方向各 4 级,级与级之间用 AXI4-Stream 接口串成流水线,报文头流与元数据流并行传递:

RX: MAC ──▶ rx_ingress ──▶ rx_parse ──▶ (规则匹配/哈希) ──▶ rx_egress ──▶ 应用逻辑 │ └──▶ len_cksum(长度/校验和旁路计算) TX: 应用逻辑 ──▶ tx_ingress ──▶ tx_buffer ──▶ tx_deparse ──▶ tx_egress ──▶ MAC

各模块职责速览(源码见 src/zircon/rtl/):

  • zircon_ip_rx_ingress:接收 MAC 帧,用异步 FIFO 跨时钟域并做异常帧(坏帧、超长帧)处理;
  • zircon_ip_rx_parse:解析以太网/IP/L4 头部,输出 16 个 64bit 块的结构化元数据;
  • zircon_ip_len_cksum:逐字节并行归约计算报文长度与 16bit 校验和累加值;
  • zircon_ip_rx_egress:把处理后的报文经异步 FIFO 送到应用侧时钟域;
  • zircon_ip_tx_ingress:应用侧提交报文并返回完成(cpl)信号;
  • zircon_ip_tx_buffer:共享片上 RAM(默认 32KB)缓冲报文,保证乱序提交也能按序发送;
  • zircon_ip_tx_deparse:按元数据重建完整报文头并插入 VLAN;
  • zircon_ip_tx_egress:拼装头/载荷、跨时钟域送 MAC 并回传发送完成。

RX 流水线:从 MAC 帧到结构化元数据

1. rx_ingress:跨时钟域的第一道闸门

MAC 数据面通常运行在独立时钟域。zircon_ip_rx_ingress.sv 内部例化了 taxi_axis_async_fifo_adapter 完成跨域缓冲,并提供两组关键参数:

  • MAC_RX_FIFO_DEPTH(默认 32):接收 FIFO 深度;
  • MAC_RX_FIFO_EB_MODE:背压模式下不丢包而是"标记满",把丢包决策权交还上游。

2. rx_parse:一次扫出整张元数据表

解析器 zircon_ip_rx_parse.sv 是本栈最精巧的模块。它把每个报文解析成一个固定的 16×64bit 元数据表,字段布局在源码注释中写得很清楚:

  • 块 00:标志位/载荷长度、包校验和;
  • 块 01:RSS 哈希值、头/载荷偏移;
  • 块 02/03/04:VLAN 标签、以太目的地址、源地址+EtherType;
  • 块 07:协议号、TTL/Hop Limit、DSCP、ECN、IP ID/流量类;
  • 块 08~11:IPv6 目的/源地址(128bit);
  • 块 12~14:L4 端口、TCP flags、wnd/urg、seq/ack(为后续 TCP 支持预留)。

这张"元数据表"在流水线中一路随行,下游模块(含 TX 方向的 deparse)都直接复用它——这是 Zircon 做到低延迟的关键:解析一次,处处可用。

3. len_cksum:校验和硬件卸载

zircon_ip_len_cksum.sv 用多级并行加法树(LEVELS = $clog2(BYTE_LANES))对整包做字节求和,与报文并行流过管线,在帧结束时产出长度与校验和结果,供接收方向验证、发送方向填充。对新手而言,这就是"校验和卸载"的最小硬件实现样本,值得精读。

TX 流水线:元数据驱动的报文重组

发送方向与接收方向形成镜像:应用逻辑只需提交"载荷 + 元数据",硬件负责把完整报文"拼回来"。

  • zircon_ip_tx_ingress.sv:接收应用提交(N_UI默认 4 路),异步 FIFO 跨域并提供m_axis_ui_tx_cpl完成流;
  • zircon_ip_tx_buffer.sv:TX_RAM_SIZE(默认 32768 字节)片上 RAM 做包缓存,先出长度元数据、后搬包数据,保证重组时数据就绪;
  • zircon_ip_tx_deparse.sv:按同一张 16 块元数据表重建以太头、IP 头(支持IPV6_EN开/关)与 VLAN 标签,并自动做大端字节序转换;
  • zircon_ip_tx_egress.sv:头/载荷合并、异步 FIFO 送 MAC 时钟域,s_axis_mac_tx_cpl回传发送完成。

这种"元数据驱动"的设计让重组完全流水化,不需要整包驻留 SRAM 等待头生成,从而支撑 100G 线速。

关键参数速查:如何配置 Zircon

参数默认值位置作用
IPV6_EN1parse / deparse / ingress / egress是否启用 IPv6 支持
HASH_EN1rx_ingress / rx_parse是否计算 RSS 哈希
N_UI4tx_ingress / rx_egress / tx_buffer用户(应用)接口数量
MAC_RX_FIFO_DEPTH32rx_ingressMAC 接收跨域 FIFO 深度
UI_RX_FIFO_DEPTH32rx_egress应用接收跨域 FIFO 深度
UI_TX_FIFO_DEPTH32tx_ingress应用发送跨域 FIFO 深度
TX_RAM_SIZE32768tx_buffer发送包缓存 RAM 大小(字节)
START_OFFSET14len_cksum长度/校验和起始偏移(跳过以太头)

所有模块均基于 Taxi 统一的 taxi_axis_if 接口,数据位宽、KEEP 掩码、ID/DEST/USER 边带字段全参数化,与仓库内其他 AXI Stream 组件即插即用。

动手验证:Cocotb + Verilator 仿真框架

Zircon 自带测试台,每个被测模块一个目录,含 Makefile、Cocotb 用例与 Verilog testbench 三件套(见 src/zircon/tb/):

  • zircon_ip_rx_parse/:解析器用例 test_zircon_ip_rx_parse.py;
  • zircon_ip_tx_deparse/:重组器用例 test_zircon_ip_tx_deparse.py;
  • zircon_ip_len_cksum/:校验和用例 test_zircon_ip_len_cksum.py。

快速上手步骤(需要已安装 Verilator 与 Cocotb):

  1. 把仓库克隆到本地:git clone https://gitcode.com/gh_mirrors/taxi7/taxi;
  2. 进入目标测试目录,例如src/zircon/tb/zircon_ip_rx_parse;
  3. 执行make即可编译并运行仿真,日志会逐用例打印 PASS/FAIL。

提示:仓库根目录 tox.ini 定义了回归测试环境,适合批量跑全部模块。

适用场景与延伸阅读

Zircon 适合以下场景:

  • 在自研 FPGA 网卡的 MAC 之后插入标准 IP/UDP 处理层,做线速转发、过滤与载荷提取;
  • 结合 Corundum 网卡 实现带 RSS 哈希的多队列收发包;
  • 学习高速流式协议处理:解析表、校验和归约树、元数据驱动重组都是教科书级实现。

延伸阅读(仓库内相对路径):

  • 项目总览:README.md
  • 协议栈源码:src/zircon/rtl/
  • 测试台:src/zircon/tb/
  • AXI Stream 接口定义:taxi_axis_if.sv
  • 异步 FIFO(跨域缓冲核心):taxi_axis_async_fifo.sv

掌握 Zircon 的"元数据表 + 流水级"设计思想后,你也能在自己的 FPGA 项目里快速搭出一条 100G 线速的 IPv4/IPv6/UDP 处理通道。

  • 硬件开发
  • 网络
  • 嵌入式

【免费下载链接】taxi

AXI, AXI stream, Ethernet, and PCIe components in System Verilog

项目地址:https://gitcode.com/gh_mirrors/taxi7/taxi
点击查看免费下载
上一篇:终极CoreCycler完全指南:5步掌握CPU单核稳定性测试与精准调校
下一篇:三步革新:在PowerPoint中高效使用LaTeX公式的创新解决方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询