PHY RGMII Interface Timing注意事项

这篇具有很好参考价值的文章主要介绍了PHY RGMII Interface Timing注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RGMII Timing 背景

RGMII接口是以太网PHY和以太网MAC之间的物理连接。如果使用以太网FMC, PHY是Marvell 88E151x,以太网MAC在FPGA内部。RGMII接口是DDR (dual data rate)接口,由FPGA到PHY的发送路径和PHY到FPGA的接收路径组成。两个路径都有一个独立的时钟,4个数据信号和一个控制信号。
RGMII标准规定数据和时钟同时输出(即。时钟没有任何倾斜),如下面的左侧图像所示。为正确取样

如果你正在经历以下问题之一,那么你可能有一个问题与你的RGMII接口:
以太网端口正在发送但未接收
以太网端口正在接收但未发送
以太网端口工作在10Mbps和100Mbps,但无法工作在1Gbps

RGMII无时钟偏移

RGMII标准规定时钟和数据信号输出无倾斜,即。时钟边缘与数据边缘对齐。这对于接收器的采样电路来说并不理想,但它极大地简化了发送电路。
rgmii-rxid,fpga开发,权限

RGMII Interface 时钟偏移

时钟倾斜接口
RGMII时钟和数据信号,因为它们必须呈现给接收电路进行最佳采样。时钟偏差是由PCB走线或接收设备添加的。
rgmii-rxid,fpga开发,权限

添加时钟偏移

在基于FPGA的系统中,有三个阶段需要的倾斜(即。延迟)可以添加到TX和RX时钟信号。第一阶段是在FPGA中,第二阶段是在PCB走线上。时钟走线比数据走线长),第三阶段在PHY中。在最优的RGMII接口中,在TX和RX路径中仅在一个阶段添加倾斜,而其他两个延迟阶段被禁用或未实现。

时钟偏移阶段在RGMII接口

rgmii-rxid,fpga开发,权限
TX和RX时钟的倾斜可以独立管理,它不必在每个路径上的同一阶段实现,但必须在每个路径上的某个地方实现。因此,了解目标系统中的每个延迟阶段是至关重要的,以便确保rmmii接口中的时钟正确地倾斜。现在我们将讨论每个倾斜阶段以及启用或禁用它们的各种方法。

阶段1:FPGA
时钟偏差是否在FPGA中实现,以及如何实现取决于您用于实现MAC的IP。
以太网子系统
rgmii-rxid,fpga开发,权限
TX时钟偏差:YES
AMD Xilinx AXI以太网子系统IP IP核被设计为输出具有倾斜的TX时钟,并且在Vivado GUI中没有选项来禁用此倾斜。它通过时钟转发时钟来实现这一点,时钟相对于用于输出数据信号的时钟有90度的相移。总之,当使用AXI以太网子系统时,您必须禁用PHY中的TX时钟倾斜,并确保PCB上的TX时钟跟踪没有增加倾斜。

RX时钟偏差:无
AXI以太网子系统IP核不增加RX时钟的倾斜,因此倾斜必须由PHY或PCB走线添加。
有关AXI以太网子系统中TX和RX时钟偏差的更多详细信息,您必须参考AMD Xilinx AXI以太网子系统IP封装的三模式以太网MAC IP的产品指南。

GMII-to-RGMII
(用于通过EMIO连接Zynq GEM)
rgmii-rxid,fpga开发,权限
TX时钟偏差:可选
AMD赛灵思GMII-to-RGMII IP核可以选择在TX时钟上增加2ns的偏差。这个选项可以在Vivado GUI中通过“歪斜添加PHY”选项访问(见下图)。当这个选项被选中时,核心将输出没有倾斜的TX时钟。当不勾选时,核心将输出具有2ns偏差的TX时钟。

rgmii-rxid,fpga开发,权限
RX时钟偏差:无
根据AMD Xilinx GMII-to-RGMII IP产品指南第29页,GMII-to-RGMII内核不会给RX时钟增加倾斜,因此倾斜必须由PHY或PCB时钟迹线添加。
有关GMII-to-RGMII内核中TX和RX时钟偏差的更多详细信息,请参阅产品指南。

Zynq GEM通过MIO实现
rgmii-rxid,fpga开发,权限
TX时钟偏差:NO
Zynq GEMs不向TX时钟添加时钟倾斜,因此倾斜必须由PHY或PCB跟踪添加。
RX时钟偏差:无
Zynq GEMs不向RX时钟添加时钟倾斜,因此倾斜必须由PHY或PCB迹线添加。
如果您使用的是以太网FMC,那么Zynq MIO引脚不太可能路由到FMC连接器,但是为了完整起见,这里已经包含了这种情况。

第二阶段:PCB
rgmii-rxid,fpga开发,权限

以太网FMC具有FMC连接器和物理之间长度匹配的时钟和数据走线,因此,以太网FMC PCB走线不会增加时钟偏差。然而,为了获得完整的图像,我们还必须考虑FPGA板上走线的长度。幸运的是,大多数FMC载波(如ZedBoard和AMD Xilinx ZC706)在FPGA和所有FMC连接器的I/ o之间设计了长度匹配的走线。因此,在大多数情况下,当使用以太网FMC时,您可以期望从物理到物理的整个时钟和数据跟踪的长度都是匹配的

自定义FPGA板
虽然PCB走线可以设计为实现时钟倾斜,但在大多数情况下,这是实现倾斜的最不理想的位置,因此大多数电路板设计人员将路由长度匹配的RGMII时钟和数据走线。也就是说,重要的是要知道您的PCB的RGMII接口是否已经路由时钟倾斜,以便您知道如何适当地配置FPGA和物理-如果您不确定,请询问您的电路板设计师。如果您的PCB已经路由时钟倾斜,那么您必须禁用FPGA和PHY中的时钟倾斜。

阶段3:PHY
在Linux应用程序中,启用或禁用内部时钟延迟的最简单方法是通过设备树。设备树将为每个以太网接口包含一个部分,它应该与右侧显示的部分类似。
为了启用或禁用内部时钟延迟,我们为“phy-mode”参数指定一个特定的值。
Both internal delays DISABLED: phy-mode = “rgmii”;
Both internal delays ENABLED: phy-mode = “rgmii-id”;
Only RX internal delay ENABLED: phy-mode = “rgmii-rxid”;
Only TX internal delay ENABLED: phy-mode = “rgmii-txid”;

&axi_ethernet_0 {  
    local-mac-address = [00 0a 35 00 01 22];  
    phy-handle = <&phy0>;  
    xlnx,has-mdio = <0x1>;  
    phy-mode = "rgmii";  
    mdio {  
        #address-cells = <1>;  
        #size-cells = <0>;  
        phy0: phy@0 {  
            compatible = "marvell,88e1510";  
            device_type = "ethernet-phy";  
            reg = <0>;  
        };  
    };  
};

独立的
当使用独立应用程序时,我们必须通过MDIO总线执行特定的寄存器写操作,以便启用/禁用内部时钟延迟。
通过设置第2页寄存器21的第4位来启用TX时钟延迟。
RX时钟延迟通过设置第2页寄存器21的第5位来启用。
下面是对4种可能的配置中的每一种进行此操作的示例。注意,我们使用的是对AXI以太网子系统库的函数调用;Zynq GEM的等效函数名称将略有不同。

#define PHY_ADDRESS                0   // Ethernet FMC PHY address
#define IEEE_CONTROL_REG_MAC       21  // The register containing the TX/RX clock delay enables
#define IEEE_PAGE_ADDRESS_REGISTER 22  // For specifying the page number
#define IEEE_RGMII_TX_CLOCK_DELAYED_MASK 0x0010
#define IEEE_RGMII_RX_CLOCK_DELAYED_MASK 0x0020

u16 control;

// RGMII with both internal delays disabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control &= ~(IEEE_RGMII_TX_CLOCK_DELAYED_MASK | IEEE_RGMII_RX_CLOCK_DELAYED_MASK);
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

// RGMII with both internal delays enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control |= (IEEE_RGMII_TX_CLOCK_DELAYED_MASK | IEEE_RGMII_RX_CLOCK_DELAYED_MASK);
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

// RGMII with only RX internal delay enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control &= ~IEEE_RGMII_TX_CLOCK_DELAYED_MASK;
control |= IEEE_RGMII_RX_CLOCK_DELAYED_MASK;
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

// RGMII with only TX internal delay enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control |= IEEE_RGMII_TX_CLOCK_DELAYED_MASK;
control &= ~IEEE_RGMII_RX_CLOCK_DELAYED_MASK;
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

案列:
在本节结束时,我们将列出每个可能用例所需的rmmii延迟配置。由于大多数应用使用长度匹配的PCB走线,我们将假设PCB没有增加时钟偏差。以下是三个MAC选项所需的配置:

案例1:使用AXI以太网子系统
TX时钟倾斜必须在PHY中禁用(因为倾斜是在FPGA中实现的)
RX时钟倾斜必须在PHY中启用
在Linux中,使用:

phy-mode = "rgmii-rxid";

在独立应用程序中,使用以下代码:

// RGMII with only RX internal delay enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control &= ~IEEE_RGMII_TX_CLOCK_DELAYED_MASK;
control |= IEEE_RGMII_RX_CLOCK_DELAYED_MASK;
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

案例2:使用GMII-to-RGMII (Zynq GEM通过EMIO)
当使用GMII-to-RGMII时,你可以选择在哪里实现TX时钟倾斜,所以有两种可能性:
选项1:在FPGA中启用TX时钟倾斜
TX时钟倾斜必须在PHY中禁用
RX时钟倾斜必须在PHY中启用
在Linux中,使用:

phy-mode = "rgmii-rxid";

In standalone applications, use the following code:

// RGMII with only RX internal delay enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control &= ~IEEE_RGMII_TX_CLOCK_DELAYED_MASK;
control |= IEEE_RGMII_RX_CLOCK_DELAYED_MASK;
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

Option 2: TX clock skew DISABLED in FPGA

TX clock skew must be ENABLED in the PHY
RX clock skew must be ENABLED in the PHY
In Linux, use:

phy-mode = "rgmii-id";

In standalone applications, use the following code:文章来源地址https://www.toymoban.com/news/detail-848302.html

// RGMII with both internal delays enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control |= (IEEE_RGMII_TX_CLOCK_DELAYED_MASK | IEEE_RGMII_RX_CLOCK_DELAYED_MASK);
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

Case 3: Using Zynq GEM via MIO

TX clock skew must be ENABLED in the PHY
RX clock skew must be ENABLED in the PHY
In Linux, use:

phy-mode = "rgmii-id";

In standalone applications, use the following code:

// RGMII with both internal delays enabled
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_PAGE_ADDRESS_REGISTER, 2);
XAxiEthernet_PhyRead(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, &control);
control |= (IEEE_RGMII_TX_CLOCK_DELAYED_MASK | IEEE_RGMII_RX_CLOCK_DELAYED_MASK);
XAxiEthernet_PhyWrite(xaxiemacp, PHY_ADDRESS, IEEE_CONTROL_REG_MAC, control);

到了这里,关于PHY RGMII Interface Timing注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法竞赛个人注意事项

    浅浅记录一下自己在算法竞赛中的注意事项。 注意看数大小,数学库中的函数尽量加上 * 1.0 , 转成double,防止整型溢出。 , int 型相乘如果可能溢出,乘 * 1LL 。 数据范围大于1e6,注意用快读。 浮点数输入输出: 取模,注意取成负数的情况。 全 int ,但是数据太大,全转

    2024年02月09日
    浏览(50)
  • 面试求职-面试注意事项

    面试技巧和注意事项有哪些? 面试是找工作过程中最重要的一个环节,因为面试成功,你才有可能得到一份工作。求职面试技巧有哪些呢?首先,我们来看看面试注意事项。 1、面试前有没有仔细了解过对应企业的情况,对方的企业文化、主营业务、未来的发展方向。如果跑过

    2024年02月09日
    浏览(38)
  • 低代码选型注意事项

    凭借着革命性的生产力优势,低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品,开发者该如何选择? 在研究低代码平台的年数上,本人已有3年,也算是个低代码资深用户了,很多企业面临低代码选型上的困难,选平台容易,换平台难。下面基于个人理解给大

    2024年02月03日
    浏览(55)
  • 钢网的清洗注意事项

    在smt贴片加工的生产过程中,由于钢网受重力影响会变形、定位可能会有不准确、支撑没有到位或者是设计等其他问题,这样的话在锡膏印刷的时候钢网和电路板的焊盘之间很难形成理想的密封状态,在SMT贴片加工的过程中,会引起焊锡膏在钢网跟电路板的空隙间挤出来,并

    2024年02月11日
    浏览(38)
  • postman调试注意事项

    Postman是一个强大的API调试工具,它可以帮助开发人员测试和调试API端点,以确保它们按预期工作。在使用Postman进行接口调试时,以下是一些注意事项和可能出现的问题,以及如何解决这些问题。 确保请求参数正确 在测试API接口时,确保您提供了正确的请求参数非常重要。

    2024年02月10日
    浏览(48)
  • vscode配置与注意事项

    中文设置 https://zhuanlan.zhihu.com/p/263036716 应用搜索输入“Chinese (Simplified) Language Pack for Visual Studio Code”并敲回车键 底部信息窗没有的话 将下面的选项改为true \\\"workbench.statusBar.visible\\\": true 组件:在VS Code中开发React常用插件_js jsx snippets-CSDN博客 1、VScode 路径自动补全插件: Path A

    2024年01月21日
    浏览(57)
  • Golang 包使用注意事项

    1)在给一个文件打包时,该包对应一个文件夹,比如这里的utils文件夹对应的包名就是utils, 文件的包名通常和文件所在的文件夹名一致,一般为小写字母。 2)当一个文件要使用其它包函数或变量时,需要先引入对应的包 引入方式1:import \\\"包名\\\" 引入方式2: 3)package指令在

    2024年02月03日
    浏览(59)
  • 安装opencv库注意事项

    opencv的安装版本要和python的版本相匹配。在安装过程中要找到自己python版本相匹配的opencv版本 以本人环境做演示,python3.6,对应的opencv-python的版本是4.5.4.60  大致的python版本对应的opencv如下图 地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/   通过 pip list 查看opencv-python 和 opencv-c

    2024年02月11日
    浏览(37)
  • 重构项目的十大注意事项

    在开始重构之前,需要明确重构的主要目的和所需实施的步骤。 在确认重构的目的和范围时,需要考虑以下几个方面: 改进代码的可读性和可维护性 。重构的主要目的是将现有代码转化为易于理解和修改的形式。 优化代码的性能 。将代码优化并减少不必要的重复,可以提

    2024年02月10日
    浏览(48)
  • python打包程序注意事项

    今天用python的时候,写了一个脚本来进行筛选内容,但是一次一次的进行打开和启动python,一点麻烦,所以今天就准备将脚本来进行包装成应用程序来进行运行。 目前常见的打包应用程序都是通过 Pyinstaller 这个脚本实现的,我们现在开始使用。 首先先安装Pyinstaller 我们通过

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包