Linux下rgmii接口与fpga相连,FPGA控制RGMII接口PHY芯片88E1512网络通信
一、前言
网络通信中的PHY芯片接口种类有很多,之前接触过GMII接口的PHY芯片RTL8211EG。但GMII接口数量较多,本文使用RGMII接口的88E1512搭建网络通信系统。这类接口总线位宽小,可以降低电路成本,在实际项目中应用更广泛。
二、从GMII过度到RGMII
先看看GMII和RGMII主要的接口。
GMII:
发送gmii_tx_clkgmii_tx_d[7:0]gmii_tx_engmii_tx_er
接收gmii_rx_clkgmii_rx_d[7:0]gmii_rx_dvgmii_rx_er
RGMII:
发送tx_clktx_d[3:0]tx_ctrl
接收rx_clkrx_d[3:0]rx_ctrl
为什么接口变少了?首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1512Datasheet中时序图可以直观看出这一点。
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个。
三、addclockskew
从上边的时序图分析,数据在时钟的边沿变化。因此如果不做额外处理,接收端无法稳定采样。为了解决这一问题,常见的做法是为时钟信号添加延时,使其边沿对准数据总线的稳定区间。可以在控制器端、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_RGMIIIPCore转换接口逻辑。上层网络协议则通过LWIP开源协议栈完成。首先配置ZYNQIP,使能ENET1并以EMIO方式引出。
系统硬件结构如图:
在较高速设计场合下,输入输出接口部分很容易出现数据采样不稳定的现象。这时候就要通过Inputdelay,outputdelay约束以及STA来分析设计是否满足稳定采样需求。input/outputdelay是指数据相对于时钟的延迟,只有设置好上述两个数值,综合工具才会往正确的方向优化并给出合理的时序报告。
FPGA与RGMII接口的PHY芯片之间的时序关系按照数据接口同步和数据采样方式属于源同步DDR采样。inputdelay约束对应接收方向,时序关系是中心对齐。outputdelay约束对应发送方向,时序关系是边沿对齐。前者由于很多时候不知道上游器件Tcko信息,会使用示波器测量有效数据窗口来计算。而后者因为是边沿对齐,通过示波器测量抖动窗口并使用skewbasedmethod计算。这部分笔者还没有亲身实践过,若有误欢迎指出。
参考文献
1千兆以太网芯片88E1111RGMII模式的驱动-我心狂野-博客园
2RGMII布线指导RGMIILayoutGuide|无线时代
3RGMII_PHY测试笔记1基于开发板MiS603-X25-whilebreak-电子技术应用-AET-北大中文核心期刊-最丰富的电子设计资源平台
5RGMIIInterfacemingConsideraTIons|EthernetFMC
6ALTERAAN477:DesigningRGMIIInterfaceswithFPGAsandHardCopyASICs
7米联客ESFP1512以太网SFP光电卡教程
本文为csdn博主“FPGA技术江湖”原创文章,在此特别鸣谢。
原文链接:https://blog.csdn.net/qq_40310273/arTIcle/details/106355201
Linux下rgmii接口与fpga相连,FPGA控制RGMII接口PHY芯片88E1512网络通信相关推荐
- bios设置识别linux硬盘,linux下如何查看硬盘插在主板那个SATA接口上?梅捷主板SY-A77M3+ bios设置 咋设置啊...
在上一篇文章中,小编为您详细介绍了关于<联想的主板是哪的?修改技嘉主板bios安装联想win7 64位>相关知识.本篇中小编将再为您讲解标题linux下如何查看硬盘插在主板那个SATA接口 ...
- Linux下CGroup进行CPU内存等资源控制
留存 from: http://www.cnblogs.com/kevingrace/p/5685433.html and http://www.cnblogs.com/wang_yb/p/394 ...
- Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索
参考文档Qt+百度AI实现人脸识别之人脸检测_画茧自缚-CSDN博客 本文档对于以上文档进行精简,参考以上文档实现百度AI人脸库管理-人脸搜索:百度AI接口一通具通,可以以此方法扩展. .h部分 #i ...
- PHY芯片88E1512之FPGA
使用DSP或zynq等配置88E1512只要搞清楚88E1512的寄存器配置,通过调用底层的MDIO驱动函数进行配置即可,而使用FPGA连接88E1512时,需要不仅需要搞清楚88E1512的寄存器配 ...
- Linux下使用hiredis库与libevent实现异步接口的I/O复用
1 前言 之前的一篇文章<Linux下使用hiredis库实现优先级队列>,用的同步的接口实践: 后来遇到一个场景,同时需要处理Redis订阅的消息,又需要处理其他网络socket操作.定 ...
- linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)
前一篇文章分析了Windows slim read/write lock的工作原理.我们知道它的设计相当精妙,于是我们可以借鉴它的思路来设计linux下的读写锁. 在这个读写锁的设计上,需要注意的是l ...
- Linux下抓包工具tcpdump详解
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- Linux下简单socket编程
Linux下简单socket编程 socket的英文翻译是接口.插座的意思,很形象,就相当于将两个台电脑用一根线连起来,线的两头分别是插头,插在两台电脑上,借此实现通信. 两台电脑通信,实际上是这两台 ...
- Linux下grep显示前后几行信息
标准unix/linux下的grep通过下面參数控制上下文 grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行 grep -B 5 foo file 显示foo及前 ...
最新文章
- 将数据库服务器的文件D 改名为,MySQL如何更改数据库数据存储目录详解
- php设计模式八-----装饰器模式
- php 使用table方式导出excel文件
- Eclipse+Maven配置
- 三星p7510 android 8.0,7510更新到安卓8.0了。。。
- intellij idea 忽略文件不提交
- php分城市的源码,userlist.php 源代码在线查看 - 城市分类信息,门户网站,我做为地方信息网 资源下载 虫虫电子下载站...
- ruby rails
- excel快捷键大全常用分享
- Fluent 全流程求解多孔介质算例
- 【MODIS数据处理#10】例五:用NDVI估算植被覆盖度
- 对称数 一个整数,它的各位数字如果是左右对称的,则称这个数是对称数。例如:1234321、123321等。
- 如何使用QQ邮箱账号发送加密邮件
- python保存表情包_用Python一键保存半佛仙人所有的骚气表情包
- 吉林银行2021年上半年经营成果丰硕 支持实体经济能力显著增强
- 企业微信认证上网推广的好处
- ajax跨域请求(CORS实现)
- linux 学习笔记(二)下载中文语言包
- 菜鸟站长之家SEO工具大礼包多达上百个小工具
- 红米3s进不了recovery_红米3s卡刷教程_红米3s用recovery刷第三方系统包
热门文章
- Android 使用ViewPager实现导航页面
- mpvue 微信小程序 Image 图片实现宽度100%,高度自适应
- mac mongodb 安装
- 软件质量的理解 摘录
- php20个字,北京人会说不会写的20个字,第一个我就跪了
- IDEA全文搜索排除无用的文件夹
- android icu4c 7.1编译报错,android4.0编译系统时候遇到的错误集
- 四、Dynamic-programming algorithm Dynamic--LCS
- owncloud nginx php,nginx配置owncloud记录。
- iis5.0+php5.0+mysql5.0配置完全手册_IIS5.0+PHP5.0+MySQL5.0配置完全手册