万兆以太网MAC设计(3)MAC_RX模块添加CRC

文章目录

前言

上文介绍的MAC_RX模块实现了接受字节对齐的功能,但是尾端存在4字节CRC校验未处理。

一、并行CRC处理

前面在千兆以太网里对CRC代码和使用进行了介绍,千兆里面数据是一个一个byte进来的,但是在万兆里面数据一次性进来8byte,所以需要修改CRC模块使其进行并行处理,一次性计算8个byte的CRC结果。

注意一下几点:

  1. CRC数据需要单独提取,因为CRC是从目的MAC就开始进行校验,其过程与恢复AXIS_data一致,充分理解上文内容即可。
  2. 解析接收到的CRC结果,与我们计算出来的进行比对,得出CRC_ERROR结果
  3. 最后一拍进入CRC计算模块的数据需要增加一个keep掩码信号,原来指示这拍数据当中需要几个数据参与校验

这部分代码极其繁琐,具体参考:https://github.com/shun6-6/Ten_gig_eth_design 当中的 CRC32_64bKEEP文件

c 复制代码
module CRC32_64bKEEP(
  input             i_clk       ,
  input             i_rst       ,
  input             i_en        ,
  input  [7 :0]     i_data      ,
  input  [7 :0]     i_data_1    ,
  input  [7 :0]     i_data_2    ,
  input  [7 :0]     i_data_3    ,
  input  [7 :0]     i_data_4    ,
  input  [7 :0]     i_data_5    ,
  input  [7 :0]     i_data_6    ,
  input  [7 :0]     i_data_7    ,
  output [31:0]     o_crc_8       ,//8个byte全部参与校验的结果
  output [31:0]     o_crc_1     ,//1个byte全部参与校验的结果
  output [31:0]     o_crc_2     ,//2个byte全部参与校验的结果
  output [31:0]     o_crc_3     ,//3个byte全部参与校验的结果
  output [31:0]     o_crc_4     ,//4个byte全部参与校验的结果
  output [31:0]     o_crc_5     ,//5个byte全部参与校验的结果
  output [31:0]     o_crc_6     ,//6个byte全部参与校验的结果
  output [31:0]     o_crc_7      //7个byte全部参与校验的结果 
);

o_crc_8表示当前输入的8byte数据全部需要参与CRC校验,也就是说crc_keep为8'b1111_1111,o_crc_1则表示只有第一个byte参与CRC,也就是说crc_keep为8'b1000_0000。

通过http://www.ip33.com/crc.html在线计算CRC来验证模块是否正确校验。

第一个8byte数据为ff ff ff ff ff ff 01 02 03

  • 全部有效的时候,查看o_crc_8波形可以看出校验结果为68779D8E,与网站计算一致;
  • 若只有7个byte有效,结果如下图所示为A54406F6,在波形里查看o_crc_7,结果一致。

二、添加CRC处理的MAC_RX模块

添加CRC处理之后这部分代码整体可以分为俩部分,第一部分为上文当中的AXIS恢复过程,只不过在此基础上又去除了尾端4字节的CRC;第二部分则是仿照AXIS恢复的过程,将参与CRC校验的字段r_crc_data提取出来,以及r_crc_keep、r_crc_end、r_crc_en等信息,其实就是分别对应AXIS当中的data、keep、last以及valid,所以这俩部分极度相似。

俩者波形样子也差不多一致,粉色波形为CRC相关信号,上面绿色为AXIS相关信号。

三、总结

该模块整体来说变得很复杂了已经,完整模块代码参考:https://github.com/shun6-6/Ten_gig_eth_design

相关推荐
web打印社区7 分钟前
JS 静默打印怎么做:纯前端为什么不行,以及最小可跑通写法
开发语言·前端·javascript·websocket·网络协议·http·pdf
bing.shao11 分钟前
让机器从数据中生成本领:诺因Knowin通用具身智能生成式学习架构GLOW深度解析
学习·架构
阳光九叶草LXGZXJ22 分钟前
达梦数据库-学习-69-DM9主备集群部署
linux·运维·服务器·数据库·sql·学习
一条破秋裤26 分钟前
TCP 并发服务器:连接分析、多线程与多进程
服务器·网络·tcp/ip
Molesidy34 分钟前
【Embedded Development】【高级MCU篇】基于野火STM32H750XBH6_Pro开发板的高级MCU开发学习之1点亮led
stm32·单片机·学习
星恒随风1 小时前
Linux开发工具详解(一):软件包管理、Vim、GCC/G++、Makefile与进度条实战
linux·运维·笔记·学习·vim
传奇开心果编程1 小时前
【ArkUI进阶练中学】第10课:架构设计与工程化最佳实践
学习·ui·华为·harmonyos
在猴站学算法1 小时前
(SQL注入学习)联合查询注入(UNION-Based)
sql·学习·网络安全
自己的九又四分之三站台1 小时前
TCP 与 UDP:从可靠字节流到无连接数据报,怎么选、怎么测
网络协议·tcp/ip·udp
liangshanbo12151 小时前
面试题:游戏、直播为什么常用 UDP?KCP 是什么?为什么比 TCP 更适合低延迟场景?
tcp/ip·游戏·udp