一、前言

  网络通信中的PHY芯片接口种类有很多,之前接触过GMII接口的PHY芯片RTL8211EG。但GMII接口数量较多,本文使用RGMII接口的88E1512搭建网络通信系统。这类接口总线位宽小,可以降低电路成本,在实际项目中应用更广泛。

二、从GMII过度到RGMII

  先看看GMII和RGMII主要的接口。

GMII:

发送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er

接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er

RGMII:

发送 tx_clk tx_d[3:0] tx_ctrl

接收 rx_clk rx_d[3:0] rx_ctrl

  为什么接口变少了?首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1512 Datasheet中时序图可以直观看出这一点。

  RGMII中上升沿发送一字节数据的低四位,下降沿发送剩余的高四位数据。接收端时钟双边沿采样,因此125MHZ*8bit = 125MHZ*4bit*2 = 1000Mbit/s。至于GMII中的数据有效和数据错误指示信号被ctrl信号复用:tx_ctrl在时钟tx_clk上升沿发送是tx_en,在下降沿发送是tx_en ^ tx_er。rx_ctrl在时钟rx_clk上升沿接收是rx_dv,在下降沿接收是rx_en ^ rx_er。综上,RGMII接口引脚数从25个降低到14个。

三、add clock skew

  从上边的时序图分析,数据在时钟的边沿变化。因此如果不做额外处理,接收端无法稳定采样。为了解决这一问题,常见的做法是为时钟信号添加延时,使其边沿对准数据总线的稳定区间。可以在控制器端、PCB走线以及PHY芯片内部添加时钟偏移,本文使用最后一种方式实现。

  在第三阶段中添加延迟。数据发送方向,FPGA侧的TX_CLK信号不需要额外处理,也就是说FPGA发送与数据边沿对齐的时钟信号。TXD和TX_CLK信号波形如图。

  PHY内部会调整TX_CLK,使之能够稳定采样TXD。数据接收方向,由于RX_CLK由PHY提供,PHY芯片直接产生与数据中心对齐的时钟信号。RXD和RX_CLK信号波形如图。

  可见,使PHY芯片工作在延迟模式下时,FPGA单不需要添加额外的逻辑来保证稳定采样。发送方向直接将数据驱动时钟作为TX_CLK信号发送,接收方向直接利用RX_CLK对RXD信号采样。

四、系统设计方案

  本文使用ZYNQ内部的MAC控制器实现数据链路层功能。但由于其接口为GMII,需要用到GMII_to_RGMII IP Core转换接口逻辑。上层网络协议则通过LWIP开源协议栈完成。首先配置ZYNQ IP,使能ENET1并以EMIO方式引出。

  系统硬件结构如图:

五、I/O 时序约束

  在较高速设计场合下,输入输出接口部分很容易出现数据采样不稳定的现象。这时候就要通过Input delay,output delay约束以及STA来分析设计是否满足稳定采样需求。input/output delay是指数据相对于时钟的延迟,只有设置好上述两个数值,综合工具才会往正确的方向优化并给出合理的时序报告。

  FPGA与RGMII接口的PHY芯片之间的时序关系按照数据接口同步和数据采样方式属于源同步DDR采样。input delay约束对应接收方向,时序关系是中心对齐。output delay约束对应发送方向,时序关系是边沿对齐。前者由于很多时候不知道上游器件Tcko信息,会使用示波器测量有效数据窗口来计算。而后者因为是边沿对齐,通过示波器测量抖动窗口并使用skew based method计算。这部分笔者还没有亲身实践过,若有误欢迎指出。

参考文献

1 千兆以太网芯片88E1111 RGMII模式的驱动 - 我心狂野 - 博客园 http://www.cnblogs.com/shengansong/archive/2012/01/04/2311894.html

2  RGMII布线指导 RGMII Layout Guide | 无线时代 http://www.witimes.com/rgmii-layout-guide/

3 RGMII_PHY测试笔记1 基于开发板MiS603-X25-whilebreak-电子技术应用-AET-北大中文核心期刊-最丰富的电子设计资源平台 http://blog.chinaaet.com/whilebreak/p/46639

4  千兆以太网芯片88E1111 RGMII模式的驱动 - 百度文库 https://wenku.baidu.com/view/d2cc412fff00bed5b9f31d49.html

5 RGMII Interface Timing Considerations | Ethernet FMC http://ethernetfmc.com/rgmii-interface-timing-considerations/

6 ALTERA AN 477: Designing RGMII Interfaces with FPGAs and HardCopy ASICs

7 米联客 ESFP1512 以太网 SFP 光电卡教程

Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上) - neufeifatonju的博客 - CSDN博客 https://blog.csdn.net/neufeifatonju/article/details/80653172

Vivado使用误区与进阶——XDC约束技巧之I/O篇 (下) - neufeifatonju的博客 - CSDN博客 https://blog.csdn.net/neufeifatonju/article/details/80450975

rgmii clock delay相关推荐

  1. PLL_BASE——Basic Phase Locked Loop Clock Circuit(Virtex-5, Spartan-6)

    声明:这篇博文只是一个大概性的认识,有一篇更走心的博文请看:MMCME2_ADV介绍 高级混合模式时钟管理器(7 Series FPGA) 下面介绍的一个基本锁相环时钟电路是Spartan-6里面的一 ...

  2. ICC2 user guide(三)Clock Tree Synthesis

    目录 一 Prerequisites for Clock Tree Synthesis 二 Defining the Clock Trees 1 Deriving the Clock Trees 1. ...

  3. contiki学习笔记 clock部分

    1.前言     contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统.国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有 ...

  4. lockup latch clock gating cell

    Latch功能 Latch的电路结构如下图: Latch电路结构 当 E = 1 时,latch直传(transparent),D端信号的变化会即时反应在Q端: 当 E = 0 时,latch关断(c ...

  5. 关于time_t,clock_t ,time(),clock(),CLK_TCK, CLOCKS_PER_SEC 的使用

    关于time_t,clock_t ,time(),clock(),CLK_TCK, CLOCKS_PER_SEC 的使用 ISO/IEC     9899:1999     标准中有一个宏:     ...

  6. 全志 H6 Orange Pi Lite 2 Android 7.0 去除无用配置

    根据板子的硬件配置,去除无用的模块 去除JTAG 默认代码: [jtag_para] jtag_enable = 1 jtag_ms = port:PD23<5><default&g ...

  7. 全志 H6 OrangePi One Plus Android 7.0 以太网配置

    前言 最近又入手了一块OrangePi One Plus,把之前的Orange Pi Lite 2镜像烧进去发现可以使用,去官网查看下,Android系统的源码也是同一份,只不过在GPIO使用上,把P ...

  8. ifconfig eth Rx error

    最近在开发PHY驱动程序,在调试中,一配置网卡信息,就会出现RX接收错误,超过数量门槛并使网络停止. # ifconfig eth3 eth3      Link encap:Ethernet  HW ...

  9. I.MX6 PHY fixup 调用流程 hacking

    /*********************************************************************************** I.MX6 PHY fixup ...

  10. TimeQuest学习之三------外部寄存器模型

    clock skew = < destination reg clock delay > - < source reg clock delay > 为了使clock skew ...

最新文章

  1. MySql5.7环境搭建
  2. 配置LNMP遇到的问题(页面空白,不能解析php等)以及fastcgi和php-fom的关系
  3. 06.系统编程-3.进程VS线程比较
  4. Python 安装 uWSGI并运行一个入门示例
  5. Mr.J--密码强度检测
  6. 一个域名能申请多少个ssl_必须要有域名才能申请SSL证书吗?
  7. 追MM与23种设计模式
  8. DOCX%20是什么格式
  9. Flutter基础—第一个Flutter实例
  10. TIOBE 1 月编程语言排行榜:C 语言再度「C 位」出道!
  11. python实现给定一个列表和数字,在列表找到和为该数字的元素返回下标
  12. 【Magick++】配置开发环境
  13. LaTeX新人教程,30分钟从完全陌生到基本入门
  14. idea 代码格式化 谷歌_Google Docsmaklet格式化代码
  15. 源码编译安装go,ERROR: Cannot find /root/go1.4/bin/go
  16. signature=66ee059bbdb9aa026cf4962f2fe679a7,a00896.html
  17. 前端知识——css 之预处理器 less 语法
  18. MSDN Library for Visual Studio 2008 SP1 下载
  19. 你也深受脂肪团的困扰吗?快来看看吧
  20. 1200 同余方程[一中数论随堂练]

热门文章

  1. ThinkPad SL400 使用经验小记
  2. 整洁代码--写好注释
  3. 安卓手机安装charles安全证书
  4. 移动通信网络规划:信道编码
  5. Python获取地理数据 匹配中文城市所属省份
  6. kindle可以看html格式文章吗,Kindle 新功能上线:终于可以显示阅读数据了
  7. 天正如何批量导出坐标_天正建筑2014批量点击坐标的详细操作流程
  8. 【SSH】Spring框架学习
  9. Scrum敏捷开发框架
  10. Thinkpad自修壁纸 2019