本文为明德扬原创文章,转载请注明出处!
Sgmii协议是串行协议,区别于rgmii和gmii的并行接口,使实验电路更加简单方便。
Sgmii协议如果是在FPGA上实现,那么要求FPGA支持Serdes接口或者FPGA有支持sgmii的IP核。
Sgmii是采用差分对信号线进行数据传输的,不提供随路时钟,依靠数据信息进行CDR的时钟恢复,在数据链路上采用8b/10b编码,所以当传输的是千兆以太网(1Gbps)的时候,数据链路上的传输的速率是1.25Gbps,也就是说FPGA例化Serdes的IP核的时候的数据速率是1.25Gbps。
一、 sgmii的数据链路层的握手过程
Sgmii在通信过程中首先要进行PHY和sgmii的数据链路层的链接,即FPGA的sgmii或者Serdes和sgmii_phy芯片的握手,在握手建立之后才进行数据传输。握手的过程首先是sgmii_phy芯片(以AR8031为例)发送准备好状态(0xBC 0x42 0x01 0x98 0xBC 0xB5 0x01 0x98),然后FPGA回复sgmii_phy的信息为(0xbc 0xb5 0x01 0xd8 0xbc 0x42 0x01 0xd8)。在数据链路握手之后才是数据的发送。数据链路层每隔1.6ms进行一次状态信息的更新,也就是说FPGA每隔1.6ms发送一次自身的状态给PHY芯片
二、 数据的发送
Sgmii协议传输数据包的过程中,以K27.7为起始符,以K29.7为结束符。数据链路空闲的时候要发送空闲码。空闲码(IDLE码)有两种/K28.5/D5.6或者/K28.5/D16.2。在发送数据的过程中的需要注意在发送完毕空闲码的时候才能发送数据,也就是说发送数据的时候先发送(0xBC 0x50)完毕,接着发送起始符(K27.7),然后发送千兆以太网协议(/0x55/ 0x55/ 0x55/ 0x55/ /0x55/ 0x55/ 0x55/0xD5),接着发送的数据是遵循千兆网以太网的协议数据(具体请自行查看),发送完数据之后再发送一个字节的结束符(K29.7)。
三、 FPGA数据传输过程中的K码解析
在上面的数据传输的过程中有IDLE码(0xbc 0x50),起始符K27.7(0xFB),结束符K29.7(0xFD)等。在以上的特殊码的传输的过程中有K码要相对的置1。即空闲码的(0xbc 0x50)的0xbc要K码与之对应,K27.7和K29.7也是K码与之对应。
总结:sgmii的传输数据的过程为:每隔1.6ms 时间 FPGA和PHY的握手过程,握手建立之后发送空闲码,要发送数据的时候要在空闲码发送完毕之后才能去发送数据(起始码+数据+结束码)即可。
有不明白的朋友可以在留言中与我进行讨论,想要了解更多的朋友可以联系明德扬获取更多学习资料!