千兆UDP学习调试记录(二)
注:本文主要是对Verilog源码进行整体分析,补充UDP协议传输的相关知识,为下一步源码分析做准备。
接下来,就是分析代码了。几大疑问:
- 程序中并没有MAC层的处理,也没有用MAC的IP核,所以该程序是用硬件来解决MAC层的吗?
- UDP的发送和接收模块都很清晰,分析其流程和通用性,看能否能行拓展。
- 寻找方法,或编写程序,对该UDP传输进行测试,看起最大传输速率。
20181007 周日
首先进行程序梳理。
△GMII的理解,参见博文,讲得很好:https://www.cnblogs.com/geekite/p/5204512.html
MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口和一个MAC和PHY之间的管理接口。数据接口包括分别用于发送器和接收器的两条独立信道,每条信道都有自己的数据、时钟和控制信号。
MII总线是一种用于将不同类型的PHY与相同网络控制器(MAC)相连接的通用总线。
通过逐字学习,原来MAC层的实现,是通过硬件网卡完成的,所以,在程序中不用编写了。
△开发板的硬件设置
RTL8211EG 支持MDI/MDX 自适应,各种速度自适应,Master/Slave 自适应,支持
MDIO 总线进行 PHY 的寄存器管理。
连接示意图。
也就是说,通过FPGA控制RTL8211EG芯片,就能实现物理层和链路层的功能了,在FPGA端,只需考虑传输层即可。
当然,可以通过固定PHY管脚一些参数,可以配置其工作模式。
△程序的UCF解读。
1)SLEW 压摆约束:NET “FAST_OUT” SLEW=”FAST” ;
说明:输出斜率控制,可选为FAST以及SLOW,可以提高设计的信号完整性。
2)周期约束设计:NET “usr_clk” TNM_NET= “usr_clk”;
TIMESPEC “TS_usr_clk” = PERIOD “usr_clk” 5.0ns
说明:第一条约束定义时钟usr_clk驱动的所有同步器件为一个分组;第二条约束定义其周期为5ns,即200MHZ。
△RAM分析
双口RAM,进32位,出32位,深度为400,主要功能是将以太网形式的32bit数据,转换为GMII接口需要的8bit位宽数据。
△关于CRC。在该网站上选择生成多项式,而生成Verilog代码,如下。
http://www.easics.com/webtools/crctool
代码分析:CRC初值设为32位的1,来一个8bit位宽的数据,更新一次CRC值,CRC值是累积的,与前值有关。
千兆以太网时钟是125Mhz,每个时钟下,都会更新来8bit数据,超级快。
补充:此CRC为自定义添加,只针对UDP帧头到数据末尾,不对其他数据位进行校验,也就是说,只有数据到了UDP帧头才开始计算CRC,到数据末尾结束,并将结果(32bit=4Byte)附在末尾。
有兴趣的朋友,欢迎留言,交流,本人扣扣1021100382 ~