首页 > 其他分享 >MAC层接收逻辑处理及CRC校验接收数据

MAC层接收逻辑处理及CRC校验接收数据

时间:2025-01-15 13:34:02浏览次数:3  
标签:仿真 地址 校验 CRC MAC 接收数据 数据

前言

在上一章节中,笔者就以太网的CRC计算规则做了简单介绍,并对实现流程进行了讲解,以及代码仿真验证,在本节中,笔者将就以太网MAC层的接收代码做逻辑实现,并且做CRC计算,只有当板卡计算得到的CRC计算结果,与接收数据中的CRC校验结果一致,才认为本帧数据可靠,进行进一步接收利用,并且还需要判断MAC地址是否符合以及接收的报文类型是IP报文还是ARP报文,以传给不同的协议层模块进行处理,对于MAC地址的判断,主要判断当前数据要发送给的MAC地址是否是本机MAC地址或者是广播地址,这两类地址都进行接收,而对于源MAC地址,在初次建立连接时,可能不会配置上位机的MAC地址,所以这里不做校验,但做接收处理,在后续的IP层或者ARP层,进行IP地址判断,或者ARP表缓存即可。

代码实现逻辑梳理

  1. 接收到有效数据流
  2. 对有效数据流进行时序打拍,启动计数器,判断前导码和帧界定起始符是否正确,对于前导码,以太网的PHY芯片在接收过程中,可能7个H55,只会接收6个H55,所以在计数器计数时,当计数到6时,若此时数据为H55,应做一个计数器值的时钟周期保留,以保证在后面的数据流提取,以及MAC地址提取时,计数值的指向正确,否则,目的MAC的起始计数器值会存在差异,当只有6个H55,目的MAC在第8个数据开始,当有7个H55,目的MAC在第九个数据开始,造成后续差异,数据流处理会复杂。
  3. 缓存目的MAC地址,源MAC地址,协议类型,并启动CRC计算,若在CRC计算过程中,判断出MAC地址不符合,停止CRC计算,输出MAC地址错误信号。
  4. 去除MAC头部信息,将数据流存入RAM中,当MAC地址错误时,不进行数据缓存,当数据缓存完成,但CRC计算结果最终错误,清除本帧在RAM的地址存放,不进行数据的输出。
  5. 当CRC计算正确,根据报文类型,输入至IP处理模块或ARP处理模块。
  6. 注意事项,当以太网传来两帧数据,假设第一帧长度为500,第二帧长度为80,可能会导致第一帧CRC校验还没完成(情况比较极限),而第二帧数据已经到来,或是在输出第一帧数据时,第二帧数据到来,也要进行缓存,对于两帧的数据长度,为避免混淆,所以需要对每帧的数据长度进行FIFO缓存,保证CRC计算后,每帧输出数据的完整性与准确性。
  7. 注意事项,以太网PHY层处理后的数据,并没有数据长度信号,需要在该层进行实现,而FCS字段,位于末尾四个字节,不参与CRC计算,而数据流情况下,无法判断数据何时到达了FCS校验字段,故进入CRC计算的数据应该延迟5个时钟周期(4个计算周期+1个CRC计算延迟周期),在检测到,输入输入数据流下降沿时,在时序上,也正好吻合除了FCS字段外,全部进行了CRC校验,在下面的仿真测试中,会就该时序现象做重点观察,对于这类时序延迟处理,在编写代码时,首先明白原理,计算延迟,代码实现,再经过仿真调试,一次成功是比较困难的,仿真是必不可少的环节。

FPGA代码实现及仿真测试

在本节中,不对数据的缓存做详细介绍,如果后续有必要,会在之后的章节做详细的逻辑介绍,本节中,只实现逻辑梳理的所有功能。
仿真测试1,上位机传来一批数据,目的MAC为8’h11,8’h22,8’h33,8’h44,8’h55,8’h66,源MAC为
8’hA5,8’h67,8’hB3,8’hA6,8’hD5,8’hE6,目的MAC地址与板卡MAC地址一致
在这里插入图片描述
其中o_cache总线是输出去除MAC以及末尾FCS字段的数据报文,从图中可以看出,CRC计算结果与上位机发送来的CRC一致,r_rec_fcs即为上位机传来的CRC结果。仿真结果正确。

仿真测试2,上位机传来一批数据,目的MAC为8’h11,8’h22,8’h33,8’h44,8’h55,8’h77,源MAC为
8’hA5,8’h67,8’hB3,8’hA6,8’hD5,8’hE6,目的MAC地址与板卡MAC地址不一致。
在这里插入图片描述
仿真可真,校验出MAC地址不符合,不对本帧数据进行输出,且停止CRC校验。

标签:仿真,地址,校验,CRC,MAC,接收数据,数据
From: https://blog.csdn.net/zy12022000/article/details/145140000

相关文章

  • GIMP 3.0.0 (Linux, macOS, Windows) - 免费开源图像编辑器
    GIMP3.0.0(Linux,macOS,Windows)-免费开源图像编辑器GNUImageManipulationProgram(GIMP)请访问原文链接:https://sysin.org/blog/gimp/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgGIMPGNUIMAGEMANIPULATIONPROGRAM免费且开源的图像编辑器GIMP......
  • digiKam 8.5 (Linux, macOS, Windows) - 开源照片管理软件
    digiKam8.5(Linux,macOS,Windows)-开源照片管理软件ProfessionalPhotoManagementwiththePowerofOpenSource请访问原文链接:https://sysin.org/blog/digikam/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgdigiKam开源驱动的专业照片管理什么是dig......
  • C语言代码题:有评委对选手进行打分,分数为整数,接收数据为-1的时候结束,去掉一个最高分,去
    思路:    1、定义数组进行接收分数    2、用循环求最高分,最低分,总值    3、求平均分,输出#include<stdio.h>intmain(void){inti=0,val=0;inta[100]={0};doublemin=0,max=0,num=0,avg=0;//给数组赋值......
  • 你平时开发是用mac还是windows系统?至少举三个例子说明两者的区别?
    在前端开发中,我通常会选择使用Mac系统进行开发,但我也了解Windows系统,并且能够根据需要使用它。以下是Mac和Windows系统在前端开发方面的三个主要区别:用户界面与体验:Mac:Mac系统以其优雅的用户界面和流畅的操作体验著称。对于追求设计感和美感的开发者来说,Mac提供了一个更加整......
  • macOS 无法识别 SD 卡读卡器 bug All In One
    macOS无法识别SD卡读卡器bugAllInOneUSB接口插入SD卡读卡器,Finder没有任何反应❌demos(......
  • 【花雕学编程】Arduino动手做(246)---设置ESP8266 V3 通过串口输出软AP的IP、MAC和WiFi
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的......
  • RunMacro2003
    这是一款基于XML数据生成Excel/Word/PPT2003工具栏界面的COM加载项。在Excel2003的COM加载项勾选“RunMacro2003”,就可以看到自定义工具栏。示例XML内容如下:<CommandBars><CommandBarName="WorksheetMenuBar"><!--内置菜单栏--><CommandBar......
  • VMware17Pro虚拟机安装macOS教程
    下载所需文件官方正版VMware下载(17pro):通过网盘分享的文件:VMware17.5.rar链接:https://pan.baidu.com/s/15EtL6XUGCIxLpvOcDwL9Ew提取码:r6ic下载系统镜像:通过网盘分享的文件:macOS.Sonoma.14.5.K3.iso链接:https://pan.baidu.com/s/1H14E7snWdPhdcrRcQBtFew提取码:a6u2......
  • 基于 Performace 分析事件循环
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:千寻什么是事件循环?我们为什么需要事件循环?对于JavaScript是一门单线程语言我们是肯定的,JavaScript单线程的特性保证了渲染和Java......
  • 计算CRC循环校验码的简单C语言实现
    #include<stdio.h>#include<string.h>intdata[30];//数据intpoly[30];//生成式intmain(){charstr[30];//输入数据scanf("%s",str);intdata_len=strlen(str);for(inti=0;i<data_len;i++){data......