【必读】从MII到RGMII,一文了解以太网PHY芯片不同传输接口信号时序!

news2024/11/26 19:25:53

1、概述

  不管是使用FPGA还是ARM,想要实现以太网通信,都离不开以太网PHY芯片,其功能如下所示,FPGA或者ARM将以太网数据发送给PHY芯片,PHY会将接收数据转换成模拟的差分信号传输到RJ45座子,最后通过网线与CPU、FPGA等网线连接的设备通信。PHY芯片实现的功能相当于OSI模型中的物理层。
在这里插入图片描述

图1 phy信号传输图

  上述介绍适用于三速以太网(10M/100M/1000M),万兆以太网后续会讲解。大家其实要注意一点,如同以太网phy芯片、摄像头采集芯片,高速ADC等芯片,他们传输数据的速率是比较快的,但是一颗芯片往往存在很多功能,比如以太网PHY芯片可以设置不同的传输速率,10M还是100M,全双工还是半双工,摄像头芯片采集不同分辨率不同刷新率的图片。

  要实现上述功能切换,主控芯片需要通过一个接口去配置这些芯片内部的寄存器,配置这些寄存器往往没有速度要求,那么串口就是最好的选择,可以减少走线,便于PCB布局布线。摄像头芯片实现这类功能使用的是类似IIC协议的SCCB串口通信协议,而以太网PHY芯片是通过MDIO这种串行接口实现内部寄存器的配置。

  不同的以太网PHY往往可以通过不同的接口与主控芯片(FPGA/ARM等)传输数据,以三速以太网为例,可以通过MII,RMII,GMII,RGMII进行数据传输。

  通过上文描述,大致可以知道以太网PHY芯片包含三组数据线,一组用于配置其内部寄存器的串行接口MDIO,一组与RJ45连接的物理差分接口,一组用于和主控芯片传输数据的并行总线, 可能是MII、GMII、RMII、GRMII其中一种,与硬件及寄存器配置有关。

  下文先讲解以太网PHY芯片与主控芯片不同传输接口信号时序,然后讲解配置寄存器的MDIO接口时序,后文通过对具体主控芯片的手册,原理图讲解来对照这些接口。

2、MII接口

  该接口相关信号如图2所示,有MII(Media Independent Interface)接口大致可以分为两组信号,一组信号负责发送数据给MAC侧,另一组将MAC需要发送的信号输入,然后转换成模拟差分信号,经过RJ45接口输出。
在这里插入图片描述

图2 MII接口信号

  该接口的信号的相关含义如表1所示,表中信号方向针对PHY芯片来说,I表示输入,O表示输出。

表1 MII接口信号
信号方向位宽含义
RX_CLKO1发送时钟,PHY芯片产生,100Mbps时为25MHz,10Mbps时为 2.5MHz。
RX_DVO1高电平表示发送的数据有效。
RX_ERO1高电平表示发送数据的错误,接收端不接受该数据。
RX_DO4发送数据总线。
TX_CLKO1接收时钟,PHY芯片产生,频率与RX_CLK一致。
TX_ENI1高电平表示接收的数据有效。
TX_ERI1高电平表示接收的数据包有误,丢弃该数据包。
TX_DI4接收数据总线。
CRSO1载波侦测信号,不需要同步于参考时钟,有数据传输,CRS就有效,仅PHY在半双工模式下有效。
COLO1冲突检测信号,不需要同步于参考时钟,仅PHY在半双工模式下有效。

  PHY芯片向MAC传输数据的接口时序如下图所示,PHY芯片在RX_CLK下降沿输出数据RX_DATA,两个时钟发送一字节数据,先发送低四位数据,后发送高四位数据,发送数据时RX_DV信号拉高。 MAC侧在时钟上升沿采集RX_DV和RX_DATA状态。

在这里插入图片描述

图3 MAC侧接收数据时序

  下图是该接口MAC侧发数据给PHY芯片的时序,依旧是下降沿输出数据,方便接收端在上升沿对数据进行采样。

在这里插入图片描述

图4 MAC侧发送数据时序

  MII接口只能实现100Mbps、10Mbps速率的数据传输,不能实现1000Mbps。 发送、接收的数据线均为4位,则每个时钟周期发送或接收4位数据。如果要实现100Mbps通信速率,那么时钟频率就应该是25MHz。如果要实现10Mbps通信速率,那么时钟频率就应该是2.5MHz。

  接口的时序总体比较简单,注意发送、接收的时钟信号都是PHY芯片输出即可,FPGA一般使用的都是千兆以太网,要求较高时,使用万兆网,所以MII接口在FPGA中不是很常见,在ARM中更常见。

3 、RMII接口

  RMII(Reduced Media Independent Interface)接口其实就是MII接口的简化版本,将TX_CLK和RX_CLK合并为双向时钟线REF_CLK,由外部的晶振同时给PHY芯片和MAC主控芯片提供时钟信号。 将4位的数据线简化为2位。对应的接口信号如图5所示。
在这里插入图片描述

图5 RMII接口信号

  对应信号的含义如表2所示:

表2 RMII接口信号
信号方向位宽含义
REF_CLKI1参考时钟,外部晶振产生,100Mbps时为50MHz,10Mbps时为5MHz。
CRS_DVO1高电平表示发送的数据有效。
RX_ERO1高电平表示发送数据的错误,接收端不接受该数据。
RX_DO2发送数据总线。
TX_ENI1高电平表示接收的数据有效。
TX_DI2接收数据总线。

  RMII将发送时钟、接收时钟合并为参考时钟信号,把4位的数据线简化为2位数据线,可以简化PCB布局布线。RMII同样只能实现100Mbps和10Mbps,当以100Mbps速率传输数据时,每个时钟传输2位数据,此时参考时钟应该设置为50MHz。当以10Mbps速率传输数据时,参考时钟应设置为5MHz。

  RMII接口时序与MII完全一致,所以不在赘述。

4 、GMII接口

  GMII(Gigabit Media Independent Interface)接口是比较常见的千兆网接口,明德扬、小梅哥的FPGA板卡上就是这种接口,接口时序也比较简单,对应的接口信号如图6所示。
在这里插入图片描述

图6 GMII接口信号

  接口信号的含义与MII接口一致,此处就不在赘述,注意MII的接收时钟和发送时钟均由PHY芯片输出,而GMII的TX_CLK是由MAC输出给PHY芯片的。此外就是数据位宽由MII的4位变为了8位。

  PHY芯片发送数据给MAC的接口时序如下图所示,与MII接口一样,PHY芯片在RX_CLK下降沿输出数据,MAC在上升沿采集数据,但是GMII接口每个时钟周期传输一字节数据。

在这里插入图片描述

图7 MAC接收数时序

  MAC发送数据到PHY芯片的接口时序如下图所示,在下降沿输出一字节数据即可。

在这里插入图片描述

图8 MAC发送数据时序

  该接口支持1000Mbps,向下兼容100Mbps和10Mbps。由于数据线位宽为8位,在每个时钟的单沿进行数据传输。如果要实现1000Mbps传输速率,那么发送和接收的时钟频率应该为125MHz。

5 、RGMII接口

  RGMII(Reduced Gigabit Media Independent Interface)接口就是把GMII接口的数据线做简化处理,也能够实现千兆网,正点原子和米联客的FPGA板卡的千兆网就是采用该接口实现,接口信号如图9所示。在这里插入图片描述

图9 RGMII接口信号

  相比GMII接口,RGMII接口的数据线由8位缩减到4位,RX_DV与RX_ER信号合成为RX_CTL信号。该接口实现1000Mbps传输速率时,时钟依旧是125MHz,下图是该接口MAC侧发送数据给PHY芯片的时序图。

在这里插入图片描述

图10 RGMII TX时序

  MAC侧在时钟TX_CLK的上升沿将需要发送数据的低4位输出到数据线TXD,在时钟TX_CLK下降沿将传输数据的高4位输出到数据线TXD,因此每个时钟传输1字节数据,125MHz的时钟就能实现1000Mbps速率。

  MAC侧不能直接将TX_CLK输出给PHY芯片使用,因为TX_CLK的上升沿和下降沿对应的TXD信号都处于变化阶段,此时采集数据可能会出错,TX_CLK周期为8ns,将TX_CLK延迟2ns后输出给PHY芯片作为TX_CLK,延迟后的信号上升沿和下降沿对应的TXD就是稳定的,此时就可以稳定采集数据。

  此时就会出现双沿传输数据,以及将信号延迟2ns,那么前文的ODDR以及ODELAYE2就可以派上用场了。但是A7系列并没有ODELAYE2,所以A7系列处理方式会有以下几点吧。

  首先可以使用RTL8211这种以太网PHY芯片,该只需要把TXDLY和RXDLY引脚上拉就可以对RX_CLK和TX_CLK延迟2ns后作为数据采集的时钟,比较方便。但是88E1518这类PHY芯片没有相关引脚,也就不能用这个方法,那么就只有使用锁相环将时钟相移90°来实现2ns的延时,这个实际的延时可能会大一点。

  注意TX_CTL信号,该信号将TX_EN和TX_ER结合,在TX_CLK上升沿,TX_CTL输出TX_EN的状态,高电平表示数据有效,在TX_CLK下降沿,此时输出TX_EN异或TX_ER的结果,所以只有当TX_CTL在TX_CLK上升沿和下降沿同时为高电平时数据才是有效的。
在这里插入图片描述

图11 RGMII RX时序

  RGMII接口依旧可以实现100Mbps和10Mbps速率传输数据。当传输速率为100Mbps时,数据位宽为4位,所以时钟频率为25MHz即可。只在时钟上升沿输出数据,但是TX_CTL和RX_CTL依旧需要在上升沿和下降沿传输数据。 当传输速率为10Mbps时,时钟频率为2.5MHz。

  综上RGMII接口的数据线相比GMII减少了一半,PCB布局布线会简单很多,但是对PCB布局布线的要求也更加严格,总体还是值得的。像RTL8211这种三速以太网PHY芯片是可以支持MII、GMII、RGMII这几种接口的,但是当板子硬件做好后,往往只能使用其中一种,具体是什么接口,需要结合原理图具体分析。

  FPGA开发板大多使用的是RTL8211芯片,但是我这里的ZYNQ 7020的PL端没有网口,ZYNQ7030PL端倒是由两个千兆以太网,但使用的确是88E1518芯片,该芯片只能使用RGMII接口传输数据,且该芯片的资料比较少,就只能读数据手册了。

  对于上述接口,如果是学习,推荐选择RGMII接口,使用该接口就必须使用IDDR、ODDR、这些原语,以及BUFIO等时钟原语。如果是画PCB,板子比较紧凑的情况下,选RGMII应该也更好,反正等长之类的都是必不可少的,少走10根数据线优势还是比较大的。

  本文对PHY与MAC通信的一些协议进行了讲解,需要更加详细的同学可以在公众号后台回复”802.3” (不包括引号)获取标准以太网标准协议进行研读。

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

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

相关文章

数据库之MySQL的介绍

操作系统: windows:win10、win11、win7、windows Server2016 Linux/Unix :红帽(RedHat)、Bebian、SUSE MacOS Linux系统:CantOS(yum、dnf)、Ubuntu(apt、apt—get&am…

IP应用场景的规划

IP地址作为互联网通信的基石,在现代社会中扮演着至关重要的角色。本文将深入探讨IP地址在不同应用场景中的规划与拓展,探讨其在网络通信、安全、商业、医疗和智能城市等领域的关键作用与未来发展趋势。 IP地址的基本原理 IP地址是分配给网络上设备的数…

Odoo16 实用功能之Form视图详解(表单视图)

目录 1、什么是Form视图 2、Form视图的结构 3、源码示例 1、什么是Form视图 Form视图是用于查看和编辑数据库记录的界面。每个数据库模型在Odoo中都有一个Form视图,用于显示该模型的数据。Form视图提供了一个可编辑的界面,允许用户查看和修改数据库记…

TokenFlow详解

https://github.com/omerbt/TokenFlow/issues/25 https://github.com/omerbt/TokenFlow/issues/31 https://github.com/omerbt/TokenFlow/issues/32 https://github.com/eps696/SDfu register_extended_attention_pnp1. 为所有BasicTransformerBlock layer的attn1重构forward2.…

MySQL 数据库系列课程 05:MySQL命令行工具的配置

一、Windows启动命令行工具 (1)打开 Windows 的开始菜单,找到安装好的 MySQL,点击MySQL 8.0 Command Line Client - Unicode,这个带有 Unicode 的,是支持中文的,允许在命令行中敲中文。 &…

C++的一些零散小知识

不定时更新一些 文章目录 1、空指针nullptr的类型为std::nullptr_t2、函数定义中,如果不需要使用参数的值,可以省略参数名3、静态成员变量在C17之后可以直接在类内定义并初始化了 1、空指针nullptr的类型为std::nullptr_t 一个毫无意义的例子&#xff1…

Python自动化办公,又双叒增加功能了!

大家好,这里是程序员晚枫,今天给大家分享一下Python自动化办公,最近更新的功能。 以下代码,全部都可以免费使用哦~! 彩色的输出 有没有觉得python自带的无色输出看腻了?增加了彩色输出的功能,可以实现无痛替换。 上面效果的实现代码如下,👇 自动收发邮件 这个12月发…

Python字符串处理全攻略(三):常用内置方法轻松掌握

目录 引言Python字符串常用内置方法str.index()功能介绍语法注意事项总结 str.startswith()功能介绍语法示例注意事项 str.expandtabs()功能介绍语法示例注意事项总结 str.splitlines()功能介绍语法示例注意事项总结 str.swapcase()功能介绍语法示例注意事项 结束语 引言 欢迎…

【Python】面向对象

一、初识对象 二、成员方法 三、类和对象 四、构造方法 五、其它内置方法 六、封装 七、继承 八、类型注解 九、多态 面向对象概念 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法组织…

【机器学习】【线性回归】梯度下降

文章目录 [toc]数据集实际值估计值估计误差代价函数学习率参数更新Python实现线性拟合结果代价结果 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 , 2 , \cdots , m (x(i),y(i)),i1,2,⋯,m 实际值 y ( i ) y^{(i)} y(i) 估计值 h …

HTML美化网页

使用CSS3美化的原因 用css美化页面文本,使页面漂亮、美观、吸引用户 可以更好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 具有良好的用户体验 <span>标签 作用 能让某几个文字或者某个词语凸显出来 有效的传递页面信息用css美化页面文本&#xff0c;使页面漂…

事务相关知识

库存问题 先扣库存–>如果订单服务崩溃了&#xff0c;但是库存服务没有崩溃&#xff0c;这个时候库存扣减成功了&#xff0c;那么就会库存不能归还,&#xff0c;无法回滚。 后扣库存–>1&#xff1a;调用库存服务失败(比如网络抖动&#xff0c;库存服务挂了)–>回滚。…

VSCode运行时弹出powershell

问题 安装好了vscode并且装上code runner插件后&#xff0c;运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果。 解决方法 打开系统cmd ,在窗口顶部条右击打开属性&#xff0c;把最下面的旧版控制台选项取消&#xff0c;即可

python区块链简单模拟【01】

完整代码 https://gitee.com/ihan1001 https://github.com/ihan1001 重点&#xff1a;时间戳&#xff0c;MD5哈希&#xff0c;SHA256哈希&#xff0c;base64一种用64个字符表示任意二进制数据的方法&#xff0c;ECC椭圆曲线算法 import time time.time()datetime.now().strfti…

Ignite内存配置

配置内存 #1.内存架构 #1.1.概述 Ignite内存架构通过可以同时在内存和磁盘上存储和处理数据及索引&#xff0c;得到了支持磁盘持久化的内存级性能。 多层存储的运行方式类似于操作系统&#xff08;例如Linux&#xff09;的虚拟内存。但是这两种类型架构之间的主要区别是&…

懒加载图片案例

整体效果&#xff1a; HTML部分&#xff1a; <div class"lazy-box"><img class"lazy" data-original"img/1.jpg" alt"1.jpg" width"960" height"540"><img class"lazy" data-original…

MySQL 数据库系列课程 04:MySQL Workbench的安装

Workbench 是 MySQL 官方推出的免费的强大的可视化工具&#xff0c;不熟悉命令行工具的人&#xff0c;可以安装这一款软件&#xff0c;通过编写 SQL 进行数据库中数据的增删改查操作&#xff0c;接下来我们详细说明一下 Workbench 的安装。 一、Windows安装Workbench &#x…

怎么为pdf文件添加水印?

怎么为pdf文件添加水印&#xff1f;PDF是一种很好用的文件格式&#xff0c;这种格式能够很有效的保护我们的文件&#xff0c;但有时可能还会被破解&#xff0c;这种时候在PDF上添加水印就是比较好的方法。 综上所述&#xff0c;PDF是保密性很强的文件&#xff0c;但添加水印能够…

深度学习入门(python)考试速成均方误差

均方误差 表示神经网络的输出&#xff0c;表示监督数据&#xff0c;表示数据的维度。 这里神经网络的输出y是softmax函数的输出 数组元素的索引从第一个开始依次对应数组“0”&#xff0c;“1”&#xff0c;“2”&#xff0c;...... 由于softmax函数的输出可理解为概率 由此…

华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识 1.vNIC ​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC&#xff0c;每个 NIC 可以是多个 vNIC 的基础。 ​ 将 vNIC 附加到虚拟机时&#xff0c;Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的…