明德扬吴老师 发表于 2019-12-3 21:37:12

基于Arria10的SGM ii通信

基于Arria10的SGM ii通信
本文为明德扬原创文章,转载请注明出处!
一、RGMII和GMII连接图我想大部分千兆网工程一般都是做GMII通信方式或者是RGMII模式的,这两类通信模式都是相对来说比较简单的,以上两种方式都是基于时钟线和数据线一起发送或者接收的。 GMII连接图
RGMII连接图
从上面的图中我们可以看出,不管是RGMII还是GMII它们都是有时钟线和数据线的,当要发送数据的时候,TX_EN <=1 ,TX_CLK <= 125M,然后TXD <= data即可,当然了,TX_EN的发送是一段一段的,也就是说你不能总是让TX_EN 一直等于1,在发送了一小段数据之后就要拉低TX_EN,然后等待下一次的数据的发送

二、SGMII和GMII的区别SGMII模式下,是没有时钟线,只有数据线。比如说常见的AR8031芯片,有的工程师可能会有迷惑,那只有数据线如何通信呢?数白了SGMII遵循的是SERDES总线,在收到数据之后,FPGA的IP核会根据收到的数据自动恢复出时钟。

三、SGMII的调试那我们又应该如何调试呢?SGMII该怎么从硬件处开始调呢?当我们拿到板子之后先不要急着去调试SGMII。首先我们要做的是观测芯片的正常工作正常与否。那如何知道芯片工作了呢?大多数的工程师都知道一般的千兆网芯片上面都有设置寄存器的MDC和MDIO的两根线,我们可以根据数据手册上的时序图去设计MDC和MDIO的时序,然后读写PHY芯片的寄存器,如果能够读写成功,那么恭喜你,你设计的电路50%是没有问题的。
我想接下来有可能有的工程师就会根据MDC和MDIO的设置去调试PHY芯片的回环了吧?如果你是那样做,那么恭喜你,你中招了。根据SGMII协议,你直接调试回环是调试不出来的。所以我们接下来的是如何捕捉SGMII的协议的呢?偷偷的告诉你,在MDC和MDIO调试好的情况下(即你的板子能正常工作的情况下),用两个PHY芯片直接去对接,先不用经过FPGA进行数据处理,也就是说不用FPGA先让两个芯片能收发正常。那两个PHY芯片如何对接呢?很简单两个PHY芯片的RX对TX,TX对RX即可,然后在FPGA连接RX的那一端的端口设置为Input方向,捕获信号。如果你觉得我说的太复杂,那么你可以想象串口同行的模式。串口里面也是RX对TX,TX对RX,当你用串口1的TX发送数据给串口2的时候,串口2收到数据,同时把串口2的RX的线连接到FPGA的端口,设计FPGA的端口方向位输入方向,这样子是不是就可以捕捉串口的数据了。只要你理解了串口,那么SGMII也是同样的道理,其实你可以把SGMII理解成一个类似于高速的串口。在两个PHY芯片能相互发送数据之后,那么你就可以根据观测的数据线上的数据,然后根据数据线上的数据去设计你的FPGA的代码,也就是说FPGA发送一段和你捕捉的数据一样的数据即可,此时是可以发送数据的了。

四、SGMII协议理论分析好了,说了那么多,都只是说的是怎么调试,是不是感觉还是缺少了相关的理论呢???那么我们下来就说说理论吧。SGMII协议是有个数据链路层的,简单的说就是FPGA和PHY芯片之间有个通信的握手机制,PHY和FPGA之间要先通信握手,通信机制建立好了之后才可以进行数据的发送和接收。有工程师又有疑问了,SGMII协议每TX_EN线,那么PHY芯片是如何知道要发送数据的呢?很简单,就是FPGA在发送数据之前要先发送一个起始码,在发送数据之后发送一个结束码,这样子就可以把数据发送出去了当然了,以上说的就是调试SGMII的步骤,基于ARRIA10的SGMII通信方式首先你要把Arria10的SERDES调通,调通了之后才可以去根据我上面所说的步骤去SGMII。如果你想调试8路16路24路网口通信可以在下方留言联系我们。至于Arria10的光口通信时怎么调试的,请关注我们的下一个章节。
页: [1]
查看完整版本: 基于Arria10的SGM ii通信