设计任务:
项目使用 FPGA 来构建 MAC 层和 UDP 组包,完成从板卡到主机的数据包传递链路。
项目目的:
通过学习以太网的 UDP 帧协议,完成包的构建和使用网络抓包工具抓包分析数据包是否正确。
千兆以太网心跳包的产生流程
第一:根据 Timer 定时器产生触发条件,触发产生心跳包,在一些系统中需要根据需求发送心跳包。
第二:根据以太网协议把 UDP 的基本帧结构构建出来。
第三:UDP 包包含两个校验和需要计算,我们这里是使用硬件进行校验和计算,也就是用 FPGA 逻辑电路搭建一个校验和计算模块。
第四:在帧的尾部添加 4 个字节的 CRC 校验字段,完成整个帧的设计。
第五:通过 ODDR 模块完成 8 比特到 4 比特的转换操作。
心跳定时器:
上电后启动定时器每隔 1s 时间产生定时心跳脉冲,这样保证循环产生心跳包的 激励信号。此信号输出给 UDP 组帧模块,作为组帧的激励。
心跳定时器代码实现:
`timescale 1ns / 1ps
module timer #(
parameter SIM_FLAG = 0
)
(
input wire tx_clk,
input wire rst,
output wire timer_pulse
);
parameter ONE_S = 124999999;
parameter SIM_V = 2047;
reg [26:0] timer_cnt;
reg timer_pulse_r;
assign timer_pulse = timer_pulse_r;
always @(posedge tx_clk) begin
if (rst == 1'b1) begin
timer_cnt <= 'd0;
end
else if (SIM_FLAG == 1'b0) begin
if(timer_cnt == ONE_S) begin
timer_cnt <='d0;
end
else begin
timer_cnt <= timer_cnt + 1'b1