CMAC USPLUS (CAUI-4) 使用方式分析

📅 2026/7/19 19:38:13 👁️ 阅读次数 📝 编程学习
CMAC USPLUS (CAUI-4) 使用方式分析

in hsb fpga/pynq/

基于FPGA_top.sveth_100gb_top.svrst.sv三个 SystemVerilog 文件,并结合Xilinx PG203 (Integrated 100G Ethernet Subsystem v3.0)文档的总结。


1. 整体架构

该设计采用Xilinx UltraScale+ 集成 100G 以太网子系统 (CMAC USPLUS)作为 100GbE 主机接口,配置为CAUI-4 模式(通过 4 路 GT 收发器实现,每路 25.78125 Gbps)。

层次结构如下:

FPGA_top.sv (顶层) ├── eth_100gb_top.sv (CMAC/GT 封装与初始化) │ └── design_1 (Vivado Block Design 生成的 CMAC + GT Wrapper) ├── rst.sv (复位控制) └── HOLOLINK_top.sv (业务逻辑)

2. 时钟结构

根据 PG203 和代码,时钟连接如下:

信号来源/去向说明
ETH_REFCLK_P/N外部 156.25 MHz 差分时钟输入到gt_ref_clk_0_clk_p/n,作为 GT 的参考时钟
init_clk板载 100 MHz 经 IBUFDS+BUFG自由运行时钟,用于 GT 复位状态机 (init_clk_0)
o_usr_clk(gt_txusrclk2_0)CMAC/GT 输出322 MHz的用户数据时钟,驱动所有 AXI4-Stream 接口和 HOLOLINK 数据平面
o_aclk(clk_out1_0)CMAC 内部 Clocking Wizard50 MHz,作为 APB 控制平面时钟
o_ptp_clk(clk_out2_0)CMAC 内部 Clocking Wizard100 MHz,用于 PTP/IEEE 1588 时间戳

关键点usr_clk是数据平面的唯一主时钟,HOLOLINK 的传感器接口和主机接口均工作在该时钟域下。


3. 复位策略

代码实现了两级复位,严格遵循 PG203 的复位要求:

(1) CMAC/GT 系统复位 (i_cmac_rstsys_reset_0)

  • FPGA_top中,使用init_clk域的状态机监测gt_powergoodout(4-bit,等待所有 4 个 lane 的 Power Good 都置位后),生成rst_all
  • rst_all作为i_cmac_rst输入eth_100gb_top,连接到 CMAC 的sys_reset_0
  • 作用:复位 GT 收发器和 CMAC 核心,需在时钟稳定期间保持。

(2) 系统级复位 (sys_rstcmac_sys_rst)

  • rst.sv模块区分了:
    • o_cmac_sys_rst:由软件复位 (i_sw_rst) 和 PLL 锁定状态控制,用于 CMAC。
    • o_sys_rst:不仅依赖 PLL 锁定,还依赖mac_aligned(即stat_rx_aligned经跨时钟域同步到 APB 时钟域)。这意味着整个系统必须在 CMAC 接收端完成 Lane 对齐后,才会退出复位

4. GT 串行接口 (CAUI-4)

// 4 路差分 RX/TX,对应 CAUI-4 的 4 个 SerDes lane input [3:0] gt_serial_port_0_grx_p, gt_serial_port_0_grx_n; output [3:0] gt_serial_port_0_gtx_p, gt_serial_port_0_gtx_n;
  • 代码中实例化了 4 路 GT 通道,与 CAUI-4 模式匹配。
  • 输出信号:
    • gt_powergoodout[3:0]:各路 GT 电源良好指示。
    • gt_ref_clk_out:GT 参考时钟输出(可用于监测)。

5. AXI4-Stream 用户数据接口

CMAC 配置为AXI4-Stream 用户接口(非 LBUS)。数据宽度为512-bit,在usr_clk域工作。

TX 方向 (HOLOLINK → CMAC → 网线)

axis_tx_0_tdata [511:0] axis_tx_0_tkeep [63:0] axis_tx_0_tlast axis_tx_0_tuser axis_tx_0_tvalid axis_tx_0_tready (反压信号)

RX 方向 (网线 → CMAC → HOLOLINK)

axis_rx_0_tdata [511:0] axis_rx_0_tkeep [63:0] axis_rx_0_tlast axis_rx_0_tuser axis_rx_0_tvalid

这些信号在FPGA_top中直接连接到HOLOLINK_top的主机接口(Host IF),实现了 HOLOLINK 协议栈与 100GbE 物理层的对接。


6. CMAC 控制/状态信号

代码中使用了以下 PG203 定义的关键控制/状态端口:

信号名方向说明
ctl_rx_0_ctl_enableInputRX 路径使能,必须置 1 才能正常接收
ctl_rx_0_ctl_rx_force_resyncInputRX 强制重新同步/对齐,平时为 0
ctl_tx_0_ctl_enableInputTX 路径使能,需在对端就绪后才置 1
ctl_tx_0_ctl_tx_send_rfiInput发送 Remote Fault Indication (RFI),未对齐前应置 1
ctl_tx_0_ctl_tx_send_lfiInput发送 Local Fault Indication (LFI)
ctl_tx_0_ctl_tx_send_idleInput发送 Idle 码
stat_rx_alignedOutput关键状态:所有 PCS Lane 已完成对齐/解偏斜
usr_tx_reset_0(o_usr_rst)OutputCMAC 输出的 TX 用户逻辑复位

7. Core Bring Up Sequence (核心启动状态机)

这是代码中最关键的 CMAC 使用部分。eth_100gb_top.sv中实现了一个 3 状态 FSM,完全遵循 PG203 推荐的 “Without AXI4-Lite Interface” 启动序列

typedef enum logic [1:0] { IDLE = 2'b00, WAIT = 2'b01, RX_ALIGNED = 2'b10 } state_rx_init;

启动流程:

  1. IDLE 状态(复位后):

    • 置位ctl_rx_enable = 1(使能接收路径)。
    • 置位ctl_tx_send_rfi = 1(向链路对端发送 Remote Fault,表明本端尚未准备好接收数据)。
  2. WAIT 状态

    • 持续等待stat_rx_aligned == 1(本端 RX 完成 Lane 对齐,可以正确接收数据)。
    • 一旦对齐
      • 撤销ctl_tx_send_rfi = 0(不再发送 Remote Fault)。
      • 置位ctl_tx_enable = 1(使能发送路径,开始正常发送以太网帧)。
      • 进入RX_ALIGNED状态。
  3. RX_ALIGNED 状态

    • 正常工作状态,数据可以正常收发。

PG203 原文要求CTL_TX_ENABLE不应在对端 RX 对齐就绪前置 1,否则会导致数据丢失。代码中的 RFI 机制正是为了避免这一问题。


8. 未使用的功能

代码中明确将以下端口置为无效(Tie-off),表明未使用这些高级功能:

  • core_drp_*:未使用动态重配置端口 (DRP)。
  • gt_loopback_in_0:接12'b0,未启用近端/远端环回。
  • AXI4-Lite 配置接口:未使用寄存器映射方式配置 CMAC,所有控制直接通过端口信号由状态机驱动。

9. 与上层 HOLOLINK 逻辑的集成

  • 数据平面usr_clk同时驱动 CMAC AXI4-Stream 接口和 HOLOLINK 的 Sensor/Host 接口,确保数据路径处于同一时钟域,简化时序。
  • PTP 支持:代码从 CMAC 获取ptp_clk(100 MHz),并通过streaming_cdc将 PTP 时间戳(ptp_sec,ptp_nsec)同步到usr_clk域,供数据帧打时间戳使用。
  • ILA 调试:在usr_clk域实现了多个 ILA(Integrated Logic Analyzer),用于抓取 PTP 时间戳、帧计数器、Sensor 接口数据等信号。

总结

该代码以一种标准且规范的方式使用 CMAC USPLUS IP:

  • 模式:CAUI-4 (4x25.78125G),AXI4-Stream 512-bit 接口。
  • 时钟:156.25 MHz 外部参考时钟输入,生成 ~322 MHz 用户数据时钟。
  • 复位:分层复位策略,确保 GT 和 CMAC 在时钟稳定后释放,且系统级复位依赖 RX 对齐完成。
  • 启动:严格遵循 PG203 推荐的 Bring Up Sequence,通过状态机管理ctl_rx_enablectl_tx_send_rfi→ 等待stat_rx_alignedctl_tx_enable的时序,保证链路双方可靠建立。
  • 数据通路:CMAC 的 AXI4-Stream 直接对接 HOLOLINK 协议栈,形成完整的 100GbE 传感器桥接方案。