万兆以太网MAC_RX模块设计:XGMII到AXI-Stream转换的EOF对齐场景全解析
在高速网络设备开发中,万兆以太网MAC层设计一直是FPGA工程师面临的核心挑战之一。特别是接收端MAC_RX模块,需要将XGMII接口的64位并行数据流转换为AXI-Stream格式,同时处理各种复杂的数据对齐场景。本文将深入探讨其中最关键的EOF(End of Frame)对齐问题,通过8种典型场景的Verilog实现与仿真测试,为工程师提供可直接复用的解决方案。
1. XGMII到AXI-Stream转换的核心挑战
万兆以太网MAC_RX模块的核心任务是将XGMII接口的物理层数据转换为上层可处理的AXI-Stream格式。这个过程中,数据对齐问题尤为突出,主要体现在三个维度:
- 起始位(SOF)对齐 :帧起始字符0xFB可能出现在64位数据的字节0或字节4位置(由于XGMII的DDR特性)
- 结束位(EOF)对齐 :帧结束字符0xFD可能出现在64位数据的任意字节位置(共8种可能)
- KEEP信号生成 :需要根据SOF和EOF位置动态计算AXI-Stream的tkeep信号,标识有效数据字节
传统解决方案通常采用状态机逐个字节检测的方式,但在万兆速率下(156.25MHz时钟),这种方法会导致时序紧张。我们创新性地采用并行比较+位置编码技术,在单周期内完成所有对齐判断。
2. EOF对齐的8种场景及决策逻辑
2.1 基础定义与参数
首先定义关键控制字符和接口信号:
localparam
P_IDLE = 8'h07, // 空闲字符
P_SOF = 8'hFB, // 帧起始
P_EOF = 8'hFD, // 帧结束
P_ERROR = 8'hFE; // 错误指示
input [63:0] i_xgmii_rxd; // XGMII接收数据
input [7:0] i_xgmii_rxc; // XGMII控制字符标识(1表示控制字符)
2.2 EOF位置检测电路
采用并行比较技术同时检测8个字节位置的EOF:
// EOF位置检测
wire [7:0] eof_pos_mask = {
(i_xgmii_rxd[63:56] == P_EOF) & i_xgmii_rxc[7],
(i_xgmii_rxd[55:48] == P_EOF) & i_xgmii_rxc[6],
(i_xgmii_rxd[47:40] == P_EOF) & i_xgmii_rxc[5],
(i_xgmii_rxd[39:32] == P_EOF) & i_xgmii_rxc[4],
(i_xgmii_rxd[31:24] == P_EOF) & i_xgmii_rxc[3],
(i_xgmii_rxd[23:16] == P_EOF) & i_xgmii_rxc[2],
(i_xgmii_rxd[15:8] == P_EOF) & i_xgmii_rxc[1],
(i_xgmii_rxd[7:0] == P_EOF) & i_xgmii_rxc[0]
};
// 优先级编码器生成EOF位置(0-7)
wire [2


399

被折叠的 条评论
为什么被折叠?



