千兆UDP学习调试记录(五)
千兆UDP学习调试记录(五)
——千兆UDP设计实战
到此全部完成基于FPGA的UDP发送接收功能全部实现,这是该系列的第五篇文章。
UDP设计实战记录
△GMII的接口管理芯片,圈出的引脚是需要控制的引脚。
△20181011 周四 开始编写UDP发送模块
1、完成UDP发送模块的程序编写。GMII 千兆UDP数据包发送模块,即这层是包含MAC帧的全部以太网协议发送模块。程序接口如下。
其对应的RTL图如下。
2、对该模块进行仿真,最终的仿真结果如下。
2.1 仿真测试代码如下。
2.2仿真设计中,每隔0.1ms发送一次数据,且数据是模拟好的,得到如下整体仿真图。
2.3 虽发送数据进行对比验证,看是否,满足MAC帧格式要求。
继续展开:如图注释,正确的。
数据部分的观测:
数据发送结束部分的观测:
综上仿真,全都正确。便可以到下一步,UDP数据接收部分的程序设计了!
△20191012 周五 UDP接收模块设计。
代码写完了,但是遇到这个奇葩问题,看了几小时,还是一点点不对的地方都没找到。
现在的方案是,直接仿真测试,看看是什么原因。我很怀疑是ISE软件的BUG。而不是我的程序问题。
1、完成的IPRecieve模块
代码接口
其内部图(局部)。
2、下面进行仿真测试。
2.1 首先,产生以太网帧的数据,用于模拟输入。
为此,调用ipsend模块,添加数据保存功能。啊,弄了一早上,才把数据保存出来,这进度真的太慢了。不过好的是,学会了数据保存功能,测试代码如下。
可参见博文:https://blog.****.net/u013793399/article/details/53487596
仿真后的输出,如下。
2.2 接下来,终于可以仿真验证IPrecieve模块了。
废了九牛二虎之力,终于仿真成功了。期间之艰辛啊,因为一个“<=”写成了“=”,造成数据错位1字节,找了半天原因,才解决。
下面是仿真代码,因为输出数据是一个个“填”的,很长,这里只截取其中一段。仿真真是一个费心的事儿。
好了,下面就是仿真结果了。
详细的展开:
接收完成部分:
有图中可知,完全提取了接收数据的信息。到此,ipRecieve模块仿真完成。
△20181012 周五 UDP传输整体整合与设计。
Udp最大长度:
详细见博文,https://blog.****.net/baidu_32452525/article/details/69808572
△20181016 周二 综合测试
几经周折,在不断调试后,终于完成UDP程序的全部设计,这期间,特别加深了对Verilog编程的理解,感触很多。
好了,下面直接进入主题吧。
顶层设计接口如下:
综合后得到的RTL图如下:
接下来是仿真结果,仿真很重要,就是通过仿真,我一步步步找到问题,然后修改,最终得到正确的结果。
下面是测试代码的部分截图:
仿真结果如下:
展开
仿真正确后,开始板级验证。
采用网络调试助手测试,成功实现,UDP的数据发送和接收功能。
千兆以太网验证。
最后进行wireshark软件进行数据抓取,测试全部正确。
欢迎留言,交流,本人扣扣1021100382 ~