1. 从零开始:为什么我们需要这么多以太网接口?
如果你玩过树莓派或者自己画过带网口的电路板,可能听说过“以太网PHY芯片”这个词。但当你真正动手把MAC(比如FPGA里的软核或者ARM芯片里的硬核)和这颗PHY芯片连起来时,立马就会懵圈:数据手册上怎么有MII、RMII、GMII、RGMII、SGMII这么多种接口?选哪个?它们到底有啥区别?
别急,咱们先打个比方。MAC和PHY的关系,就像工厂的装配车间和物流发货部门。装配车间(MAC)负责把数据打包成标准的以太网帧,而物流部门(PHY)则负责把这些帧转换成能在网线里跑的物理信号(比如差分电平)。这两个部门之间得有个高效、标准的交接窗口,这个“窗口”就是MII及其衍生接口。它的核心目标就一个:让MAC和PHY能独立升级换代,互不影响。这就是“介质独立”(Media Independent)的含义——无论PHY那头接的是双绞线、光纤还是同轴电缆,MAC这边都不用改。
最早的“标准窗口”叫MII。它用4根数据线(TXD[3:0]和RXD[3:0])来传数据。为了跑100Mbps的速率,它需要25MHz的时钟。你算算,4根线,每个时钟传4个bit(一个nibble),25MHz * 4 = 100Mbps,正好。但问题来了,这个接口信号线太多!光是数据、时钟、使能、错误指示这些,收发两边加起来就要16根线(这还没算管理接口MDIO)。对于单个网口还好,但要是做8口、16口的交换机,这布线量简直噩梦。
于是,工程师们就开始琢磨怎么精简。RMII(Reduced MII)就是第一个“精简版”。它把数据线从4根砍到2根,同时把独立的发送时钟(TX_CLK)和接收时钟(RX_CLK)合并成一根由外部晶振提供的REF_CLK(50MHz)。这样,引脚数直接减半。代价是什么呢?时钟频率得翻倍(50MHz),并且MAC和PHY需要事先通过MDIO协商好工作速率(10M还是100M)和双工模式,因为硬件管脚上没这个信息了。
当网络迈入千兆时代,4根或2根数据线就不够用了。GMII(Gigabit MII)应运而生,数据位宽扩展到8位(TXD[7:0]/RXD[7:0]),时钟频率提升到125MHz(125MHz * 8 = 1000Mbps)。它看起来很美好,但引脚数也膨胀到了24个左右。于是,针对千兆网的“精简版”RGMII又来了。它把数据线压缩回4根,但玩了个花活:在时钟的上升沿和下降沿都采样数据。这样,125MHz的时钟,双沿触发,等效数据速率就是250MHz * 4 = 1000Mbps,既保证了速度,又省下了一半的数据线。
那SGMII呢?它更激进,直接把并行的数据流“串行化”了。它只用两对差分线(一对发,一对收)就能跑千兆,时钟高达625MHz,并且数据是嵌入时钟的,这对PCB布线的一致性要求极高,但引脚数节省到了极致,非常适合芯片内部或短距离板级互联。
所以,选择哪种接口,本质上是在引脚数量、时钟频率、PCB布线复杂度、成本之间做权衡。低引脚数的接口(如RMII、RGMII、SGMII)通常意味着更高的时钟频率和更严格的时序要求。理解它们的来龙去脉,是进行高速硬件设计的第一步。
2. 庖丁解牛:MII、RMII、GMII、RGMII信号与时序详解
光知道概念不够,咱们得看看它们具体是怎么“握手”传数据的。这里我结合自己调试FPGA板卡上RTL8211 PHY芯片的实际经验,把几个关键接口的时序掰开揉碎了讲。
2.1 MII接口:经典但“臃肿”的元老
MII接口的信号线算是大家族里最全的。发送方向(MAC -> PHY)有:TX_CLK(发送时钟,由PHY提供)、TXD[3:0](发送数据)、TX_EN(发送使能)、TX_ER(发送错误指示)。接收方向(PHY -> MAC)有:RX_CLK(接收时钟,由PHY提供)、RXD[3:0](接收数据)、RX_DV(接收数据有效)、RX_ER(接收错误)。此外还有半双工模式下用的CRS(载波侦听)和COL(冲突检测)。
它的时序其实很直观。以发送为例:PHY产生TX_CLK(100Mbps时是25MHz)给MAC。MAC在TX_CLK的上升沿,把要发送的数据放到TXD[3:0]上,同时拉高TX_EN表示“数据有效”。PHY则在TX_CLK的上升沿采样这些信号。如果MAC在传输中途发现错了,可以拉高TX_ER,告诉PHY“这个


312

被折叠的 条评论
为什么被折叠?



