扫盲-以太网MII接口类型大全-MII、RMII、SMII、GMII、RGMII、SGMII、XGMII、XAUI、RXAUI-程序员宅基地

技术标签: fpga开发  物联网  Linux PHY  iot  

一、简介

    MII是英文 Medium Independent Interface 的缩写,翻译成中文是“介质独立接口”,该接口一般应用于以太网硬件平台的MAC层和PHY层之间,MII接口的类型有很多,常用的有MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XLAUI等。下面对它们进行一一介绍。

二、MII接口类型

1、MII接口

在这里插入图片描述

    TX_ER(Transmit Error): 发送数据错误提示信号,同步于TX_CLK,高电平有效,表示TX_ER有效期内传输的数据无效。对于10Mbps速率下,TX_ER不起作用;

    TX_EN(Transmit Enable): 发送使能信号,只有在TX_EN有效期内传的数据才有效;

    TX_CLK:发送参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。注意,TX_CLK时钟的方向是从PHY侧指向MAC侧的,因此此时钟是由PHY提供的。

    TXD(Transmit Data)[3:0]:数据发送信号,共4根信号线;

    RX_ER(Receive Error): 接收数据错误提示信号,同步于RX_CLK,高电平有效,表示RX_ER有效期内传输的数据无效。对于10Mbps速率下,RX_ER不起作用;

    RX_DV(Reveive Data Valid): 接收数据有效信号,作用类型于发送通道的TX_EN;

    RXD(Receive Data)[3:0]:数据接收信号,共4根信号线;

    RX_CLK:接收数据参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。RX_CLK也是由PHY侧提供的。

    CRS:Carrier Sense,载波侦测信号,不需要同步于参考时钟,只要有数据传输,CRS就有效,另外,CRS只有PHY在半双工模式下有效;

    COL:Collision Detectd,冲突检测信号,不需要同步于参考时钟,只有PHY在半双工模式下有效。

    MII接口一共有16根线。
    

2、RMII接口

在这里插入图片描述
    RMII即 Reduced MII,是MII的简化板,连线数量由MII的16根减少为8根。

    TXD[1:0]:数据发送信号线,数据位宽为2,是MII接口的一半;

    RXD[1:0]:数据接收信号线,数据位宽为2,是MII接口的一半;

    TX_EN(Transmit Enable):数据发送使能信号,与MII接口中的该信号线功能一样;

    RX_ER(Receive Error):数据接收错误提示信号,与MII接口中的该信号线功能一样;

    CLK_REF是由外部时钟源提供的50MHz参考时钟,与MII接口不同,MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的。这里需要注意的是,由于数据接收时钟是由外部晶振提供而不是由载波信号提取的,所以在PHY层芯片内的数据接收部分需要设计一个FIFO,用来协调两个不同的时钟,在发送接收的数据时提供缓冲。PHY层芯片的发送部分则不需要FIFO,它直接将接收到的数据发送到MAC就可以了。

    CRS_DV:此信号是由MII接口中的RX_DV和CRS两个信号合并而成。当介质不空闲时,CRS_DV和RE_CLK相异步的方式给出。当CRS比RX_DV早结束时(即载波消失而队列中还有数据要传输时),就会出现CRS_DV在半位元组的边界以25MHz/2.5MHz的频率在0、1之间的来回切换。因此,MAC能够从 CRS_DV中精确的恢复出RX_DV和CRS。

    在100Mbps速率时,TX/RX每个时钟周期采样一个数据;在10Mbps速率时,TX/RX每隔10个周期采样一个数据,因而TX/RX数据需要在数据线上保留10个周期,相当于一个数据发送10次。

    当PHY层芯片收到有效的载波信号后,CRS_DV信号变为有效,此时如果FIFO中还没有数据,则它会发送出全0的数据给MAC,然后当FIFO中填入有效的数据帧,数据帧的开头是“101010—”交叉的前导码,当数据中出现“01”的比特时,代表正式数据传输开始,MAC芯片检测到这一变化,从而开始接收数据。

    当外部载波信号消失后,CRS_DV会变为无效,但如果FIFO中还有数据要发送时,CRS_DV在下一周期又会变为有效,然后再无效再有效,直到FIFO中数据发送完为止。在接收过程中如果出现无效的载波信号或者无效的数据编码,则RX_ER会变为有效,表示物理层芯片接收出错。

    

3、SMII接口

    SMII即Serial MII,串行MII的意思,跟RMII相比,连线进一步减少到4根;
在这里插入图片描述
    TXD:发送数据信号,位宽为1;

    RXD:接收数据信号,位宽为1;

    SYNC:收发数据同步信号,每10个时钟周期置1次高电平,指示同步。

    CLK_REF:所有端口共用的一个参考时钟,频率为125MHz,为什么100Mbps速率要用125MHz时钟?因为在每8位数据中会插入2位控制信号,请看下面介绍。

    TXD/RXD以10比特为一组,以SYNC为高电平来指示一组数据的开始,在SYNC变高后的10个时钟周期内,TXD上依次输出的数据是:TXD[7:0]、TX_EN、TX_ER,控制信号的含义与MII接口中的相同;RXD上依次输出的数据是:RXD[7:0]、RX_DV、CRS,RXD[7:0]的含义与RX_DV有关,当RX_DV为有效时(高电平),RXD[7:0]上传输的是物理层接收的数据。当RX_DV为无效时(低电平),RXD[7:0]上传输的是物理层的状态信息数据。见下表:
在这里插入图片描述
    当速率为10Mbps时,每一组数据要重复10次,MAC/PHY芯片每10个周期采样一次。MAC/PHY芯片在接收到数据后会进行串/并转换。

4、SSMII接口

    SSMII即Serial Sync MII,叫串行同步接口,跟SMII接口很类似,只是收发使用独立的参考时钟和同步时钟,不再像SMII那样收发共用参考时钟和同步时钟,传输距离比SMII更远。
在这里插入图片描述

5、SSSMII接口

    SSSMII即Source Sync Serial MII,叫源同步串行MII接口,SSSMII与SSMII的区别在于参考时钟和同步时钟的方向,SSMII的TX/RX参考时钟和同步时钟都是由PHY芯片提供的,而SSSMII的TX参考时钟和同步时钟是由MAC芯片提供的,RX参考时钟和同步时钟是由PHY芯片提供的,所以顾名思义叫源同步串行。
在这里插入图片描述

6、GMII接口

在这里插入图片描述
    与MII接口相比,GMII的数据宽度由4位变为8位,GMII接口中的控制信号如TX_ER、TX_EN、RX_ER、RX_DV、CRS和COL的作用同MII接口中的一样,发送参考时钟GTX_CLK和接收参考时钟RX_CLK的频率均为125MHz(1000Mbps/8=125MHz)。

    在这里有一点需要特别说明下,那就是发送参考时钟GTX_CLK,它和MII接口中的TX_CLK是不同的,MII接口中的TX_CLK是由PHY芯片提供给MAC芯片的,而GMII接口中的GTX_CLK是由MAC芯片提供给PHY芯片的。两者方向不一样。

    在实际应用中,绝大多数GMII接口都是兼容MII接口的,所以,一般的GMII接口都有两个发送参考时钟:TX_CLK和GTX_CLK(两者的方向是不一样的,前面已经说过了),在用作MII模式时,使用TX_CLK和8根数据线中的4根。

6、RGMII接口

在这里插入图片描述
    RGMII即Reduced GMII,是RGMII的简化版本,将接口信号线数量从24根减少到14根(COL/CRS端口状态指示信号,这里没有画出),时钟频率仍旧为125MHz,TX/RX数据宽度从8为变为4位,为了保持1000Mbps的传输速率不变,RGMII接口在时钟的上升沿和下降沿都采样数据。在参考时钟的上升沿发送GMII接口中的TXD[3:0]/RXD[3:0],在参考时钟的下降沿发送GMII接口中的TXD[7:4]/RXD[7:4]。RGMI同时也兼容100Mbps和10Mbps两种速率,此时参考时钟速率分别为25MHz和2.5MHz。

    TX_EN信号线上传送TX_EN和TX_ER两种信息,在TX_CLK的上升沿发送TX_EN,下降沿发送TX_ER;同样的,RX_DV信号线上也传送RX_DV和RX_ER两种信息,在RX_CLK的上升沿发送RX_DV,下降沿发送RX_ER。
在这里插入图片描述

7、SGMII接口

在这里插入图片描述
    SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。

    在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息,所以总的数据速率为1.25Gbps=625Mbps*2.

    其实,大多数MAC芯片的SGMII接口都可以配置成SerDes接口(在物理上完全兼容,只需配置寄存器即可),直接外接光模块,而不需要PHY层芯片,此时时钟速率仍旧是625MHz,不过此时跟SGMII接口不同,SGMII接口速率被提高到1.25Gbps是因为插入了控制信息,而SerDes端口速率被提高是因为进行了8B/10B变换,本来8B/10B变换是PHY芯片的工作,在SerDes接口中,因为外面不接PHY芯片,此时8B/10B变换在MAC芯片中完成了。8B/10B变换的主要作用是扰码,让信号中不出现过长的连“0”和连“1”情况,影响时钟信息的提取,关于8B/10B变换知识,我后续会单独介绍。

8、TBI 接口

    TBI即Ten Bit Interface的意思,接口数据位宽由GMII接口的8位增加到10位,其实,TBI接口跟GMII接口的差别不是很大,多出来的2位数据主要是因为在TBI接口下,MAC芯片在将数据发给PHY芯片之前进行了8B/10B变换(8B/10B变换本是在PHY芯片中完成的,前面已经说过了),另外,RX_CLK+/-是从接收数据中恢复出来的半频时钟,频率为62.5MHz,RX_CLK+/-不是差分信号,而是两个独立的信号,两者之间有180度的相位差,在这两个时钟的上升沿都采样数据。RX_CLK+/-也叫伪差分信号。除掉上面说到的之外,剩下的信号都跟GMII接口中的相同。

    大多数芯片的TBI接口和GMII接口兼容。在用作TBI接口时,CRS和COL一般不用。

9、RTBI 接口

    RTBI即Reduced TBI,简化版TBI,接口数据位宽为5bit,时钟频率为125MHz,在时钟的上升沿和下降沿都采样数据,同RGMII接口一样,TX_EN线上会传送TX_EN和TX_ER两种信息,在时钟的上升沿传TX_EN,下降沿传TX_ER;RX_DV线上传送RX_DV和RX_ER两种信息,在RX_CLK上升沿传RX_DV,下降沿传RX_ER。

    万兆以太网接口的端口速率为10Gbps,主要有XGMII和XAUI两种,另外还有HIGIG,不过HIGIG是Broadcom公司的私有标准,这里暂不介绍。

10、XGMII 接口

    TXD[31:0]:数据发送通道,32位并行数据。

    RXD[31:0]:数据接收通道,32位并行数据。

    TXC[3:0]:发送通道控制信号,TXC=0时,表示TXD上传输的是数据;TXC=1时,表示TXD上传输的是控制字符。TXC[3:0]分别对应TXD[31:24], TXD[23:16], TXD[15:8], TXD[7:0]。

    RXC[3:0]:接收通道控制信号,RXC=0时,表示RXD上传输的是数据;RXC=1时,表示RXD上传输的是控制字符。RXC[3:0]分别对应RXD[31:24], RXD[23:16], RXD[15:8], RXD[7:0]。

    TX_CLK:TXD和TXC的参考时钟,时钟频率156.25MHz,在时钟信号的上升沿和下降沿都采样数据。156.25MHz * 2 * 32 = 10Gbps 。

    RX_CLK:RXD和RXC的参考时钟,时钟频率156.25MHz,在时钟信号的上升沿和下降沿都采样数据。

    XGMII接口共74根连线,单端信号,采用HSTL/SSTL_2逻辑,端口电压1.5V/2.5V,由于SSTL_2的端口电压高,功耗大,现在已很少使用。HSTL即High Speed Transceiver Logic,高速发送逻辑的意思。SSTL,即Stub Series Terminated Logic,短路终止逻辑,主要用于高速内存接口,SSTL目前存在两种标准,SSTL_3是3.3V标准;SSTL_2是2.5V标准。

10、XAUI 接口

    由于受电气特性的影响,XGMII接口的PCB走线最大传输距离仅有7cm,并且XGMII接口的连线数量太多,给实际应用带来不便,因此,在实际应用中,XGMII接口通常被XAUI接口代替,XAUI即10 Gigabit attachment unit interface,10G附属单元接口,XAUI在XGMII的基础上实现了XGMII接口的物理距离扩展,将PCB走线的传输距离增加到50cm,使背板走线成为可能。

    源端XGMII把收发32位宽度数据流分为4个独立的lane通道,每个lane通道对应一个字节,经XGXS(XGMII Extender Sublayer)完成8B/10B编码后,将4个lane分别对应XAUI的4个独立通道,XAUI端口速率为:2.5Gbps * 1.25 * 4=12.5Gbps。

    在发送端的XGXS模块中,将TXD[31:0]/ RXD[31:0],TXC[3:0]/ RXC[3:0], TX_CLK/ RX_CLK转换成串行数据从TX Lane[3:0]/ RX Lane[3:0]中发出去,在接收端的XGXS模块中,串行数据被转换成并行,并且进行时钟恢复和补偿,完成时钟去抖,经过5B/4B解码后,重新聚合成XGMII。

    XAUI接口采用差分线,收发各四对,CML逻辑,AC耦合方式,耦合电容在10nF~100nF之间。

    XAUI接口可以直接接光模块,如XENPAK/X2等。也可以转换成一路10G信号XFI,接XFP/SFP+等。

    有些芯片不支持XAUI接口,只支持XGMII接口,这时可以用专门的芯片进行XGMII - XAUI接口转换,如BCM8011等。

三、SerDes 和 SGMII

    SerDes和SGMII,SGMII接口才是支持10/100/1000M自适应,SerDes接口仅仅具备1000Mbps数据收发功能,不支持速率的自适应。

    
    XAUI和SGMII的区别就是前者10G后者1G,他们都是介质无关的,就是跟你用电和光或者什么类型的传输模块没关系。

    XAUI有4个lane,每个lane走2.5G有效数据(实际是3.125G,因为每8bit下插2bits的csma/cd的控制信号),RXAUI是XAUI的reduce版,由4个lane变成2个,6.25G per lane。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014044624/article/details/123461149

智能推荐

人物故事丨那些年,和我们一起成长的数据服务岗应届生们-程序员宅基地

文章浏览阅读488次。那些年,和我们一起成长的应届生们在云和恩墨,有这样一个专业化团队,他们深耕于数据技术服务一线,围绕客户数据系统全生命周期需求,提供端到端的软件产品、专业服务和解决方案,持续为客户创造价值,..._云和恩墨适合应届生吗

PDO操作MySql类_hcoder 数据库操作类基于pdo class db { private static $oper-程序员宅基地

文章浏览阅读708次。为了让自己的数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类:由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不同数据库DSN的配置:/** * 类标准说明 PDO连接数据库的配置类 * 类名: ConfigDataBase * 功能说明: 为了让代码重用,利用此类可以动态的连接各种数据库 * 参数说明:_hcoder 数据库操作类基于pdo class db { private static $operater; private $t

HTML - 替换(置换)元素和非替换(置换)元素_置换元素和非置换元素-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏3次。通常我们都将html元素分为块级元素、行内元素以及行内块级元素,但是今天冲浪时发现一个将html元素分类的新名词对——替换元素和非替换元素,其实也可以称为置换元素和非置换元素。接下来就记录一下个人对于这个新名词对的一些浅显见解,如有问题,还望大佬指出~目录一、替换元素1.定义2.举例说明3.替换元素有哪些二、非替换元素1.定义2.举例说明3.非替换元素有哪些一、替换元素1.定义一个内容不受CSS视觉格式化模型控制,CSS渲染模型并不考虑对此内容的渲染,且元素本身一般拥有固有尺寸(宽度,高度,宽高._置换元素和非置换元素

VyOS安装和配置_vyos图形界面-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏21次。VyOS是基于Linux的网络操作系统,可提供基于软件的网络路由,防火墙和VPN功能。VyOS项目于2013年底开始,是Vyatta Core 6.6R1的GPL部分的社区分支,目的是维护一个自由和开源的网络操作系统,以响应终止Vyatta社区版本的决定。在这里,每个人都喜欢学习,老一辈的经理和新用户。VyOS主要基于Debian GNU / Linux和Quagga路由引擎。其配置语法和CLI大致是从XORP项目建模的Juniper JUNOS派生而来的,该项目是Vyatta的原始路由引擎。..._vyos图形界面

破世界纪录了 0.74 秒,用 Python 实现自动扫雷_自动扫雷软件-程序员宅基地

文章浏览阅读92次。破世界纪录了 0.74 秒!用 Python 实现自动扫雷!相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。▍0x00 准备准备动手制作一套扫雷自动化软件之前,你需要准备如下一些工具/软件_自动扫雷软件

cuda nvcc -V 显示版本与安装版本不符_nvcc -v和nvidia -smi输出版本不一样-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏12次。这个问题困扰了我很久。今天终于解决了,记录一下。造成这个结果的原因是cuda编译版本与runtime版本不符。安装的是10.0版本,也就是/usr/local/cuda-10.0(默认安装目录)。nvcc -V的结果是7.5。apt list|grep nvidia-cuda-tookit显示版本为7.5,找到原因了。卸载掉sudo apt autoremove nvidia-cuda-toolkit把安装版本加入环境变量export LD_LIBRARY_PATH=$LD_LIBRA_nvcc -v和nvidia -smi输出版本不一样

随便推点

Java基础-程序员宅基地

文章浏览阅读811次,点赞23次,收藏24次。Debug:是供程序员使用的调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。步骤1:加断点步骤2:运行Debug步骤3:下一步 F7步骤4:结束Debug 点击stop红点Object类是所有类的父类,是java.lang包下的核心类(java.lang下的所有包默认直接导入)所有类都可以继承Object中允许被继承的方法所有java类都是直接或间接集成Object类,如果一个类不继承任何一个类,那么它默认继承Object类。

[Java 27周年] 我与Java的缘-程序员宅基地

文章浏览阅读1k次,点赞38次,收藏26次。[Java 27周年] 我与Java的缘善于对自己提问题,这个为什么,那个为什么,只有这样,你才会提升和前进。

单元测试新手上路——个人实践总结_写单元测试用例的工作经历-程序员宅基地

文章浏览阅读324次。软件要易于修改:最近在看一本书《代码整洁之道:程序员的职业素养》,这本书里面说到,代码设计要遵循一个重要的原则-易于修改,并且要实现这个目标就应该经常修改它,而不是等到大量积累了臃肿代码之后再进行深度重构。 一套完善的测试用例是修改代码的安全保障:而如何保证在频繁修改优化代码之后,不影响其原本的功能呢?那就是要编写一套完善的测试用例,能覆盖到所有的链路场景,通过测试用例的执行结果来确保代码修改的正确性。特别是我们做金融场景业务的开发,尤其要注意代码的正确性、安全性,那么写好单测是不可或缺的_写单元测试用例的工作经历

如何用计算机名安装打印机,打印机如何安装驱动 电脑如何连接打印机-程序员宅基地

文章浏览阅读854次。[导读]说到打印机,相信各位并不陌生,但是轮到使用打印机可怕是许多朋友都未曾接触过的。比如说打印机安装驱动操作方法,电脑如何连接打印机,想必这些是许多朋友的疑问。下面我们就来说说打印机如何安装驱动、电脑如何连接打印机。说到打印机,相信各位并不陌生,但是轮到使用打印机可怕是许多朋友都未曾接触过的。比如说打印机安装驱动操作方法,电脑如何连接打印机,想必这些是许多朋友的疑问。下面我们就来说说打印机如何安..._如何连接电脑与打印机并正确安装打印机驱动

异常:java.lang.IllegalArgumentException: Removing a detached instance-程序员宅基地

文章浏览阅读2.5k次。我的源码 public Session getCurrentSession() { Session session = null; System.out.println("这是baseDao的session"); try { session = sessionFactory.getCurrentSession(); } catch (Exception e) { // ..._illegalargumentexception: removing a detached instance

oracle 存储过程中定义变量_oracle写存储过程怎么定义变量-程序员宅基地

文章浏览阅读1w次。create or replace procedure proc1isp_name sut.name%type;beginselect name into p_name from sut where id='12072226';dbms_output.put_line(p_name);end proc1;/注意定义方式_oracle写存储过程怎么定义变量