RGMII时序
前面讲到关于关于ARP的理论知识,该章节主要通过FPGA接收以太网数据,并作数据分析。
首先关于以太网RGMII接收时序如下图所示:
图1 RGMII接收时序图
如上图所示,RGMII采用双沿采样,4根数据线,时钟采用125MHz。这里提一下关于GMII时钟同样是125MHz,8根数据线,采用单沿采样。
如上图所示,接收的信号需要将数据端整体偏移,保证数据在时钟沿的中间,这样保证采样时数据处于稳定状态。移动后的数据如下图所示:
图2 数据偏移后的数据
偏移数据采和双沿采集会用到FPGA里的IDELAYE2原语和IDDR原语,下面就FPGA原语做简单介绍。
FPGA驱动
FPGA解析双沿信号一般使用IDDR转换成单沿信号,根据ug471_7Series_SelectIO文档说明,IDDR分别由三种工作模式,分别为OPPOSITE_EDGE mode、SAME_EDGE mode、SAME_EDGE_PIPELINED mode。时序图如下图所示:
图3 OPPOSITE_EDGE mode模式
图4 SAME_EDGE mode模式
图5 SAME_EDGE_PIPELINED mode模式
本设计以太网采用第一种模式,如下图所示为rgmii接收端FPGA代码驱动:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2024/07/22 16:11:10
// Design Name:
// Module Name: rgmii_2_gmii_rx
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module rgmii_2_gmii_rx(
input idelay_clk ,
input rgmii_rxc , //RGMII接收时钟
(* MARK_DEBUG="true" *)input rgmii_rx_ctl, //RGMII接收数据控制信号
(* MARK_DEBUG="true" *)input [3:0] rgmii_rxd , //RGMII接收数据
output gmii_rx_clk , //GMII接收时钟
(* MARK_DEBUG="true" *)output gmii_rx_dv , //GMII接收数据有效信号
(* MARK_DEBUG="true" *)output [7:0] gmii_rxd //GMII接收数据
);
wire[3:0] r