FPGA设计千兆以太网MAC(2)——以太网协议及设计规划
上篇该系列博文中通过MDIO接口实现了PHY芯片的状态检测,验证其已处于1000M 全双工工作模式。在设计MAC逻辑之前,要先清楚MAC与PHY之间的接口以及以太网协议细节,这样才能保证网络的兼容性。本文内容多来自Xilinx官方文档pg051 tri-mode-eth-mac.
1.GMII接口
此处使用较简单的GMII接口,接口列表及说明如下:
TX方向时钟tx_mac_aclk由FPGA给出,RX方向时钟gmii_rx_clk由PHY芯片经过内部CDR模块从接收数据中恢复出来,时钟频率均为125MHz。TX和RX方向基本均由三个信号组成:d en/dv er。查看开发板上使用的以太网PHY芯片RTL8211EG-VB datasheet中AC Characteristics:
数据在时钟上升沿采样,因此TX端可在时钟下降沿更新数据,RX端时钟上升沿接收数据即可。
2.以太网协议规范
MAC层的功能就是“成帧解帧”,接下来查看以太网数据帧结构和规则。
前导码、帧头符以及FCS在TX方向被MAC添加,在RX方向被剔除。接收端MAC逻辑会将SFD作为接收帧起始时刻。
关于长度/类型字段之前有所提及,Ethernet II帧长度/类型域解释为上层协议类型(字段值大于等于1536,即十六进制的0x0600),而IEEE802.3同样位置是长度字段(字段值小于等于1500,即十六进制的0x05DC)。若为EthernetII帧,接收端MAC不做处理。若为IEEE802.3帧,MAC则检测帧长度是否与该字段匹配,并在必要时去除pad域。
Pad域用来确保前导码和SFD之后的部分长度在64byte以上,也就是保证pad+data≥46byte。当data≥46byte时,不需要pad域。
FCS采用CRC32,多项式为:
接收端MAC会检测每个帧的FCS值,如果接收FCS错误,则MAC指示给上层用户接收到一个错误帧。
IEEE 802.3-2008规定,以太网帧间隔为96-bit时间以上。对于千兆网来说,t = Tbit*96 = (1/1000*1000*1000)*96s = 96ns。
3.流量控制高级话题
当收发两端的时钟频率出现细微偏差,持续一段时间后会导致频率较慢的一方缓存溢出。此时较慢一方需要告诉另一方暂停一段时间发送数据包以减轻自身缓存压力。“告诉”这一动作通过发送指定控制帧完成。
其中mac control parameters代表对方暂停的时间单位个数,在千兆网中若该数据为1则表示对方需暂停发送数据包512ns。当一方缓存即将溢出,则发送暂停帧。若此时正在发送数据帧,则等待当前帧发送完成。接收方收到pause帧后,依次检测目的地址及类型域,若目的地址为多播地址(01-80-c2-00-00-01)且符合pause帧操作码,则提取控制参数数值并通过拉低发送侧rdy信号来暂停发送。
4.系统设计
先定义MAC接口:用户侧包括发送数据通道,接收数据通道以及事件统计通道。PHY芯片侧同样有发送通道 接收通道和MDIO管理通道。用户侧数据位宽32bit,PHY芯片侧位宽8bit。
MAC内部设计结构可以参照Altera的以太网MAC IP核,可见内部主要由发送和接收处理逻辑、缓存部分、配置与统计以及MDIO控制模块五部分组成。
模块划分和接口定义完成后,开始写RTL代码。后续以发送方向为例,完成代码设计、行为仿真、时序约束及STA、板级调试。
FPGA设计千兆以太网MAC(2)——以太网协议及设计规划的更多相关文章
- 【重新发布,代码开源】FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片
原创博客,转载请注明出处:[重新发布,代码开源]FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片 - 没落骑士 - 博客园 https://www.cnblogs.com/m ...
- FPGA设计千兆以太网MAC(3)——数据缓存及位宽转换模块设计与验证
本文设计思想采用明德扬至简设计法.上一篇博文中定制了自定义MAC IP的结构,在用户侧需要位宽转换及数据缓存.本文以TX方向为例,设计并验证发送缓存模块.这里定义该模块可缓存4个最大长度数据包,用户根 ...
- 【转】简谈基于FPGA的千兆以太网
原文地址: http://blog.chinaaet.com/luhui/p/5100052903 大家好,又到了学习时间了,学习使人快乐.今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较 ...
- 【小梅哥FPGA进阶学习之旅】基于Altera FPGA 的DDR2+千兆以太网电路设计
DDR2电路设计 在高速大数据的应用中,高速大容量缓存是必不可少的硬件.当前在FPGA系统中使用较为广泛的高速大容量存储器有经典速度较低的单数据速率的SDRAM存储器,以及速度较高的双速率DDR.DD ...
- 千兆以太网TCP协议的FPGA实现
转自https://blog.csdn.net/zhipao6108/article/details/82386355 千兆以太网TCP协议的FPGA实现 Lzx 2017/4/20 写在前面,这应该 ...
- 【转】基于TMS320C6455的千兆以太网设计
基于TI公司最新DSP芯片TMS320C6455.设计并实现了以太网通信软硬件接口.采用TMS320C6455片内以太网接口模块EMAC/MDIO,结合片外AR8031 PHY芯片,在嵌入式操作系统D ...
- AC6102 开发板千兆以太网UDP传输实验2
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- AC6102 开发板千兆以太网UDP传输实验
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- 关于千兆以太网芯片及VLAN浅析
MARVEL出产的高端千兆以太网交换芯片,对每个端口支持不同的交换模式. 包括4种模式: Secure模式:所带VLAN tag必须存在于VTU表中,且入端口必须是该VLAN成员,否则丢弃报文. Ch ...
随机推荐
- Git 学习总结
概况 CVS 及 SVN 都是集中式的版本控制系统,而 Git 是分布式版本控制系统. 集中式版本控制系统最大的毛病就是必须联网才能工作: 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是 ...
- MongoDb 集群不可用后SECONDARY节点强制启动
机房意外断电断网不得不预防,下面模拟测试某机房断电断网,B机房断电断网后A机房可正常提供服务,A机房断电断网后可能需要强制重启继续提供服务了,目前查看数据都还在,暂时没验证是否有数据丢失,小试了一把. ...
- redis 安装-配置
下载链接: wget http://download.redis.io/releases/redis-4.0.9.tar.gz ※ 如果没有 直接复制url 到浏览器下载 1:下载完成 2:解压 t ...
- Centos7.3离线(rpm方式)安装mysql服务
1.mysql官网下载安装包,官网地址:www.mysql.com [root@seiang software]# ll total 580020 -rw-r--r--. 1 root root 59 ...
- LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度
我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问 ...
- [AI开发]将深度学习技术应用到实际项目
本文介绍如何将基于深度学习的目标检测算法应用到具体的项目开发中,体现深度学习技术在实际生产中的价值,算是AI算法的一个落地实现.本文算法部分可以参见前面几篇博客: [AI开发]Python+Tenso ...
- 编辑器开发之 Selection 对象的学习
上一篇,介绍了 range 对象的一些属性和方法,了解了一些基本操作,现在来介绍另外一个重要的对象:selection 对象: MDN 的解释是:Selection 对象表示用户选择的文本范围或插入符 ...
- python --- 冒泡排序算法
别想太多了,这个冒泡排序就是我们脑海中想到的那个冒泡,就好像是气泡一样,较小的元素比较轻,从而要往上浮出来, 冒泡排序算法. 要对‘气泡’序列处理若干遍.所谓一遍处理,就是自底向上检查一遍这个序列,并 ...
- java~mac下的终端工具oh-my-zsh
mac操作系统类似于linux,很多命令都是兼容的,确实挺好用,对于java,docker,git等开发来说,终端命令行是非常必要的工具,这里我介绍一下item2+oh-my-zsh的安装与使用. 安 ...
- sql的查询语句的总结
一:基本的查询sql 1:基本常用查询 select * from student; --select select all sex from student; --all 查询所有 select d ...