这些接口都是用于连接MAC和PHY的
概述
不管是使用FPGA还是ARM,想要实现以太网通信,都离不开以太网PHY芯片,其功能如下所示,FPGA或者ARM将以太网数据发送给PHY芯片,PHY会将接收数据转换成模拟的差分信号传输到RJ45座子,最后通过网线与CPU、FPGA等网线连接的设备通信。PHY芯片实现的功能相当于OSI模型中的物理层。
像以太网PHY芯片、摄像头采集芯片,高速ADC等芯片,它们传输数据的速率是比较快的,但是一颗芯片往往存在很多功能,比如以太网PHY芯片可以设置不同的传输速率,10M还是100M,全双工还是半双工;摄像头芯片采集不同分辨率不同刷新率的图片。
要实现上述功能切换,主控芯片需要通过一个接口去配置这些芯片内部的寄存器,配置这些寄存器往往没有速度要求,那么串口就是最好的选择,可以减少走线,便于PCB布局布线。摄像头芯片实现这类功能使用的是类似IIC协议的SCCB串口通信协议,而以太网PHY芯片是通过MDIO这种串行接口实现内部寄存器的配置。
以太网PHY芯片包含三组数据线:一组用于配置其内部寄存器的串行接口MDIO,一组与RJ45连接的物理差分接口,一组用于和主控芯片传输数据的并行总线。
下文先讲解以太网PHY芯片与主控芯片不同传输接口信号时序,然后讲解配置寄存器的MDIO接口时序,后文通过对具体主控芯片的手册,原理图讲解来对照这些接口。
MII接口
信号 | 方向(Output, Input) | 位宽 | 含义 |
---|---|---|---|
RX_CLK | O | 1 | 发送时钟,PHY芯片产生,100Mbps时为25MHz,10Mbps时为 2.5MHz。 |
RX_DV | O | 1 | 高电平表示发送的数据有效。 |
RX_ER | O | 1 | 高电平表示发送数据的错误,接收端不接受该数据。 |
RX_D | O | 4 | 发送数据总线。 |
TX_CLK | O | 1 | 接收时钟,PHY芯片产生,频率与RX_CLK一致。 |
TX_EN | I | 1 | 高电平表示接收的数据有效。 |
TX_ER | I | 1 | 高电平表示接收的数据包有误,丢弃该数据包。 |
TX_D | I | 4 | 接收数据总线。 |
CRS | O | 1 | 载波侦测信号,不需要同步于参考时钟,有数据传输,CRS就有效,仅PHY在半双工模式下有效。 |
COL | O | 1 | 冲突检测信号,不需要同步于参考时钟,仅PHY在半双工模式下有效。 |
PHY芯片向MAC传输数据的接口时序如下图所示,PHY芯片在RX_CLK下降沿输出数据RX_DATA,两个时钟发送一字节数据,先发送低四位数据,后发送高四位数据,发送数据时RX_DV信号拉高。MAC侧在时钟上升沿采集RX_DV和RX_DATA状态。MAC接收数据时序图
下图是该接口MAC侧发数据给PHY芯片的时序,依旧是下降沿输出数据,方便接收端在上升沿对数据进行采样。MAC发送数据时序图
总结: MII接口只能实现100Mbps、10Mbps速率的数据传输,不能实现1000Mbps。 发送、接收的数据线均为4位,则每个时钟周期发送或接收4位数据。如果要实现100Mbps通信速率,那么时钟频率就应该是25MHz。如果要实现10Mbps通信速率,那么时钟频率就应该是2.5MHz。接口的时序总体比较简单,注意发送、接收的时钟信号都是PHY芯片输出即可,FPGA一般使用的都是千兆以太网,要求较高时,使用万兆网,所以MII接口在FPGA中不是很常见,在ARM中更常见。
RMII接口
RMII(Reduced Media Independent Interface)接口其实就是MII接口的简化版本,将TX_CLK和RX_CLK合并为双向时钟线REF_CLK,由外部的晶振同时给PHY芯片和MAC主控芯片提供时钟信号。将4位的数据线简化为2位。对应的接口信号如图5所示。
信号 | 方向(Output, Input) | 位宽 | 含义 |
---|---|---|---|
REF_CLK | I | 1 | 参考时钟,外部晶振产生,100Mbps时为50MHz,10Mbps时为5MHz。 |
CRS_DV | O | 1 | 高电平表示发送的数据有效。 |
RX_ER | O | 1 | 高电平表示发送数据的错误,接收端不接受该数据。 |
RX_D | O | 2 | 发送数据总线。 |
TX_EN | I | 1 | 高电平表示接收的数据有效。 |
TX_D | I | 2 | 接收数据总线。 |
总结: RMII将发送时钟、接收时钟合并为参考时钟信号,把4位的数据线简化为2位数据线,可以简化PCB布局布线。RMII同样只能实现100Mbps和10Mbps,当以100Mbps速率传输数据时,每个时钟传输2位数据,此时参考时钟应该设置为50MHz。当以10Mbps速率传输数据时,参考时钟应设置为5MHz。
GMII接口
GMII(Gigabit Media Independent Interface)接口是比较常见的千兆网接口,大部分的FPGA板卡上就是这种接口,接口时序也比较简单。
注意: MII的接收时钟和发送时钟均由PHY芯片输出,而GMII的TX_CLK是由MAC输出给PHY芯片的。还有就是数据位宽由MII的4位变为了8位。
PHY芯片发送数据给MAC的接口时序如下图所示,与MII接口一样,PHY芯片在RX_CLK下降沿输出数据,MAC在上升沿采集数据,但是GMII接口每个时钟周期传输一字节数据。MAC接收数据时序图
MAC发送数据到PHY芯片的接口时序如下图所示,在下降沿输出一字节数据即可。MAC发送数据时序图
总结: 该接口支持1000Mbps,向下兼容100Mbps和10Mbps。由于数据线位宽为8位,在每个时钟的单沿进行数据传输。如果要实现1000Mbps传输速率,那么发送和接收的时钟频率应该为125MHz。
RGMII接口
RGMII(Reduced Gigabit Media Independent Interface)接口就是把GMII接口的数据线做简化处理,很多FPGA板卡上就是这种接口,接口时序也比较简单。
相比GMII接口,RGMII接口的数据线由8位缩减到4位,RX_DV与RX_ER信号合成为RX_CTL信号。该接口实现1000Mbps传输速率时,时钟依旧是125MHz,下图是该接口MAC侧发送数据给PHY芯片的时序图。
MAC侧在时钟TX_CLK的上升沿将需要发送数据的低4位输出到数据线TXD,在时钟TX_CLK下降沿将传输数据的高4位输出到数据线TXD,因此每个时钟传输1字节数据,125MHz的时钟就能实现1000Mbps速率。
MAC侧不能直接将TX_CLK输出给PHY芯片使用,因为TX_CLK的上升沿和下降沿对应的TXD信号都处于变化阶段,此时采集数据可能会出错,TX_CLK周期为8ns,将TX_CLK延迟2ns后输出给PHY芯片作为TX_CLK,延迟后的信号上升沿和下降沿对应的TXD就是稳定的,此时就可以稳定采集数据。
注意TX_CTL信号,该信号将TX_EN和TX_ER结合,在TX_CLK上升沿,TX_CTL输出TX_EN的状态,高电平表示数据有效,在TX_CLK下降沿,此时输出TX_EN异或TX_ER的结果,所以只有当TX_CTL在TX_CLK上升沿和下降沿同时为高电平时数据才是有效的。
RX相关的时序如下图所示:
RGMII接口依旧可以实现100Mbps和10Mbps速率传输数据。当传输速率为100Mbps时,数据位宽为4位,所以时钟频率为25MHz即可。只在时钟上升沿输出数据,但是TX_CTL和RX_CTL依旧需要在上升沿和下降沿传输数据。 当传输速率为10Mbps时,时钟频率为2.5MHz。
总结
综上RGMII接口的数据线相比GMII减少了一半,PCB布局布线会简单很多,但是对PCB布局布线的要求也更加严格,总体还是值得的。像RTL8211这种三速以太网PHY芯片是可以支持MII、GMII、RGMII这几种接口的,但是当板子硬件做好后,往往只能使用其中一种,具体是什么接口,需要结合原理图具体分析。
FPGA开发板大多使用的是RTL8211芯片,对于上述接口,如果是学习,推荐选择RGMII接口,使用该接口就必须使用IDDR、ODDR、这些原语,以及BUFIO等时钟原语。如果是画PCB,板子比较紧凑的情况下,选RGMII应该也更好,反正等长之类的都是必不可少的,少走10根数据线优势还是比较大的。