1 简介
PHY和MAC之间的接口常见的协议一般就是各种MII- media independent interface,MAC 的英文是media access,这里的media通常翻译为媒介,就是传输用的线缆。MII系列接口比较相似,G指的是接口速度为1Gbps,GMII是8bit单沿,R是reduce,变成了4bit双沿,S是serial,变成串行了(SGMII/RGMII没有收录在802.3)。
1.1 MII/GMII信号列表
MII信号列表如下:
signal | bit | description |
---|---|---|
tx_en | 1 | tx data valid |
txd | 4 | tx data |
tx_er | 1 | tx error |
tx_clk | 1 | tx clock |
rx_dv | 1 | rx data valid |
rxd | 4 | rx data |
rx_er | 1 | rx error |
rx_clk | 1 | rx clock |
col | 1 | collision,有没有发生冲突 |
crs | 1 | carrier sense,也就是载波侦听,通常就是指信道上有没有设备在发信号,所以后面可以看到SGMII直接就用RX_DV作为CRS |
mdc | 1 | management data clock |
mdio | 1 | management data input/output |
补充:
- tx_er,这里没想明白的是,既然包就是自己发出来的,知道有错误还为什么要发?然后看网上有人解释,可能有两种原因:
- a. tx_en有效,MAC的发送端的缓存通常无法整包缓存下来,缓存overflow/underflow都可能导致包在发送过程中出错。
- b. tx_en无效,载波延伸(carrier extension)。
- rx_er,phy端出现的任何错误,可能出现在一个包接收过程中的任意位置。这里没有看懂出现rx_er,是不是整个包都要丢掉。
1.2 MII/GMII信号时序
1.2.1 发送
MII的tx端时序如下图(来自协议802.3/22.2.2.3),GMII和这个很类似,只是时钟频率和TXD位宽不同。
1.2.2 接收
接收端时序图如下,这里可以看到,RX_DV有可能是在前同步码的中间才有效。因为协议说接收端收到的同步码<= 7都是有可能的。
1.3 RGMII
这部分的内容802.3里面没有,可以在网上搜《RGMIIv2_0_final_hp.pdf》。
关于RGMII只需要知道两点就够了:
- RGMII把TXD/RXD变成了4bit,双沿采样,上升沿对应GMII的低4bit,下降沿对应GMII的高4bit。
- RGMII把EN/ER合并到了一个叫ctrl的信号,上升沿是en,下降沿是EN^ER。
至于其他更详细的内容请看协议。
1.4 SGMII
这部分的内容802.3里面也没有,协议可以搜《Serial-GMII Specification.pdf》。
SGMII改动就大了,既然都上高速串行了,不搞个PCS好像说不过去。PCS的内容看802.3/36。
Xilinx的SGMII IP就相当于一个SGMII转GMII的agent,Xilinx还有个RGMII转GMII,所以不管PHY是什么接口,MAC永远用GMII。