rgmii千兆以太网FPGA调试问题总结_rgmii tx clk delay 2ns 怎么约束
最近调试FPGA的以太网通信,1Gbps,以太网芯片RTL8211,FPGA芯片XCKU系列。虽然不超过千兆的以太网都比较简单,但是调试过程中遇到一些不大不小的坑,按照调试顺序和分析过程逐一记录。
一、时钟约束和[DRC AVAL-244]问题
在完成所有代码及仿真后,遇到的第一个问题就是编译后的时钟约束和[AVAL-244]问题。
1.时钟约束问题
需要对rgmii_rx_clk做一些约束,但是这个问题不大,vivado会在message的地方提示加哪些约束,按照提示添加即可,我需要添加的是
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets {rgmii_rx_clk_i_IBUF_inst/O}]
2.[DRC AVAL-244]问题
加入ila之后会报ila时钟错误,在另一篇博文vivado chipscope_drc aval-245-CSDN博客中看到官网说是vivado18的问题。
加以下约束
set_property SEVERITY {Warning} [get_drc_checks AVAL-244]set_property SEVERITY {Warning} [get_drc_checks AVAL-245]
二、复位问题
当整个工程完成编译烧录后,一直显示无时钟输入[Labtools 27-3361] The debug hub core was not detected。ila使用的是rgmii_rx_clk给进来之后经过buffer和MMCM处理的内部时钟。
确认硬件复位问题,复位引脚由FPGA给出进入PHY芯片,低电平有效,FPGA端给的常高。
由于硬件将原先1.8V标准的电压bank接到了3.3V,导致PHY芯片误认为FPGA的常高信号没有拉高,一直处于复位状态。FPGA不控该引脚可暂时解决,最终需硬件修改bank。
三、下载速度和网速问题
解决复位问题之后,下载bit后依旧显示上述ila没有时钟输入,rgmii_rx_clk已可以用示波器抓到时钟。
遇到这个问题通常从两个步骤入手:
①查看网口亮灯情况;
若板卡重新上电网口未亮灯,可能是vivado的hardware manager在上次烧录完成后没有关闭,导致重新上电板卡还停留在JTAG启动上,可能导致网口无法使用。在关闭hardware manager之后重新上电,查看网口亮灯以及网络图标是否在PC上显示。
②JTAG烧录速度和以太网口速度不匹配问题;
ila的时钟至少得是JTAG烧录速度的两倍。然后发现由于之前调试,把PC端网口的千兆网改成了强制百兆,使得rgmii_rx_clk的时钟降到了25MHz,JTAG是15MHz。所以要么改回千兆网,要么改JTAG烧录速度。
1.修改JTAG的方法在该帖子。调试经验01:ila界面弹出后,无法触发数据;或者vivado调整jtag时钟_fpga时钟有但是ila不能触发-CSDN博客
在hardware manager里的open new target里修改。
2.修改以太网速度的方法如下:
四、IP绑定问题
当上述时钟问题解决后,打开网口调试助手发送UDP数据,通过wireshark或ila查看一直在发送广播帧,意味着IP和MAC没有绑定成功,FPGA程序里没有ARP协议,需手动绑定,设定的IP地址为192.168.0.2,MAC地址为00-0a-35-01-fe-c0。绑定MAC需要管理员身份运行CMD。
绑定完成后需确认FPGA端的IP和MAC绑定在PC网口192.168.0.3底下,若开着WiFi,偶尔会将FPGA的IP与MAC绑定在非192.168.0.3的地址下,这样仍旧会找不到FPGA的MAC地址。
解决方法是关闭WiFi重新绑定尝试,若始终无法绑至.3地址下,则修改FPGA的IP地址,重新绑定新的IP和MAC。
五、TX没有返回帧,PHY_TXDLY引脚问题
完成上述操作后,终于能通过网络调试助手传输正确的以太网帧,FPGA为回环工程,需将收到的数据回传给PC,但是此时wireshark抓不到任何返回的帧,ila里却能看到发送的帧完全正确。
分析后发现是rgmii_tx_clk和rgmii_tx_data之间的问题,由于走线等问题,到达PC端的时钟和数据发生错位,导致虽然FPGA端发送的rgmii_tx_clk和rgmii_tx_data正确,PHY芯片端使用rgmii_tx_clk采集的数据错误,导致帧解析错误,没有回帧返回wireshark。
1.通过PHY芯片专用的delay引脚上拉解决,上拉后rgmii_tx_clk相移2ns。
2.通过FPGA内部MMCM/PLL,将rgmii_tx_clk相移90度(2ns)再输出给PHY芯片。 在rgmii_rx_clk端若采集的8bit数据和wireshark中对不上,也需要考虑将rgmii_rx_clk相移一定时间再采集。
六、TX没有返回帧,UDP头部和校验问题
在UDP帧中有一个UDP和校验,这部分通常可以省略。若要省略,这个值一定要赋值成16\'h0000,不要赋值其他非零数值,否则会导致网络调试助手收不到数据。