FPGA实现以太网MAC层的三种方案对比与选型
在FPGA网络中,以太网MAC(Media Access Control)负责CSMA/CD退避、帧校验(FCS)、与PHY通过MII/RGMII/SGMII接口交互。根据项目对灵活性、开发周期、资源的要求,通常有三种实现路径。本文基于Xilinx/Intel平台做横向对比与选型建议。
一、方案①:使用厂商硬核MAC(Hard MAC / TEMAC)
Xilinx Zynq PS端GEM、Virtex UltraScale+的 Tri-Mode Ethernet MAC (TEMAC) Hard IP,Intel Cyclone/Arria 的 TSE (Triple Speed Ethernet) Hard MAC,均为芯片内硬化逻辑。
特点
• 不占LUT/DSP,功耗低
• 支持10/100/1000M(Tri-mode),自动填充/剥除前导码、FCS
• 通过AXI4-Stream与用户逻辑对接
• 配置靠寄存器堆(MDIO可配PHY)
示例(Xilinx AXI EthernetLite / TEMAC)
// 例化硬核MAC,用户侧只需连AXI-Stream
axi_ethernet_0 u_mac (
.s_axi_tx_tdata (tx_tdata),
.s_axi_tx_tvalid (tx_tvalid),
.s_axi_tx_tready (tx_tready),
.s_axi_rx_tdata (rx_tdata),
.s_axi_rx_tvalid (rx_tvalid),
...
.rgmii_txd (rgmii_txd),
.rgmii_tx_ctl (rgmii_tx_ctl),
.rgmii_txc (rgmii_txc),
...
);
✅ 推荐首选:只要芯片带硬MAC且速率需求≤1G(或部分带10G硬MAC的高端FPGA),应优先用硬核——稳定、省资源、原厂验证过。
二、方案②:使用软核MAC IP(如Xilinx AXI Ethernet Soft MAC / Intel TSE Soft IP)
当FPGA无硬MAC(如Spartan-6、Cyclone IV)或需特殊定制(VLAN Tag、自定义前导码处理),可例化厂商Soft MAC IP。
特点
• 占用逻辑资源(LUT约2k~5k,BRAM若干)
- 功能与硬核相近,支持SGMII/RGMII、统计计数器
• 可配合SGDMA IP做零拷贝DMA
• 配置界面与硬核类似,降低迁移成本
应用代码片段(概念)
// 连接Soft MAC的AXI-Stream与DMA
axi_ethernet_soft u_softmac (
.axi_str_tx (tx_axis),
.axi_str_rx (rx_axis),
.phy_interface(rgmii_pins),
...
);
⚠️ 注意时序:Soft MAC工作在系统时钟(如125MHz),需确保PHY接口时序约束满足(set_input_delay on RGMII RX)。
三、方案③:自写Verilog MAC(全定制)
完全手写MAC状态机,处理前导码检测、SFD识别、FCS(CRC32)计算、背压(PAUSE帧)等。
适合场景
• 极低速或特殊协议(非标准Eth II帧)
• 教学/研究明确要掌控每一bit
- 资源极度受限且不想要任何IP核授权问题
最小接收状态机示意
parameter IDLE=0, PREAMBLE=1, SFD=2, PAYLOAD=3, FCS=4;
reg [2:0] rx_st;
always @(posedge rx_clk) begin
case(rx_st)
IDLE: if(rx_dv && rx_data==8'h55) rx_st<=PREAMBLE;
PREAMBLE: if(rx_dv && rx_data==8'hD5) rx_st<=PAYLOAD; // SFD
PAYLOAD: if(!rx_dv) rx_st<=FCS; // dv下降沿=>帧尾
FCS: /* CRC校验 */ rx_st<=IDLE;
endcase
end
❌ 生产项目慎用:CRC32、jabber处理、半双工(现已少用)极易出bug,且难通过协议一致性测试。
四、横向对比表
维度 硬核MAC (TEMAC/TSE) 软核MAC IP 自写Verilog MAC
逻辑资源 ≈0 (硬核) 2k~8k LUT + BRAM 1k~3k LUT(功能完整则更多)
开发难度 低(Wizard生成) 中(需配DMA/MDIO) 高(需自测CRC/对齐)
功能完整性 ★★★★★ ★★★★☆ ★★☆☆☆(易漏边角)
可定制性 低(受IP限制) 中(部分参数可调) 高
适合速率 ≤1G(部分10G硬核 exist) ≤1G(少数软核能10G但贵资源) 任意(但性能难保证)
典型应用 Zynq PS Eth、Kintex UL+ Spartan-6、Cyclone IV 无硬MAC 科研/非标协议
五、选型决策树
1. FPGA有硬MAC且速率匹配(通常1G及以下,少数10G) → ✅ 用硬核MAC,配合AXI DMA。
2. 无硬MAC或需特殊VLAN/QinQ处理且不想手写 → ✅ 用厂商Soft MAC IP(例Xilinx AXI Ethernet Soft MAC)。
3. 协议非标准或教学目的,且团队有足够验证资源 → ⚠️ 可考虑自写,但强烈建议用开源成熟核(如 eth_mac_10g from opencores经过验证)而非从零造轮。
4. 10G/25G以上:高端Ultrascale+通常带硬10G MAC或可用UltraScale+ CMAC硬核IP——同样优先硬核。
六、常见坑提醒
• RGMII时序:时钟中心对齐(TX Clk 2ns delay, RX Clk 2ns delay via IDELAYCTRL),务必在XDC中set_input_delay约束。
- FCS处理:硬/软MAC默认自动剥/添FCS;自写MAC需自行算CRC32多项式 0x04C11DB7。
• PHY配置:无论哪种MAC,都需通过MDIO配置PHY(自协商使能、RGMII delay mode等),此步不可省。
七、结语
以太网MAC在FPGA中的实现,能用硬核绝不用软核,能买IP绝不自写。硬核MAC提供最佳性价比与可靠性;软核IP填补无硬核芯片的空缺;全定制Verilog仅限特殊需求或教学验证。按此原则选型,可大幅降低网络接口调试风险。





