Xilinx原语学习之时钟资源相关原语
一直来,都是使用Vivado中自带的GMIItoRGMII IP核来完成GMII转RGMII的功能;尽管对GMII及RGMII协议都有一定的了解,但从没用代码实现过其功能。由于使用IP时,会涉及到MDIO配置IP寄存器的问题,觉得麻烦。因此决定用代码实现GMII转RGMII的功能。
参考Lattice的开源代码,进行移植。移植后在Vivado中进行编译时没有问题,但一旦进行实现(Implementation)时就会有如下错误:
[Place 30-574] Poor placement for routing between an IO pin and BUFG.
实在纳闷,于是深入挖掘原因。
从编译的原理图来看,rgmii_rclk在输入端已被Vivado自动添加了一个IBUF以及BUFG;通过Vivado中的Synthesis的Settings,取消自动添加BUFG的选项;再实现时没有错误了,且可以生成bit文件;但时序严重不满足。
查看之前使用GMIItoRGMII的IP工程中的Schematic,发现rgmii_rclk输入后添加了三个原语模块:IBUF、BUFR以及BUFG。其中IBUF是在信号输入端处添加了,BUFR是紧跟着IBUF,然后其输出的信号被内部的D触发器所使用,其中有一路直接连接到BUFG,然后通过BUFG输出到管脚(作为GMII的时钟输出)。
藉此机会,想更进一步学习这几个原语的不同之处:
-------------------------------------------------------------------------------------------------------------
在Xilinx 7Series FPGA中,存在3种主要的时钟网络:BUFG,BUFR,BUFIO以及由他们所衍生出来的各种变种。它们之间的特点和区别如下:
>>>BUFIO
BUFIO是IO时钟网络,顾名思义,它只能驱动IO Block里面的逻辑,不能驱动CLB里面的LUT,REG等逻辑。BUFIO可以被如下节点驱动:
1、SRCCs and MRCCs in the same clock region
2、MRCCs in an adjacent clock regionusing BUFMRs
3、MMCMs clock outputs 0-3 driving the HPC in the same clock region
>>>BUFR
BUFR是regional时钟网络,顾名思义,它的驱动范围只能局限在一个clock region的逻辑,但是它可以同时驱动IO和内部逻辑。BUFR可以被如下节点所驱动:
1、所有能驱动BUFIO的节点
2、MMCMs clock outputs 0-3
3、General interconnect
BUFIO和BUFR的主要区别可以用下图概括:
>>>BUFG
BUFG是全局时钟网络,这个大家最熟悉了,它可以驱动所有的IO和逻辑,并且可以被Transceiver所驱动。如果时钟信号要走全局时钟网络,必须通过这个BUFG来驱动,BUFG可以驱动所有的CLB,RAM,IOB。Zynq一共有22个BUFG全局时钟线。
BUFR相比BUFG的最大优势是skew和功耗都比较小,在源同步的设计中,这一点也是很关键的。
>>>BUFR和BUFMR有什么区别?
BUFMR是7系列才有的时钟buffer,它是在有些源同步设计中逻辑IO跨上中下三个Bank;而BUFR仅仅能够驱动一个Bank,所以需要BUFMR级联BUFR来完成每个Bank的功能功能,如下图:
>>>BUFH怎么用?
BUFH,BUFH驱动区域中的水平全局时钟树,Xilinx的时钟是通过时钟树来分布的。可用于互联逻辑、SelectIO逻辑,DSP48E1模块或者Block RAM资源的时钟驱动。
>>>时钟资源选择上是不是BUFG最优?
这个要根据设计,很多AD DA需要源同步设计,如果上了BUFG由于时钟走线延迟较大;完全跟数据不同步,很难再进行正确的采样。接口设计的逻辑量一般比较小,不建议上全局。
下面介绍下Xilinx时钟的管理:
Xilinx芯片全局时钟资源的使用方法主要有下面5种:
A、GCLK——>IBUFG——>BUFG
IBUFG后面连接BUFG的方法是最基本的全局时钟资源的使用方法,其等效于BUFGP
B、GCLKP&GCLKN——>IBUFGDS——>BUFG
当输入时钟为差分信号时候,需要使用IBUFGDS原语。
C、IBUFG+DCM+BUFG
通过DCM(Digital clock manage)不仅能对时钟进行同步、移相、分频、倍频等变换,而且可以使用全局时钟的输出无抖动和小延迟。
D、Logic + BUFG
BUFG不但可使用IBUFG的输出,还可以驱动其他普通信号的输出。当某个信号的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使得该信号利用全局时钟资源。
E、Logic + DCM + BUFG
DCM可以改变也可以控制变换普通时钟信号。
-----------------------------------------------------
附录,参考链接:
《Xilinx FPGA器件中时钟资源的说明以及使用》
https://www.jianshu.com/p/3da8c9eca03a
Xilinx原语学习之时钟资源相关原语的更多相关文章
- Xilinx FPGA的专用时钟引脚及时钟资源相关
主要参考了https://www.eefocus.com/liu1teng/blog/12-02/237897_4533d.html .Xilinx UG471.UG472以及Xilinx Forum ...
- Xilinx FPGA全局时钟和全局时钟资源的使用方法
对FPGA的全局时钟了解不多,遂转载一篇文档: http://xilinx.eetop.cn/?action-viewnews-itemid-42 目前,大型设计一般推荐使用同步时序电路.同步时序电路 ...
- xilinx FPGA全局时钟资源的使用
1.什么是xilinx fpga全局时钟资源 时钟对于一个系统的作用不言而喻,就像人体的心脏一样,如果系统时钟的抖动.延迟.偏移过大,会导致系统的工作频率降低,严重时甚至会导致系统的时序错乱,实现不了 ...
- Xilinx约束学习笔记(二)—— 定义时钟
2. 定义时钟 2.1 关于时钟 为了获得最佳精度路径覆盖信息,必须正确定义时钟. 时钟要定义在时钟树的根 pin 或 port 上,称为 source point. 时钟的边缘应该由周期和波形进行组 ...
- Spartan6系列之Spartan6系列之芯片时钟资源深入详解
1. 时钟资源概述 时钟设施提供了一系列的低电容.低抖动的互联线,这些互联线非常适合于传输高频信号.最大量减小时钟抖动.这些连线资源可以和DCM.PLL等实现连接. 每一种Spartan-6芯片提 ...
- 7系列FPGA的时钟资源——UG472
时钟架构总览 7系的FPGA使用了专用的全局(Global)和区域(Regional)IO和时钟资源来管理设计中各种的时钟需求.Clock Management Tiles(CMT)提供了时钟合成(C ...
- Xilinx约束学习笔记(一)—— 约束方法学
<Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...
- 三叔学FPGA系列之一:Cyclone V中的时钟资源
之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...
- FPGA系列之一:Cyclone V中的时钟资源
之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...
随机推荐
- ESB简介及选型(转) http://www.cnblogs.com/skyme/archive/2012/08/06/2623414.html
什么是ESB 企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的.SOA描 ...
- 查询sql数据库中表占用的空间大小
最近在给一家客户做系统维护时,需要查看数据库表的大小,相关的sql如下: 先在左上角下拉框中选对要查的数据库再执行以下语句 1. exec sp_spaceused '表名' --( ...
- js验证登录注册
js验证登录注册的优势,在前台直接验证,不需要在后台读取返回数据验证,减轻服务器压力. 登陆验证得必要性,拦截恶意脚本的登录注册攻击.哈哈,当然有些高手是可以直接跳过js验证的. 所以还是后台验证,并 ...
- 历史SQL语句之一
注释:查询该课程表下,所有的课程以及课程观看的人数统计 SELECT ml.`name` as lessonName,ml.category,ml.deleted,ml.teacherName, ml ...
- Chrome刷新缓存
Ctrl+Shift+Del 清除Google浏览器缓存的快捷键 Ctrl+Shift+R 重新加载当前网页而不使用缓存内容
- Spring Boot中使用使用Spring Security和JWT
目标 1.Token鉴权 2.Restful API 3.Spring Security+JWT 开始 自行新建Spring Boot工程 引入相关依赖 <dependency> < ...
- vue使用vue-awesome-swiper及一些问题
vue-awesome-swiper是基于swiper的一个轮播图插件,使用非常方便. 首先安装下 npm install vue-awesome-swiper --save 然后在入口文件main. ...
- VS下个人认为比较实用的插件
懒得打字了,直接贴图
- VS2010显示行号
选项->文本编辑器->如果使用C#开发选择C#->勾选行号->确定
- [译]C#7 Pattern Matching
原文 public struct Square { public double Side { get; } public Square(double side) { Side = side; } } ...