千兆以太网硬件设计及链路层 MAC 协议格式

news2024/12/25 23:48:48

以太网系列文章:
(1)千兆以太网硬件设计及链路层 MAC 协议格式
(2)千兆以太网网络层 ARP 协议的原理与 FPGA 实现
(3)CRC校验代码原理

文章目录

  • 前言
  • 一、以太网 MAC 层接口介绍
    • 1.MII 接口
    • 2.GMII 接口
    • 3.RGMII 接口
  • 二、以太网(MAC)帧协议介绍


前言

从本章开始,将分享千兆以太网设计的相关知识。将为大家分享千兆以太网硬件设计及链路层 MAC 协议格式、CRC校验原理与实现、网络层 ARP 协议的原理与FPGA 实现、网络层 IP 协议介绍与 IP 校验和算法实现、网传输层 UDP 协议原理与FPGA 实现、千兆以太网 UDP 回环测试等实验。
提示:以下是本篇文章正文内容,下面案例可供参考

一、以太网 MAC 层接口介绍

从数据传输角度来看,控制器(FPGA)和 PHY 侧芯片实现以太网传输的数据链路两端,有 3 种主要的接口形式。这 3 种接口形式主要是 MII,GMII 和 RGMII。MII 主要应用在百兆网传输中,而 GMII 和 RGMII 则均可以运用于千兆网,RGMII 相较于 GMII,则可以有更高的数据位通信效率。

1.MII 接口

MII 接口信号连接关系及各信号的介绍如下。
1
(注:表格中的方向是站在 MAC 侧角度看的)
在这里插入图片描述
在这里插入图片描述
其中,MAC 侧向 PHY 侧传输数据的时序图如下,参数 t1~t5 是 PHY 芯片能正常接收到数据需要满足的时序参数,VIL 和 VIH 是高低电平的电压标准,电压低于 VIL 表示低电平,电压高于 VIH表示高电平,详细参数参见具体的 PHY 芯片手册。从波形图可以看出,发送数据信号 TXD 和发送使能信号需要在时钟上升沿保持稳定。
在这里插入图片描述
PHY 侧向 MAC 侧传输数据(也就是 MAC 侧接收 PHY 侧传过来的数据)的时序图如下,参数 t1~t5是 PHY 芯片输出数据和与时钟之间的时序参数,VIL和 VIH是高低电平的电压标准,电压低于 VIL 表示低电平,电压高于 VIH 表示高电平,详细参数参见具体的 PHY 芯片手册。
从波形图可以看出,PHY 芯片传出(也就是 MAC 接收)数据信号 RXD 和数据有效信号在时钟上升沿保持稳定。在 MAC 接收数据时,需要根据传过来数据信号的时序特点进行正确的接收。
1

2.GMII 接口

GMII 接口信号连接关系及各信号的介绍如下。

1
(注:表格中的方向是站在 MAC 侧角度看的)
1
与 MII 接口类似,MAC 侧与 PHY 侧之间传输数据的时序图如下,图中的参数是 PHY 芯片能正常接收到数据和 PHY 发出数据需要满足的时序参数,VIL 和 VIH 是高低电平的电压标准,电压低于 VIL 表示低电平,电压高于 VIH 表示高电平,详细参数参见具体的 PHY 芯片手册。从波形图可以看出,发送数据信号 TXD 和发送使能信号需要在时钟 GTX_CLK 的上升沿保持稳定;同样的 PHY 芯片传出(也就是 MAC 接收)数据信号 RXD 和数据有效信号在时钟RX_CLK 上升沿保持稳定。在 MAC 发送/接收数据时,需要满足这些时序要求才能让 PHY 正确收到数据和正确接收到 PHY 传过来数据。
在这里插入图片描述

3.RGMII 接口

RGMII 即 ReducedGMII,是 GMII 的简化版本,将接口信号线数量从 24 根减少到 14 根,时钟频率仍旧为 125MHz,TX/RX 数据宽度从 8 位变为 4 位。RGMII 接口信号连接关系及各信号的介绍如下。
1
(注:表格中的方向是站在 MAC 侧角度看的)
在这里插入图片描述
在这里插入图片描述
RGMII 接口为了保持 1000Mbps 的传输速率不变,RGMII 接口在时钟的上升沿和下降沿都采样数据。在参考时钟的上升沿发送 GMII 接口中的 TXD[3:0]/RXD[3:0],在参考时钟的下降沿发送 GMII 接口中的 TXD[7:4]/RXD[7:4]。RGMII 同时也兼容 100Mbps 和 10Mbps 两种速率,此时参考时钟速率分别为 25MHz 和 2.5MHz。TX_CTL 信号线上传送 TX_EN 和 TX_ER 两种信息,在 TX_CLK 的上升沿,下降沿发送 TX_ER;同样的,RX_CTL 信号线上也传送 RX_DV和 RX_ER 两种信息,在 RX_CLK 的上升沿传输 RX_DV,下降沿传输 RX_ER。具体时序如下。关于 RTL8211 PHY 芯片具体时序参数与配置的 TXDLY 和 RXDLY 管脚的电平有关,详细可参见RTL8211 芯片手册。
【注:】要实现RGMII 接口的传输,只需要使用Vivado中ODDR或IDDR源语将数据变为时钟上升沿和下降沿传输即可,以至于都不需要任何编码。此部分可参考RGMII 与 GMII 转换电路设计

二、以太网(MAC)帧协议介绍

以太网是目前最流行的一种局域网组网技术(其他常见局域网组网技术还有令牌环局域网、无线局域网、ATM 局域网),以太网技术的正式标准是 IEEE 802.3 标准,它规定了在以太网中传输的数据帧结构,如下图所示。
在这里插入图片描述
在物理层上看,一个完整的以太网帧有 7 个字段,事实上,前两个字段并不能算是真正意义上的以太网数据帧,它们是以太网在物理层上发送以太网数据时添加上去的。为了实现底层数据的正确阐述,物理层使用 7 个字节前同步码(0 和 1 交替的 56 位(55-55-55-55-55-55-55))实现物理层帧输入/输出同步;使用 1 个字节的 SFD(帧首定界符,固定为 10101011)标识帧的开始。上图中剩下的 5 个字段是真正的以太网数据,其中包含了目的地址和源地址,它们都是 6 字节长度(通常每个网卡都有 1 个 6 个字节 MAC 地址,以在以太网中唯一地标识自己)。网卡接收数据时,通过将目的地址字段和自身的 MAC 地址做比较,判断是否接收该数据包。通常,将这里的 6 字节目的地址按照下面的格式来书写,如:00-01-02-03-04-05。这 6 个字节在以太网中是按照从左到右(先发该字段的高字节后发字段的低字节)的顺序发送的,同时对每个字节来说,最先发送的是最低位 bit0,最后是最高位 bit7。
各字段的简单介绍如下表。
1
在发送以太网帧头时,首先发送的前导码为 7 个字节长度的 0x55,用于帧的同步,它用于告诉潜在的接收方即将发送数据。那么为什么选择这7个字节长度的前导码为0x55呢?由于 0x55 的二进制表现形式为 0101 0101,相当于总线上出现了 7 个字节的 0101 0101。这样,相较总线的高低电平恒定而言,总线电平的波浪式频繁变化会成为一种判断特征,表征即将发送数据。
完成前导码的发送后,接下来发送帧开始符。帧开始符为 1 个字节的 0xD5。0xD5 的二进制表现形式为 1101 0101,其数据特征为出现了两个连续的高电平 1。
在以太网帧中,目的 MAC 地址可以分为三类:单播地址、多播地址和广播地址。单播
地址通常与一个具体网卡的 MAC 地址相对应,它要求第一个字节的 bit0(即最先发出去的位)必须是 0;多播地址则要求第一个字节的 bit0 为 1,这样,在网络中多播地址不会与任何网卡的 MAC 相同,多播数据可以被很多个网卡同时接收;广播地址的所有 48 位全为 1(即 FF-FF-FF-FF-FF-FF),同一局域网中的所有网卡可以接收广播数据包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《C++API设计》读书笔记(3):模式

本章内容 本章涵盖了一些与CAPI设计相关的设计模式和惯用法。 “设计模式(Design Pattern)”表示软件设计问题的一些通用解决方案。该术语来源于《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Softwar…

【查缺补漏 女娲补天】2023平安

秋招了,只根据自己的情况记录,大概率不会很全。标题是我觉得的重点。既搬砖也搬博客。 Telnet协议 远程登录和管理网路设备的标准协议TCP传输层之上:应用层工作模型:C/S模式(client/server)服务端端口号默…

LeNet-5

目录 一、知识点 二、代码 三、查看卷积层的feature map 1. 查看每层信息 ​2. show_featureMap.py 背景:LeNet-5是一个经典的CNN,由Yann LeCun在1998年提出,旨在解决手写数字识别问题。 一、知识点 1. iter()next() iter():…

【操作系统】聊聊C10K

什么是C10K问题 C10K 就是 Client 10000 问题,即“在同时连接到服务器的客户端数量超过 10000 个的环境中,即便硬件性能足够, 依然无法正常提供服务。 其实说白了就是并发请求1W个请求 同时进行连接服务端,服务端可以支撑服务。…

Linux系统之安装uptime-kuma服务器监控面板

Linux系统之安装uptime-kuma服务器监控面板 一、uptime-kuma介绍1.1 uptime-kuma简介1.2 uptime-kuma特点 二、本次实践环境介绍2.1 环境规划2.2 本次实践介绍2.3 环境要求 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装Node.js 四、部署…

post更新,put相当于删除重新增一条

索引数据 //删除后新增 PUT my_dynamic_temp/_doc/1 { “name”:“test”, “class”:“1204” } //覆盖更新 POST my_dynamic_temp/_update/1 { “doc”: { “name”:“test”, “class”:“1203”, “pernum”:“998” } }

springboot 集成mybatis-plus的使用

一、在spring boot中配置mybatis-plus 1、创建一个spring boot项目&#xff0c;注意勾选mysql 2、在pom.xml文件中添加mybatis-plus的依赖包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&qu…

瑞芯微RK3568:烧录系统

烧录系统 文章目录 烧录系统windowsLinuxupgrade_tool 工具烧写烧写 update.img擦除操作使用 rkflash.sh 脚本烧写 编译Linux_SDK后得到多个镜像文件 windows Windows 下通过瑞芯微开发工具&#xff08;RKDevTool&#xff09; 来烧写镜像。 Loader parameter uboot …

狂神docker

狂神说 docker 参考文章 -----docker 概述 docker 为什么会出现&#xff1f;–环境部署麻烦&#xff0c;两套环境&#xff08;开发-运维&#xff09; 我的电脑可以运行&#xff0c;到你那就不可用。 开发即运维–开发打包部署上线一条龙 环境配置十分麻烦&#xff0c;机器部署…

Spring Social微信登录

微信登录的appId获得可在微信开放平台申请&#xff0c;以下用测试号 1、完成WeixinProperties 用测试账号登录 public class WeixinProperties {private String appId "wxd99431bbff8305a0";private String appSecret "60f78681d063590a469f1b297feff3c4&q…

基于SSM+Vue的医学生在线学习交流平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【数字人】1、SadTalker | 使用语音驱动单张图片合成视频(CVPR2023)

Sad Talker&#xff1a;使用一张图片和一段语音来生成口型和头、面部视频 论文&#xff1a;SadTalker: Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 代码&#xff1a;https://github.com/Winfredy/SadTalker …

Linux命令200例:dip用于用户与远程主机建立通信连接

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

Stable DIffusion 炫酷应用 | AI嵌入艺术字+光影光效

目录 1 生成AI艺术字基本流程 1.1 生成黑白图 1.2 启用ControlNet 参数设置 1.3 选择大模型 写提示词 2 不同效果组合 2.1 更改提示词 2.2 更改ControlNet 2.2.1 更改模型或者预处理器 2.2.2 更改参数 3. 其他应用 3.1 AI光影字 本节需要用到ControlNet&#xff0c;可…

6.前端·新建子模块与开发(常规开发)

文章目录 学习资料常规开发创建组件与脚本菜单创建-新增自定义图标菜单创建-栏目创建 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p12&vd_sourceed09a620bf87401694f763818a31c91e 常规开发 创建组件与脚本 首先新建前端的目录结构&#xff0c;属于自己业…

CTF 全讲解:[SWPUCTF 2022 新生赛]webdog1__start

文章目录 参考环境题目learning.php信息收集isset()GET 请求查询字符串全局变量 $_GET MD5 绕过MD5韧性脆弱性 md5()弱比较隐式类型转换字符串连接数学运算布尔判断 相等运算符 MD5 绕过科学计数法前缀 0E 与 0e绕过 start.php信息收集头部检索 f14g.php信息收集 探秘 F1l1l1l1…

Springboot 实践(18)Nacos配置中心参数自动刷新测试

前文讲解了Nacos 2.2.3配置中心的服务端的下载安装&#xff0c;和springboot整合nacos的客户端。Springboot整合nacos关键在于使用的jar版本要匹配&#xff0c;文中使用版本如下&#xff1a; ☆ springboot版本: 2.1.5.RELEASE ☆ spring cloud版本 Greenwich.RELEASE ☆ sp…

Python 算数运算符

视频版教程 Python3零基础7天入门实战视频教程 Python支持所有的基本算术运算符&#xff0c;这些算术运算符用于执行基本的数学运算&#xff0c;如加、减、乘、除和求余等。下面是7个基本的算术运算符。 以下&#xff0c;假设变量a为10&#xff0c;变量b为21&#xff1a; 实…

OpenCV之YOLOv3目标检测

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 前言 一、预处理 1.获取分类名 2.获取输出层名称 3.图像尺度变换 二…

【JavaSE笔记】初识Java

一、前言 Java是一种非常优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义。 本文将通过一个简单的Java程序&#xff0c;介绍Java的一些基础内容。 二、Java基本结构 1、简单的Java程序 从最简单的一个Java程序开始逐渐了解Java语言。 以下是一段…