RGMII接口及时序详解

一、RGMII接口介绍

以太网的通信离不开物理层 PHY 芯片的支持,以太网 MAC 和 PHY 之间有一个接口,常用的接口有MII、 RMII、 GMII、 RGMII 等。

RGMII接口如下:

信号名称位宽方向描述
TXC1OUT发送时钟信号,10/100/1000Mbps 模式频率分别为 2.5M/25M/125MHz
TD4OUT发送数据信号
TX_CTL1OUT发送数据控制信号,上升沿时为数据有效信号,下降沿时为数据有效信号/错误信号
RXC1IN接收时钟信号,10/100/1000Mbps 模式频率分别为 2.5M/25M/125MHz
RD4IN接收数据信号
RX_CTL1IN接收控制信号,上升沿时为数据有效信号,下降沿时为数据有效信号/错误信号

在这里插入图片描述

RGMII 是 GMII 的简化版,数据位宽为 4 位

  • 在 1000Mbps 传输速率下,时钟频率为 125Mhz,在时钟的上下沿同时采样数据
  • 在 100Mbps传输速率下,时钟频率为25MHz,为单个时钟沿采样
  • 在 10Mbps传输速率下,时钟频率为2.5MHz,为单个时钟沿采样

二、MAC和PHY

1.关系

MAC(介质访问控制)和PHY(物理层)是网络通信中两个互补的组件,它们共同工作以实现数据在网络中的传输。它们在OSI模型中分别对应不同的层次:

  • MAC层
    • MAC层位于OSI模型的数据链路层的上层,负责控制对共享介质(如以太网)的访问。
    • 它处理帧的封装和拆封,包括添加MAC头部和尾部,以及处理错误检测和控制机制。
    • MAC层还负责多路访问和冲突解决,例如在以太网中通过CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议。
    • MAC地址,也称为物理地址或硬件地址,是网络设备在网络中的唯一标识,由MAC层管理。
  • PHY层
    • PHY层位于OSI模型的数据链路层的下层,直接与传输媒介(如电缆、光纤、无线电波等)交互。
    • 它负责通过物理媒介传输和接收比特流,包括信号编码、调制解调、信号放大和时钟恢复。
    • PHY层定义了电气特性,如电压水平、阻抗匹配、数据速率、最大传输距离等。
    • 它还可能包括介质相关接口(MDI)和物理编码子层(PCS),用于进一步处理数据以适应特定的传输媒介。

在这里插入图片描述

2.MAC和PHY的交互

  • MAC层生成要传输的数据帧,并将它们发送到PHY层。
  • PHY层接收来自MAC层的帧,将其转换为适合在物理媒介上传输的信号,并发送出去。
  • 当PHY层接收到来自物理媒介的信号时,它将信号转换回帧,并将其发送到MAC层。
  • PHY层还负责与链路伙伴(如交换机、路由器或另一台主机)的PHY层进行协商,以确定最佳的传输参数,如速率、双工模式等。

3.MAC为什么要配置PHY

MAC(Media Access Control,介质访问控制)是网络接口的一部分,负责管理和控制数据在物理媒介上的传输。PHY(Physical Layer,物理层)是网络接口的另一个重要组成部分,它负责通过物理媒介(如电缆、光纤等)传输和接收实际的比特流。MAC和PHY共同工作以实现网络通信。

MAC需要配置PHY的原因包括:

  1. 物理层参数:不同的物理媒介有不同的特性和要求,例如信号速率、双工模式(全双工或半双工)、流控制等。配置PHY可以确保数据传输符合所使用的物理媒介的特性。
  2. 接口标准化:配置PHY有助于确保网络设备遵循特定的标准(如以太网、Wi-Fi等),这些标准定义了物理层的操作方式。
  3. 自动协商:许多网络设备使用自动协商来确定最佳的传输速率和模式。通过配置PHY,可以实现速率和双工模式的自动协商。
  4. 信号完整性:PHY负责信号的生成和接收,配置PHY可以优化信号的完整性,减少噪声和干扰,提高数据传输的可靠性。
  5. 错误检测和纠正:某些PHY支持错误检测和纠正机制,配置PHY可以启用这些机制,从而提高数据传输的准确性。
  6. 电源管理:PHY可能包含电源管理功能,如节能模式,配置PHY可以优化设备的能耗。
  7. 远程监控:配置PHY还可以允许远程监控物理层的状态,包括链路状态、速率、错误统计等。
  8. 兼容性:不同的网络设备可能使用不同的PHY芯片或技术,配置PHY确保MAC层与PHY层兼容,从而实现无缝通信。
  9. 高级功能:一些高级网络功能,如优先级队列、虚拟局域网(VLAN)标记等,可能需要PHY支持特定的硬件功能。
  10. 故障诊断:配置PHY有助于故障诊断,因为它可以提供链路状态和错误信息,帮助网络管理员识别和解决问题。

总之,MAC配置PHY是为了确保网络接口能够在物理层上正确、高效、可靠地传输数据,并与网络中的其他设备兼容。

4.如何配置

(1)原理

MDIO(Management Data Input/Output,管理数据输入输出) 是一种简单的双线串行接口。该总线由 IEEE 通过以太网标准 IEEE 802.3 的若干条款加以定义。可收集的信息包括链接状态、传输速度与选择、断电、低功率休眠状态、TX\RX 模式选择、自动协商控制、环回模式控制等。

其包含 2 个引脚:MDC 和 MDIO。MDC 管理数据的时钟输入,最高速率 8.3 MHz;MDIO 管理数据的输入输出,数据是与 MDC 时钟同步的。

在这里插入图片描述

通过FPGA向PHY操作的数据格式如下:

PreambleStartOpcodePHY addressRegister addressTurn-aroundRegister dataIdle
32bit 101Read:10 Write:015bit5bitRead:z0 Write:1016 bitz
  • Preamble:32bits的前导码,全1。
  • Start:2bit的开始位
  • PHY adress:5bits的PHY地址,
  • Register adress:5bits的寄存器地址
  • Turn-around:2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。
  • Register data:16bits数据,在读命令中,PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中,在写命令中,MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。
  • Idle:空闲状态,此时MDIO无源驱动,处高阻状态。

下面给出读写两种情况下的MDIO和MDC的时序图:

①写操作

在这里插入图片描述

②读操作

在这里插入图片描述

时序图中与手册规定的不一样,并没有采用32bit的前导码。

对寄存器进行配置或读取时,需要按照上述的数据格式,通过MDIO一比特一比特的传输到PHY中。

(2)PHY地址的确定

要确定PHY芯片的地址,需要查看PHY芯片手册以及板卡原理图

①PHY芯片手册决定了控制信号和PHY地址的对应关系

②板卡原理图决定了PHY地址的控制信号所连接的对象

接下来以手上的一个325t的办卡进行举例:

先看一下PHY芯片手册:

在这里插入图片描述

可以看到各个控制信号对应的管脚信息,并且说明了CONFIG[0]决定了PHY地址的低3位,CONFIG[1]决定了PHY地址的高两位。

查看板卡原理图:

在这里插入图片描述

我们可以发现,CONFIG[0]连接着PHYA_LED_RX,CONFIG[1]连接着PHYA_LED_LINK1000。我们查看88E1111的手册,如下:

在这里插入图片描述

可知LED_RX对应010,LED_LINK1000对应100,因此CONFIG[0]对应的PHY地址低3位为010,CONFIG[1]对应的PHY地址高2位为00,因此PHY地址为00010。

(3)寄存器地址及配置数据

我们以控制寄存器0举例,为了配置千百兆模式需要对控制寄存器0的bit6和bit13进行配置。

在这里插入图片描述

因此寄存器地址为0,将寄存器数据的bit13、bit6按照需要的模式进行配置,其他功能可对对应bit配置相应数据。

三、88E1111中PHY的时序

1.接收端时序

接收端信号时序如下图所示:

在这里插入图片描述

一般的PHY芯片包含两种RGMII接收端口时序模式,分别为延时模式和非延时模式,通过控制寄存器20bit7实现,当其为1时是延时模式为0时是非延时模式默认情况下是非延时模式

在这里插入图片描述

(1)非延时模式

在这里插入图片描述

非延时模式下,接收时钟与接收数据信号边沿对其。

(2)延时模式

在这里插入图片描述

延时模式下时钟信号RX_CLK的边沿处于数据和控制信号的中心位置,此时的RX_CLK相对于数据和控制信号有2ns的延迟(2ns是因为在1000M速率下时钟为125MHz,一个时钟周期为8ns,一个数据的有效时间为4ns)

2.发送端时序

发送端信号时序如下图所示:

在这里插入图片描述

一般的PHY芯片包含两种RGMII发送端口时序模式,分别为延时模式和非延时模式,通过控制寄存器20bit1实现,当其为1时是延时模式为0时是非延时模式默认情况下是非延时模式

在这里插入图片描述

(1)非延时模式

在这里插入图片描述

非延时模式下时序图如上图所示,可知在此模式下时钟信号TX_CLK的边沿处于数据和控制信号的中心位置,此时的TX_CLK相对于数据和控制信号有2ns的延迟(2ns是因为在1000M速率下时钟为125MHz,一个时钟周期为8ns,一个数据的有效时间为4ns)。

(2)延时模式

在这里插入图片描述

延时模式下,要求发送时钟和数据及控制信号的边沿对齐。

四、Xinlinx中处理RGMII接口的数据

1.IDDR

(1)作用及接口说明

IDDR(Input Double Data Rate)原语是Xilinx FPGA中用于处理双数据速率信号的一种原语,它将输入的双被速率数据转换为单倍速率信号。

信号名称位宽方向描述
CE1IN时钟使能信号
C1IN时钟信号
S1IN置位信号
R1IN复位信号
D1IN输入的双倍速率的数据,即D在时钟的上升沿和下降沿都会发生切换,一个时钟周期发送2bit数据
Q11OUT单倍速率的输出数据
Q21OUT单倍速率的输出数据
(2)三种工作模式

它支持三种不同的工作模式,这些模式决定了IDDR如何对输入数据进行采样以及输出数据的生成方式:

  • OPPOSITE_EDGE模式:在这种模式下,IDDR将在时钟的上升沿和下降沿都进行数据采样。这意味着每个时钟周期的上升沿和下降沿都会有数据变化,实现双沿传输。输出Q1在时钟的每个上升沿提供在该上升沿采集到的数据,而Q2在时钟的每个下降沿提供在该下降沿采集到的数据。

    在这里插入图片描述

  • SAME_EDGE模式:此模式与OPPOSITE_EDGE模式的输入信号时序一致,但区别在于Q1和Q2都只在时钟的上升沿输出数据。在第一个上升沿,Q1输出在该上升沿采集到的数据,而在随后的下降沿,Q2采集数据,并在第二个上升沿,Q1输出第二个上升沿采集的数据,Q2输出第一个下降沿采集的数据。

    在这里插入图片描述

  • SAME_EDGE_PIPELINED模式:这是最常用的数据采集模式。与SAME_EDGE模式类似,但Q1的输出数据会延迟一个时钟周期,使得Q1和Q2的第一个数据至最后一个数据进行对齐,这样方便后续逻辑的操作,但代价是Q1的输出数据会有一个时钟周期的延迟

    在这里插入图片描述

(3)数据处理过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.ODDR

(1)作用及接口说明

它的功能是将单倍速率的数据转化成双倍速率的数据。

信号名称位宽方向描述
C1IN时钟信号
CE1IN时钟使能信号
S1IN置位信号
R1IN复位信号
D11IN单倍速率的输入数据
D21IN单倍速率的输入数据
Q1OUT输出的双倍速率的数据,即Q在时钟的上升沿和下降沿都会发生切换
(2)工作模式

ODDR支持两种不同的工作模式:

  • OPPOSITE_EDGE模式:在此模式下,ODDR在时钟的上升沿采集D1输入信号,并在上升沿将采集到的信号输出;在时钟的下降沿采集D2输入信号,并在下降沿将采集到的信号输出。这种模式使用起来相对复杂,因为FPGA内部需要在时钟的上升沿给D1赋值,在时钟的下降沿给D2赋值,一般不常使用1820。

    在这里插入图片描述

  • SAME_EDGE模式:此模式下,ODDR在时钟的上升沿同时采集D1和D2的数据,然后在时钟的上升沿输出采集的D1数据,在下降沿输出采集的D2数据。这种方式实现起来比较简单,属于常用的模式20。

    在这里插入图片描述

(3)数据处理过程

在这里插入图片描述

在这里插入图片描述

3.IDELAYE2

用于将数据延迟一段时间。

例化:

(* IODELAY_GROUP = <iodelay_group_name> *) // Specifies group name for associated 
IDELAYs/ODELAYs and IDELAYCTRL
 IDELAYE2 #(
 .CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
 .DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN)
 .HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
 .IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
 .IDELAY_VALUE(0), // Input delay tap setting (0-31)
 .PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
 .REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 
290.0-310.0).
 .SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
 )
 IDELAYE2_inst (
 .CNTVALUEOUT(CNTVALUEOUT), // 5-bit output: Counter value output
 .DATAOUT(DATAOUT), // 1-bit output: Delayed data output
 .C(C), // 1-bit input: Clock input
 .CE(CE), // 1-bit input: Active high enable increment/decrement input
 .CINVCTRL(CINVCTRL), // 1-bit input: Dynamic clock inversion input
 .CNTVALUEIN(CNTVALUEIN), // 5-bit input: Counter value input
 .DATAIN(DATAIN), // 1-bit input: Internal delay data input
 .IDATAIN(IDATAIN), // 1-bit input: Data input from the I/O
 .INC(INC), // 1-bit input: Increment / Decrement tap delay input
 .LD(LD), // 1-bit input: Load IDELAY_VALUE input
 .LDPIPEEN(LDPIPEEN), // 1-bit input: Enable PIPELINE register to load data input
 .REGRST(REGRST) // 1-bit input: Active-high reset tap-delay input
 );

延时值如下:

延时值 = 600 p s + t a p ∗ r e s o l u t i o n r e s o l u t i o n = 1 64 ∗ f ( u s ) 延时值=600ps+tap*resolution\\ resolution=\frac{1}{64*f} (us) 延时值=600ps+tapresolutionresolution=64f1us

其中f频率的单位为MHz,tap值为CNTVALUEIN的值。

详细可参考下面文章:

Xilinx IDELAYE2应用笔记及仿真实操-CSDN博客

  • 16
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RGMII(Reduced Gigabit Media Independent Interface)是一种接口协议,用于将以太网数据传输到物理层的各种媒介上。在实现RGMII接口的Verilog代码中,需要考虑以下几个方面: 1. 接口定义:根据RGMII接口的规范,定义输入输出端口,例如数据线、时钟线、控制线等。 2. 时钟均衡:RGMII接口使用边沿对齐技术,需要保证时钟的均衡。通过使用延迟锁相环(DLL)或者排除时钟延迟的方式来实现时钟均衡。 3. 延迟校正:在RGMII接口中,数据传输经过PHY芯片的时候会产生一定的延迟。需要进行延迟校正,保证数据的正确传输。可以使用延迟线或者FIFO(先进先出)缓冲区来实现延迟校正。 4. 数据处理:RGMII接口需要对输入的数据进行处理,例如数据对齐、差分编码等。可以使用状态机来实现数据处理的逻辑。 5. 接口控制:RGMII接口中有一些控制信号,例如复位信号、时钟使能信号等。需要实现相应的接口控制逻辑。 综上所述,实现RGMII接口的Verilog代码需要定义接口端口,处理时钟均衡和延迟校正,处理数据,实现接口控制。这些都需要根据具体的场景和需求来进行相应的设计和实现。 ### 回答2: RGMII接口是用于连接以太网PHY和MAC层的接口标准,它可以在高速数传输和低功耗之间取得平衡。在实现RGMII接口的Verilog代码中,需要对TX(发送)和RX(接收)两个方向进行编码。 对于TX方向,首先需要在MAC层生成以太网数据包,然后将其传输到PHY层进行编码和调制。这可以通过Verilog代码实现。在实现过程中,可以使用时钟控制和状态机等技术,将数据包转换为RGMII规定的时序和电平。 对于RX方向,PHY层接收到来自以太网的信号,需要对其进行解码和调制,并将解码后的数据包传输到MAC层。同样,这可以通过使用Verilog代码实现。在代码中,可以设计接收模块,对接收到的RGMII时序和电平进行解码,并重新构建以太网数据包。 在实现RGMII接口的Verilog代码中,需要考虑时序和电平的适配问题。RGMII接口时序要求非常严格,需要确保发送和接收端在时钟信号的边沿进行数据传输。而电平方面,需要遵循RGMII接口规范,保证数据的有效传输和正确解码。 总结而言,实现RGMII接口的Verilog代码是一项复杂的任务,需要考虑时序和电平等许多因素。通过设计合适的时钟控制、状态机和数据解码等模块,可以满足RGMII接口的要求,实现可靠的以太网数据传输。 ### 回答3: RGMII(Reduced Gigabit Media Independent Interface)接口是一种用于以太网通信的物理层接口标准。在Verilog中实现RGMII接口需要以下步骤: 1. 创建模块:首先,在Verilog中创建一个模块来实现RGMII接口。可以使用`module`关键字来定义模块的名称。 2. 端口定义:在创建模块后,定义RGMII接口的输入输出端口。根据RGMII接口的规范,需要定义TXD(发送数据线)、TXC(发送时钟线)、 RXD(接收数据线)、 RXC(接收时钟线)、MDIO(管理数据输入输出线)和 MDC(管理时钟线)等端口。 3. 时序处理:使用时钟信号对接收和发送数据进行同步处理。根据RGMII规范,发送和接收数据需要根据时钟信号进行对齐。 4. 数据转换:将接收到的数据转换为合适的格式,并通过TXD端口输出;将接收到的数据通过RXC端口输入,并进行适当处理后输出。 5. 时钟生成:为RGMII接口生成合适的时钟方向。 6. 状态处理:根据RGMII协议的状态处理要求,对接收和发送的数据进行状态处理。 7. 实例化模块:在设计的顶层模块中,实例化RGMII接口的模块,将其与其他模块连接起来。 通过以上步骤,可以使用Verilog语言实现RGMII接口的功能。需要注意的是,以上仅是一个简要的介绍,实际上在实现RGMII接口时还需要考虑更多的细节和特定的设计要求。所以具体实现过程可能会更加复杂,需要根据具体的设计需求来进行。 总结来说,使用Verilog语言进行RGMII接口的实现,需要创建模块、定义端口、进行时序处理、数据转换、时钟生成、状态处理等步骤,通过实例化模块,将其与其他模块连接,从而完成RGMII接口的功能实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值