rgmii clock delay
一、前言
网络通信中的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 光电卡教程
8 Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上) - neufeifatonju的博客 - CSDN博客 https://blog.csdn.net/neufeifatonju/article/details/80653172
9 Vivado使用误区与进阶——XDC约束技巧之I/O篇 (下) - neufeifatonju的博客 - CSDN博客 https://blog.csdn.net/neufeifatonju/article/details/80450975
rgmii clock delay相关推荐
- PLL_BASE——Basic Phase Locked Loop Clock Circuit(Virtex-5, Spartan-6)
声明:这篇博文只是一个大概性的认识,有一篇更走心的博文请看:MMCME2_ADV介绍 高级混合模式时钟管理器(7 Series FPGA) 下面介绍的一个基本锁相环时钟电路是Spartan-6里面的一 ...
- ICC2 user guide(三)Clock Tree Synthesis
目录 一 Prerequisites for Clock Tree Synthesis 二 Defining the Clock Trees 1 Deriving the Clock Trees 1. ...
- contiki学习笔记 clock部分
1.前言 contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统.国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有 ...
- lockup latch clock gating cell
Latch功能 Latch的电路结构如下图: Latch电路结构 当 E = 1 时,latch直传(transparent),D端信号的变化会即时反应在Q端: 当 E = 0 时,latch关断(c ...
- 关于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 标准中有一个宏: ...
- 全志 H6 Orange Pi Lite 2 Android 7.0 去除无用配置
根据板子的硬件配置,去除无用的模块 去除JTAG 默认代码: [jtag_para] jtag_enable = 1 jtag_ms = port:PD23<5><default&g ...
- 全志 H6 OrangePi One Plus Android 7.0 以太网配置
前言 最近又入手了一块OrangePi One Plus,把之前的Orange Pi Lite 2镜像烧进去发现可以使用,去官网查看下,Android系统的源码也是同一份,只不过在GPIO使用上,把P ...
- ifconfig eth Rx error
最近在开发PHY驱动程序,在调试中,一配置网卡信息,就会出现RX接收错误,超过数量门槛并使网络停止. # ifconfig eth3 eth3 Link encap:Ethernet HW ...
- I.MX6 PHY fixup 调用流程 hacking
/*********************************************************************************** I.MX6 PHY fixup ...
- TimeQuest学习之三------外部寄存器模型
clock skew = < destination reg clock delay > - < source reg clock delay > 为了使clock skew ...
最新文章
- MySql5.7环境搭建
- 配置LNMP遇到的问题(页面空白,不能解析php等)以及fastcgi和php-fom的关系
- 06.系统编程-3.进程VS线程比较
- Python 安装 uWSGI并运行一个入门示例
- Mr.J--密码强度检测
- 一个域名能申请多少个ssl_必须要有域名才能申请SSL证书吗?
- 追MM与23种设计模式
- DOCX%20是什么格式
- Flutter基础—第一个Flutter实例
- TIOBE 1 月编程语言排行榜:C 语言再度「C 位」出道!
- python实现给定一个列表和数字,在列表找到和为该数字的元素返回下标
- 【Magick++】配置开发环境
- LaTeX新人教程,30分钟从完全陌生到基本入门
- idea 代码格式化 谷歌_Google Docsmaklet格式化代码
- 源码编译安装go,ERROR: Cannot find /root/go1.4/bin/go
- signature=66ee059bbdb9aa026cf4962f2fe679a7,a00896.html
- 前端知识——css 之预处理器 less 语法
- MSDN Library for Visual Studio 2008 SP1 下载
- 你也深受脂肪团的困扰吗?快来看看吧
- 1200 同余方程[一中数论随堂练]