千兆通信中发送链路的定时器和心跳帧组建

本文介绍了一个使用FPGA构建MAC层和UDP组包的项目,目的是通过以太网UDP帧协议完成数据包传输。详细阐述了心跳包的产生流程,包括定时器模块和组帧模块的设计,确保每1s产生一次心跳包,并通过网络抓包工具验证数据包的正确性。
摘要由CSDN通过智能技术生成

设计任务:

项目使用 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值