实验介绍
----为了完成基本的以太网回环测试,我们提供了一个基于FPGA的以太网回环测试DEMO。该DEMO使用UDP协议,接收PC发送的UDP数据包,提取出其中的数据部分并使用UDP协议发回给PC。整个系统框图如下图所示:
----本例程在小梅哥团队出品的AC6102开发板上使用verilog实现以太网UDP协议通信。FPGA程序接收到上位机发来的UDP数据包,通过解析目标MAC address来确定是否是发给FPGA的数据包。如果是的话,把数据包中的数据部分保存到fifo中。然后FPGA 的发送程序再把 fifo 的数据包发送回上位机。
程序说明
----本例对应的例程工程压缩包名为AC6102_GMII_UDP_Loopback_Test.rar,该文件可在我们提供的配套资料中找到。也可以从下面的附件下载。
----其中rtl文件夹下存放的为程序源码,这里对其中几个重要文件(夹)简单说明下功能:
文件或文件夹名 | |
GMII_UDP_Loopback_Test.qpf | 工程文件,使用Quartus II 13.0打开。 |
GMII_UDP_Loopback_Test.qsf | 工程配置文件,记录了工程相关的各个设置,包括引脚分配。 |
GMII_UDP_Loopback_Test.sdc | 工程的时序约束文件,约束了时钟和以太网的IO时序。 |
| Signaltap II工具的设置文件,抓取MII接口的发送和接收接口的时序信息 |
| |
-rtl/udp_gmii_rx/udp_gmii_rx.v | UDP协议接收模块,该模块能够完整的解析从以太网PHY的MII接口收到的数据并解析得到UDP报文的数据部分。事实上,该模块是实现了MAC层、IP层、UDP协议层的多层解析之后,最终直接得到传输的用户数据部分。 |
-rtl/udp_gmii_rx/crc32_d8_rx.v | CRC32校验逻辑,实现对MAC层数据的CRC32校验功能 |
-rtl//udp_gmii_rx/ip_checksum.v | IP报头校验和计算模块,该模块通过IP首部校验和算法对IP的头部进行计算,并得出一个数值,该值用来检测数据是否出错,如果计算的结果与IP数据报本身包含的报头校验和不相等,则数据在传输过程中发生了错误,当被舍弃。 |
-rtl/udp_gmii_tx/eth_dcfifo.v | UDP发送数据缓存FIFO,用户将需要发送的数据写入该FIFO,然后由UDP_Send中的发送逻辑将数据读出并最终以UDP协议发送。 |
-rtl/udp_gmii_tx/CRC32_D8.v | CRC32校验逻辑,计算经由MAC层发送的数据的CRC值并附加在MAC结尾发送。 |
-rtl/udp_gmii_tx/UDP_Send.v | UDP协议发送模块,该模块将用户输入的需要发送的数据内容经过UDP、IP、MAC层协议层层打包后,通过GMII接口输出给以太网PHY芯片,以完成数据的发送。 |
-rtl/GMII_UDP_Loopback_Test.v | 整个工程的设计顶层文件,例化了UDP接收和UDP发送模块, 实现完整的回环测试功能。 |
-output_files /GMII_UDP_Loopback_Test.sof | 预先编译好的FPGA配置文件,将该文件下载到开发板中即可进行测试。 |
实验步骤
----1、 使用网线将开发板上的以太网接口和您当前调试测试工程用的PC机的网口连接起来。连接好下载线缆并给开发板上电。
----2、 双击GMII_UDP_Loopback_Test.qpf以打开工程(强烈建议使用工程创建时候对应的版本即Quartus II 13.0打开,使用其他版本打开或编译遇到问题,请自行解决)。
----3、 下载GMII_UDP_Loopback_Test.sof文件到开发板中,注意这一步一定要先于下面的步骤执行,否则以下操作无法正常进行。
----4、 在电脑上进入【控制面板】->【网络和 Internet】->【查看网络状态和任务】,查看网络连接状态。需要看到在活动网络中有本地连接存在,才表明开发板和电脑的网络才已经连通。此时如果重新下载sof文件到开发板中,会发现此本地连接会先消失,然后再重新出现。至于显示的无法连接到网络选项,意思是指无法连接到互联网获取网络上的数据,这是正常的,无需在意。
----5、 点击“本地连接”文字,以查看该网络状态,确认当前连接速度为千兆速率(1000.0 Mbps)
----在上述本地连接状态中,点击属性,并在弹出的属性对话框中双击【Internet 协议版本 4 (TCP/Ipv4)】选项,然后再弹出的属性对话框中设置静态IP地址。如下图所示。
----6、 由于本测试工程不支持ARP协议,因此只能通过静态绑定的方式来强制将开发板的IP地址和MAC地址关联在一起。这样,当 PC发送给192.168.0.2的数据包的时候,目标MAC地址自动为开发板的MAC地址。
----操作时先以管理员身份运行cmd.exe程序(该文件在C:\Windows\System32路径下),也就是我们常说的命令行窗口。由于有用户反应在使用时无法成功绑定arp,经过分析就是操作权限不够,所以这里强调要以管理员身份运行cmd.exe。然后在窗口中输入下述命令:
arp -s 192.168.0.2 00-07-ed-ac-62-00
----绑定后我们可以用arp -a命令来查看PC上绑定的结果,如下图所示:
----7、 打开网络调试助手(NetAssist.exe)并按照如下所述设置各项参数。
--------1)、选择协议类型为UDP。
--------2)、设置本地IP地址为192.168.0.3。
--------3)、设置本地端口号为6102。
--------4)、点击【连接】按钮以创建连接,连接上后该按钮为红色“断开”字样。
--------5)、连接上后,设置目标主机为192.168.0.2,目标端口为5000。
--------6)、在文本框中输入希望发送的文本内容。
--------7)、点击发送按钮,即可在上方的接收窗口中显示FPGA发回的数据,与发送的内容一致.
--------8)、在下方的计数器中,检查发送的数据个数与接受的数据个数是否一致。
----8、 在发送窗口中输入你希望发送的数据,然后点击发送,则上方的接收窗口会接收到与发送框完全一样的内容,每点击一次发送,就会收到一次数据。
----9、 安装网络抓包工具 Wireshark, 我们在实验的时候可以用这工具来查看 PC 网口发送的数据和接收到的数据。
----10、 打开安装好的wireshark抓包工具。在软件界面选择您PC的有线网卡,按开始按钮开始抓包。(不同的版本界面有所差异,我们提供的是
Wireshark_win64_V1.12.4_setup.1427187922.exe)。
----在wireshark抓包窗口我们可以看到开发板(192.168.0.2)向PC网口(192.168.0.3)发来的数据包。
----11、 双击stp1.stp文件以打开嵌入式逻辑分析仪工具,然后run,PC端发送数据,则可以在Signaltap II上抓取到数据波形,如下图所示:
----至此,则完成了基于FPGA的千兆以太网GMII接口的UDP协议数据收发回环测试。在本例中介绍的设置IP地址、绑定ARP地址、wireshark抓包、以太网调试软件的使用等内容,在后续的实验中都有可能需要,请大家留意。