我又回来了,上一篇帖子的最后提到无法收到UDP包,现在经过努力,已经解决这个问题了。
起初,还是从包的内容出发,寻找问题。
通过在线调试的方法,把信号线拉到波形中进行校验。
对发送端的以太网帧、IP包、UDP包的内容进行字节对比,对比结果显示每一层的包都是正确的。
观察网口,黄色的灯再闪烁,说明的确有网络包在向外发送。
由于底层的数据和时钟是通过serdese打出去的,那么会不会因为走线长度不一致的原因,接收端(PC)在将时钟恢复后,时钟边沿没有和数据中间对齐,导致没有正确的采集到数据,最终没有识别到以太网帧呢?
这个问题经常出现在高速并转串的应用中,一般的解决方法是将采样时钟相对发送时钟偏移一定的相位(90°),使得采样时钟采到数据的中间稳定值。
代码中,采用PLL来完成时钟的相位偏移,得到“rgmii_clk_90p”。并将rgmii_interface.v文件中RGMII TX部分的时钟rgmii_clk,全部替换成rgmii_clk_90p。
重新编译程序,并烧录到板载FLASH后,重新上电就可以正常收到UDP包了。