目前这个verilog-ethernet是暂时不支持广播模式的
以下摘自龙哥文档:
在
tx_udp_hdr_ready 与 tx_udp_hdr_valid
同时为高时,首先发送一个ARP
请求包,如下。在目标电脑收到ARP包并进行ARP回复后,后续才能进行UDP数据包的发送。后续除非电脑端更换IP地址等设置,否则FPGA端不需要进行ARP请求 。 根据以上流程,发送流程可以为:首先发送ARP请求包,当收到电脑端ARP回复包后,表示整个网路通畅,可以进行后续操作,即slice数据发送
然后,假如主机端网口的ip地址为192.168.1.10,这时板卡发送数据包的目的地址设为192.168.0.255,通过wireshark抓包,看到主机端能收到16字节的ARP请求包,但是不会进行回复,导致板卡无法收到目标主机的ARP回复包,导致无法进行后面的slice数据发送
因为目的主机的万兆网口ip地址不是192.168.1.255,所以收到ARP请求包时会忽视这个包
思考的解决方法:ARP包的ip地址设为单播地址,后面发slice包时ip地址再设置成广播地址
就是在板卡端有个状态机,一开始IDLE时将ip设为192.168.0.10
,然后按照这个ip地址发送,等收到主机端的ARP回复后进入ARP RESPONSE SUCCESS,再将ip设为192.168.0.255
本文章使用limfx的vscode插件快速发布