CMAC USPLUS (CAUI-4) 使用方式分析
in hsb fpga/pynq/基于FPGA_top.sv、eth_100gb_top.sv、rst.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 经 IBUFDSBUFG自由运行时钟用于 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_rst→sys_reset_0)在FPGA_top中使用init_clk域的状态机监测gt_powergoodout4-bit等待所有 4 个 lane 的 Power Good 都置位后生成rst_all。rst_all作为i_cmac_rst输入eth_100gb_top连接到 CMAC 的sys_reset_0。作用复位 GT 收发器和 CMAC 核心需在时钟稳定期间保持。(2) 系统级复位 (sys_rst与cmac_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_outGT 参考时钟输出可用于监测。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 强制重新同步/对齐平时为 0ctl_tx_0_ctl_enableInputTX 路径使能需在对端就绪后才置 1ctl_tx_0_ctl_tx_send_rfiInput发送 Remote Fault Indication (RFI)未对齐前应置 1ctl_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 2b00, WAIT 2b01, RX_ALIGNED 2b10 } state_rx_init;启动流程IDLE 状态复位后置位ctl_rx_enable 1使能接收路径。置位ctl_tx_send_rfi 1向链路对端发送 Remote Fault表明本端尚未准备好接收数据。WAIT 状态持续等待stat_rx_aligned 1本端 RX 完成 Lane 对齐可以正确接收数据。一旦对齐撤销ctl_tx_send_rfi 0不再发送 Remote Fault。置位ctl_tx_enable 1使能发送路径开始正常发送以太网帧。进入RX_ALIGNED状态。RX_ALIGNED 状态正常工作状态数据可以正常收发。PG203 原文要求CTL_TX_ENABLE不应在对端 RX 对齐就绪前置 1否则会导致数据丢失。代码中的 RFI 机制正是为了避免这一问题。8. 未使用的功能代码中明确将以下端口置为无效Tie-off表明未使用这些高级功能core_drp_*未使用动态重配置端口 (DRP)。gt_loopback_in_0接12b0未启用近端/远端环回。AXI4-Lite 配置接口未使用寄存器映射方式配置 CMAC所有控制直接通过端口信号由状态机驱动。9. 与上层 HOLOLINK 逻辑的集成数据平面usr_clk同时驱动 CMAC AXI4-Stream 接口和 HOLOLINK 的 Sensor/Host 接口确保数据路径处于同一时钟域简化时序。PTP 支持代码从 CMAC 获取ptp_clk100 MHz并通过streaming_cdc将 PTP 时间戳ptp_sec,ptp_nsec同步到usr_clk域供数据帧打时间戳使用。ILA 调试在usr_clk域实现了多个 ILAIntegrated 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_enable→ctl_tx_send_rfi→ 等待stat_rx_aligned→ctl_tx_enable的时序保证链路双方可靠建立。数据通路CMAC 的 AXI4-Stream 直接对接 HOLOLINK 协议栈形成完整的 100GbE 传感器桥接方案。