打怪升级之野火以太网回路实验的代码BUG及其修复

野火以太网回路实验代码的bug

如果你使用过野火FPGA以太网回路实验的范例代码(目前笔者见过两种版本的),且发现实际上板后有如下问题:

1.板子的以太网物理接口指示灯正常闪烁。
2.使用WireShark观察发现可以顺利向板子发送正确的IP与MAC地址的数据包,但没办法接收到以太网实验所要求的返回包。

那么,你很有可能是野火以太网回路实验代码bug的受害者(一般野火会把以太网回路实验代码命名为第60个范例,“60_ethernet_udp_rmii"或者"60_eth_udp_loop”)。

快速解决方案

版本1:找到RTL目录下"ip_receive.v"文件,在第214行与215行之间(图1)加上代码变成图2的样子:

图1
图2
版本2:找到RTL目录下"ip_receive.v"文件,在第159行与160行之间(图3)加上代码变成图4的样子:

图3图4

BUG描述

这个BUG出现的原因是,如果以太网模块接收到一个来自网线的UDP包,那么它会先进入前导、帧头、IP首部与UDP首部等状态后才能判断是否接收这个UDP包。任意的UDP数据包至少要走到IP首部状态才能判断是否丢弃。在数据包完成丢弃后,状态机会回到IDLE模式,注意此时字节记数器并没有归零,也即上述解决方案中两变量没归零。

如果字节计数器不是以0的初始值进入前导或者包头的话,就无法准确的读出第6个字节的前导符号d5,自然也进不了以太网头部,可以说,以太网的正常接收功能在收到以一份IP、UDP对不上的数据包后就失效了。

如果你使用的网卡的数据包全部都是老老实实的,不存在IP、UDP对不上的情况,那么以太网回路实验是可行的,你也可以通过modelsim的仿真验证。但实际的网卡中往往会有各种各样的包在网线上广播,原来的代码就不灵了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考琪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值