千兆通信中发送链路的 CRC 模块和 ODDR 模块实现

本文介绍了如何使用FPGA来构建MAC层和UDP组包,重点讲解了心跳包的产生流程,包括CRC校验模块和ODDR模块的详细设计。CRC模块用于计算UDP包的校验和,而ODDR模块则用于将8比特数据转换为4比特双沿数据流,以适应千兆以太网通信需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计任务:

使用 FPGA 来构建 MAC 层和 UDP 组包,完成从板卡到主机的数据包传递链路。

项目目的:

通过学习以太网的 UDP 帧协议,完成包的构建和使用网络抓包工具抓包分析数据包是否正确。

千兆以太网心跳包的产生流程:

 第一:根据 Timer 定时器产生触发条件,触发产生心跳包,在一些系统中需要根据需求发送心跳包。

第二:根据以太网协议把 UDP 的基本帧结构构建出来。

第三:UDP 包包含两个校验和需要计算,我们这里是使用硬件进行校验和计算,也就是用 FPGA 逻辑电路搭建一个校验和计算模块。

第四:在帧的尾部添加 4 个字节的 CRC 校验字段,完成整个帧的设计。

第五:通过 ODDR 模块完成 8 比特到 4 比特的转换操作。

CRC 填充模块:

将 checksum 模块组成的有 CRC 校验的千兆以太网 UDP 协议包传输到 crc_ctrl 模块,在该模块中推导出 32 位 crc 校验位, CRC 进行校验时不对千兆以太网帧头计算,即 7 个 0x55 和 1 个 0xd5 不参与 CRC 校验,将推导出的 32bit 的 crc 校 验码分成 4 个字节填充到 checksum_ctrl 模块传输来的没有 CRC 校验的千兆以太 网 UDP 协议包后面,即可组成完整的千兆以太网 UDP 包。

1. CRC 计算模块初始值为 0xffffffff

2. CRC 计算结果需要高低位对调,因为我们输入是先从高位输入计算的 CRC, 所以高低位要需要对调。

3. CRC 最后结果需要取反,对调完成的代码需要取反操作才能正确。

以上三步是标准千兆以太网所定义适用于以太网通信。

 

CRC 填充模块代码实现:

module crc32_d8_send_02(
        input    wire        rst,
        input    wire        sclk,
    
        input    wire        dsin,
        input    wire    [7:0]    din,
        input    wire        pre_flag,
        input    wire        crc_err_en,

        output    reg        dsout,
        output    reg    [7:0]    dout
        );
        
//***

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值