千兆UDP学习调试记录(四)

20181009 周二

继续分析源代码,CRC已经说过了,现在来看IP_Receive模块。通过对发送模块的全面、细致解析,再对现在的接收模块进行分析,应该会轻松很多了吧。哈哈。

补充:程序是直接用一个总的流程状态实现的,相比于一般的三段式状态机,各有什么优点呢?

可以尝试把程序写成三段式状态机来实现。

△Iprecieve模块,GMII UDP数据包发送模块。

上一节已经全部梳理了整个以太网传输协议及过程,因此此节不再赘述,下面开始梳理IP(以太网)接收模块的程序源码。

接收过程就是挨着IP帧的格式,顺序接收便OK。8bit位宽的数据进来,按要求组合成32bit位宽数据,并取出首部信息。

到此,就分析完了整个UDP测试模块,下一步的要求,就是用自己的方式实现该UDP协议传输。有几点要求如下:

  1. 以位宽为8bit的RAM来存数据,不用32bit的RAM;
  2. 尽量考虑模块的通用性,实用性,拓展性,模块化,为后续工作做好准备;
  3. 做好测试记录,磨刀不误砍柴工,一定要扎实基础;
  4. 尽快实现,不要陷到细节里,要站在全局来实现。

流程和发送模块类似,在此不再赘述。

千兆UDP学习之测试记录

20181008-10  经上述章节设计的程序,依次进行,并总结了如下测试。

测试一:针对广播模式进行测试。广播形式的协议设置如下。

千兆UDP学习调试记录(四)

第一次测试,连接成功,很顺利。。。

千兆UDP学习调试记录(四)

数据抓取正常。

千兆UDP学习调试记录(四)

但是回环测试错误,FPGA未能接收调试助手发送的UDP数据!——也就是说,现在的情况是,FPGA的地址不明确,地址未正确解析。

分析:这次的测试结果奇怪,没有出现预想的“广播不到”的情况,调试助手接收到FPGA来的广播地址请求,并且FPGA端发送UDP数据正常,反而是FPGA端未能接收UDP数据,没有“应答”到自己的地址。

 

测试二:这次测试,就出现了预计的问题,PC端(调试助手)未能解析到FPGA端的广播连接。但是能回显到PC端……

千兆UDP学习调试记录(四)

 

测试三:把向GMII的25M时钟线去掉,如下设置。

千兆UDP学习调试记录(四)

因为使用的千兆模式,25M未使用,所以在程序中尝试去掉,然后进行了测试。出现和“测试一”完全一样的情况。

接下来,换成指定PC端MAC地址,再次进行测试。

千兆UDP学习调试记录(四)

预计情况,这样应该能解决上述出现的两个“交叉”问题。猜测原因,是因为使用的自动协商,所在PHY芯片没有“正确”工作。

结果:预测失败,结果还是PC端能接收UDP数据,但是不能回显。所以,这个25M时钟线还不能去掉,原因为何,还待进一步考察。

 

一点思考:

如果这样一遇到问题就来记录的话,学习效率太低了。记录是需要的,但不能让记录用去的时间太多了,应该把时间重点放在推进工作进度上。就是说,遇到问题,不要着急记录,而应是先去尝试方法解决,等解决之后,再来记录。这样的记录才是有效记录,才有更高的参考价值。

测试四:不知为何原因,直接下原装的程序,但是还是一样的结果……所以这就纳闷了。

问题1:电脑居然不能绑定IP了,奇怪,问题如下。

千兆UDP学习调试记录(四)

解决办法,见 https://jingyan.baidu.com/article/cb5d61052f45db005c2fe007.html

主要用一下命令:

1、使用 arp -a 命令 查看网关的MAC网卡物理地址

2、使用 netsh i i show in 命令 查看 本地连接的idx编号

3、使用 netsh -c "i i" add neighbors 本地连接的idx “网关IP” “网关mac” 命令绑定

netsh -c “i i” add neighbors 11 “192.168.0.2” "00-0a-35-01-fe-c0”

同理,在Win7上用arp -d并不能完全的删除绑定,必须使用netsh -c "i i" delete neighbors IDX(IDX改为相应的数字)才可删除MAC地址绑定。

该问题解决后,如下。

千兆UDP学习调试记录(四)

绑定IP之后,再次下载程序进行测试,现在就没问题了。哎,绕了这么大一圈。

千兆UDP学习调试记录(四)

完整正确的测试结果,应如下图所示。为保证测试方便,固化该FPGA程序。

千兆UDP学习调试记录(四)

 

经过上面的“波折”,总结如下的UDP测试流程经验。

  1. 修改本机PC端的IP等:192.168.0.3
  2. 绑定本机的静态地址,即把FPGA端的地址加上:

arp -a

netsh -c "i i" add neighbors 11 "192.168.0.2" "00-0a-35-01-fe-c0"

  1. 下载UDP程序,让两端程序准备好。
  2. 打开调试助手、Wireshark软件进行测试验证。

 

PS:有兴趣的朋友,欢迎留言,交流,本人扣扣1021100382 ~

相关文章: