前言:前面实现了pc机下发数据包通过以太网传输到fpga并在显示屏上显示。本篇要实现pc机下发数据包通过以太网传输到fpga,然后再通过以太网传回到pc机上。
文章目录
一、整体逻辑框图:
Timer:根据 Timer 定时器产生触发条件,触发产生心跳包,在一些系统中需要根据需求发送心跳包。
Gen_frame_ctrl:根据以太网协议把 UDP 的基本帧结构构建出来。
checksum_ctrl:UDP 包含有两个校验和需要计算,我们这里是使用硬件进行校验和计算,也就是用 FPGA 逻辑电路搭建一个校验和计算模块。
crc_ctrl:在帧的尾部添加 4 个字节的 CRC 校验字段,完成整个帧的设计。
oddr_CTRL:通过 ODDR 模块完成 8 比特到 4 比特的转换操作。
数据流框图:
二、Timer模块:
三、Gen_frame_ctrl模块:
其中组包部分使用case语句完成:
解释:
1.每一包数据开始都会有帧头、EII 格式等 50 个字节,最后会有四个数据校验位,这里定义 64 个 0x00 作为心跳数据。
2.目的 mac 地址设置成 ff_ff_ff_ff_ff_ff,目的 IP 地址设置成 ff_ff_ff_ff,这些叫做广播 MAC 地址和广播 IP 地址,即所有电脑都可以接收,源 MAC 地址我们可以随便填写一个MAC 地址即可。
这里令:
源mac地址:a8_bb_c8_07_d9_9f
源ip地址:192.168.0.1
目的/源 port 口可以设置为 0-65535任意一个,
此处port源为:1234。
port目的:123
四 、checksum_ctrl模块
1.ip_checksum 计算
2. udp_checksum计算
3. 将checksum计算结果插入到udp包中
五、Crc_ctrl模块:
六、oddr_ctrl
module oddr_ctrl(
input wire sclk,
input wire [7:0] tx_dat,
input wire tx_en,
output wire [3: