实验室回来一批板子,上面有RGMII接口、SGMII接口等各种接口,怎么测试这些网口是否正常呢?的确需要一些经验。比如RGMII接口,最重要的是看在哪里去做的时钟和数据偏移。这时,常常需要使用VIO去读取PHY里面对应寄存器的值,看是否工作在正常RGMII接口时序模式。
测试场景
测试拓扑图如下
![1884070d296a7455b4e9d705cb2876b1.png](https://i-blog.csdnimg.cn/blog_migrate/bdf6a4a87be7da68aa22e1f95539e4fc.jpeg)
试场景连接图
测试方法:使用TestCenter向被测板子上的千兆以太网口打流,在FPGA内部通过自回环从源端口返回给TestCenter,通过看TestCenter控制界面上显示结果判断自回环是否正确。
测试RGMII接口时使用的PHY芯片为MARVELL 公司的88e1512PHY芯片,RGMII顶层接口信号如图1所示。
![b8443199005740792272475b538fc308.png](https://i-blog.csdnimg.cn/blog_migrate/cd2c2b1894d80bb8d990ecbe8e5ea80d.jpeg)
图1 测试代码顶层接口信号
采用以往经验发现问题
按照以往的RGMII接口使用经验,通过约束将接口的输出时钟延迟了2ns,如图2所示。使用TestCenter对以太网口进行测试,以太网口无法正常发送数据。具体表现为,TestCenter接收的数据帧数目,和发送的数据帧数目相等,但是接收的bit数明显比发送的bit数少。抓取测试代码的内部信号发现,FPGA接收到的以太网数据帧均正常,所以推测FPGA给PHY芯片的发送数据的时序不正常。
![85fb71996e63998554fa3c6449529173.png](https://i-blog.csdnimg.cn/blog_migrate/ab0cb3703ebfde3ecd0227f2e7cae5f5.jpeg)
![cc7964a34f7ff2271bb41d698bc64889.png](https://i-blog.csdnimg.cn/blog_migrate/eeb711c931d6bd90e15cdbcc05a0c6d5.jpeg)
图2 发送时钟偏移2ns约束代码
修改代码,不对发送时钟进行2ns的偏移,如图3所示。使用TestCenter对以太网口进行测试,以太网口正常地工作。
![e2b2f228dee2542fe94869f3339adf0c.png](https://i-blog.csdnimg.cn/blog_migrate/a7749c4a4e92d1b6e38a9a05fc3d4158.jpeg)
![779206916441104b61e029e0def9d58e.png](https://i-blog.csdnimg.cn/blog_migrate/da3130f8acf1570ec0dcfbe6d0d286ce.jpeg)
图3 发送时钟不进行偏移2ns
问题原因定位
推测在不同的PHY芯片的工作模式下,对时钟的要求不一样。
之前使用的REALTEK的RTL8211E PHY芯片,需要对发送时钟进行2ns的延迟,查找该 PHY芯片手册, PHY芯片对发送时钟有图4所示的要求。表格中明确指出,需要自己添加时钟和数据之间的2ns时延。
![c1afc95f7dafba1d63226b9e2efa8503.png](https://i-blog.csdnimg.cn/blog_migrate/220f6180e65d78c958511ad7a244e60f.jpeg)
图4 RTL8211E的发送时钟
查找目前调试板子上所使用MARVELL的88e1512 PHY芯片的芯片手册,发现RGMII接口有4种不同的时钟工作模式。