文章目录
- 前言
- 一、RGMII 接口的信号说明
- 二、RGMII 发送的 FPGA 实现方案
- 1. OPPOSITE_EDGE 模式
- 2. SAME_EDGE 模式
- 三、使用 FPGA 实现 RGMII 接口
前言
RGMII 是 IEEE802.3z 标准中定义的千兆媒体独立接口(Gigabit Medium Independent Interface)GMII 的一个替代品。相较于 GMII 接口,RGMII 接口可以在保证传输速率不变的情况下减少管脚数。RGMII 接口通过过在时钟的上升和下降沿分别传输 1 次数据,并对控制信号采用多路复用的方式来降低管脚数量的。RGMII 数据在时钟的上升沿和下降沿均进行采样。通常,来自 RGMII PHY 的时钟和数据同时生成,即边缘对齐,因此必须在 PCB 上对时钟信号加入布线延迟来使得数据在时钟的上升沿时处于稳定状态。
提示:以下是本篇文章正文内容,下面案例可供参考
一、RGMII 接口的信号说明
下表列出了 RGMII 接口的信号说明(以下信号方向皆是从以太网MAC 层角度来看的)。
图 46-1 展示了时钟和数据边沿对齐情况下通过板级 PCB 对时钟加入延迟的方式实现目的端时钟和数据中心对齐的形式。
数据边沿对齐的形式使得 PCB 设计变得更加的复杂,所以,后来的 PHY 芯片都针对RGMII 接口提供了可选的内部延迟电路。这些 PHY 芯片支持通过引脚管脚(例如 RTL8211)或配置寄存器(例如 KSZ9031、88E1512)的方式对时钟加入延迟,这样就可以降低 PCB 的布线要求。
二、RGMII 发送的 FPGA 实现方案
设计实现时,我们需要使用 xilinx 的 ODDR(Output Double Data Rate,输出双倍数据速率)原语,将该接口使用 OLOGIC 块实现。OLOGIC 块在 7 系列 FPGA 内的位置紧挨着 IOB,其作用是 FPGA 通过 IOB 发送数据到器件外部的专用同步块。在 OLOGIC 块中,有着专用的寄存器,用于实现输出 DDR 寄存器,当我们实例化 ODDR 原语时便会自动访问该功能。ODDR 原语只有一个时钟输入,下降沿数据由输入时钟的本地反转来计时,反馈到 I/O块的所有的时钟被完全复用,ODDR 原语的框图如图 所示:
![在这里插入图片描述](https://img-blog.csdnim
这里的 D1 和 D2 是数据的两个输入端口,输出端口会在上升沿这里需要注意的是 set和 reset 同时只能有一个被置高,也因此,描述端口时,使用的 S/R。除了这些端口外,ODDR原语还包含一些可用属性,具体如表
1. OPPOSITE_EDGE 模式
在该模式中,时钟的两个边沿被用来以两倍的吞吐量从 FPGA 逻辑中捕获数据。这种结构与 virtex-6 的实现比较相似。两个输出都提供给 IOB 的数据输入或者三态控制输入。使用OPPOSITE_EDGE 模式的输出 DDR 时序图如图 46-4 所示:
在该模式下,输入数据在两个边沿被采样,可以看到输出端 OQ 上首先输出的是 D1A,随后再输出 D2A。
该模式下,上升沿读取D1数据,并在时钟周期的前半个周期输出,下降沿读取D2数据,并在时钟周期的后半个周期输出。
2. SAME_EDGE 模式
在该模式下,数据可以在相同的时钟边沿送给 IOB。相同的时钟沿将数据送给 IOB 可以避免建立时间违规,并允许用户使用最小的