前言

Xilinx系列、ISE环境中,设计复杂工程时全局时钟系统的设计显得尤为重要。

一、时钟网络与全局缓冲

在XilinxFPGA中,时钟网络分为两类:全局时钟网络和I/O区域时钟网络。以全铜工艺实现的全局时钟网络,加上专用时钟缓冲与驱动结构,从而可使全局时钟到达芯片内部所有的逻辑可配置单元,且I/O单元以及块RAM的时延和抖动最小,可满足高速同步电路对时钟触发沿的苛刻需求。

在FPGA设计中,FPGA全局时钟路径需要专用的时钟缓冲和驱动,具有最小偏移和最大扇出能力,因此最好的时钟方案是由专用的全局时钟输入引脚驱动的单个主时钟,去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟,因为对于一个设计项目来说,全局时钟是最简单和最可预测的时钟。

在ISE设计全局时钟时,IBUFG、BUFG、BUFGMUX等概念经常会被提及,这些资源可以统称为时钟资源,它们分为四类:全局时钟输入端口、全局时钟复用器、I/O时钟缓冲、水平时钟布线缓冲。下面挑选其中几个常见的资源种类,简单介绍下:

IBUFG:即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUFG,否则在布局布线时会报错。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和SSTL等多种格式的I/O标准。

IBUFGDS:是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。

BUFG:是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。

BUFGCE:是带有时钟使能端的全局缓冲。它有一个输入I、一个使能端CE和一个输出端O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。

BUFGMUX:是全局时钟选择缓冲,它有I0和I1两个输入,一个控制端S,一个输出端O。当S为低电平时输出时钟为I0,反之为I1。需要指出的是BUFGMUX的应用十分灵活,I0和I1两个输入时钟甚至可以为异步关系。

BUFGP:相当于IBUG加上BUFG。

以上为常用的时钟资源,对于一般的全局时钟系统设计,有这些资源就足够了。

二、常用全局时钟系统

要组建一个全局时钟系统,首先要从全局时钟管脚输入一个时钟。有了这个时钟,就可以组建各种类型的全局时钟系统了。一般来说,常用的全局时钟系统有两种:IBUFG+BUFG系统、IBUFG+DCM(PLL)+BUFG。

1、  IBUFG+BUFG系统

IBUFG+BUFG方案如下图所示,这也是最基本的全局时钟系统。将时钟管脚输入的时钟作为IBUFG的输入,然后将IBUFG的输出再作为BUFG的输入,则BUFG的输出即为得到的全局时钟。IBUFG+BUFG的方案相当于BUFGP。

2、  IBUFG+DCM(PLL)+BUFG

平时用得最多的还是IBUFG+DCM(PLL)+BUFG方案,如下图所示。将时钟管脚输入的时钟作为IBUFG的输入,然后将IBUFG的输出作为DCM(PLL)的输入,将经DCM(PLL)频率变换后的输出再作为BUFG的输入这种方案使用方法最为灵活,对全局时钟的控制更加有效。通过DCM(PLL)模块不仅能对时钟进行同步、移相、分频、倍频等变换,而且可以使全局时钟的输出达到无抖动延迟(“0”skew)。

三、全局时钟系统使用的问题与注意事项

1、  全局时钟的时钟源必须从全局时钟管脚输入,并且要先经过IBUFG。

2、如果全局时钟涉及到逻辑运算,可以将BUFG换成BUFGCE(与)、BUFGMUX(二选一)等,事实上,BUFG、BUFGCE等资源均是由BUFGMUX生成。

3、从BUFG输出的时钟,是不能直接连接普通I/O管脚输出的,会报错,若要将全局时钟输出,有两种方法:一是直接将BUFG的输入连接普通I/O管脚输出,或者将BUFG的输出经由ODDR2后再连接I/O管脚输出。需要注意的是,将CLOCK_DEDICATED_ROUTE属性设为FALSE虽然会将ERROR降为WARNING,但是这样时钟系统将不再是全局时钟系统,不建议这样做。

4、DCM(PLL)资源中有时钟反馈输入和时钟反馈输出管脚,一般的处理方法是将时钟反馈输出管脚经由BUFG后输入到时钟反馈输入管脚。

四、全局时钟系统使用举例

下面将举出实例,来看一下如何组建一个全局时钟系统。

某FPGA从全局时钟管脚引入频率为26M的晶振源,FPGA内部需要22MHz、22MHz反向、171.6MHz、36MHz,其中22MHz、22MHz反向、171.6MHz为FPGA内部使用,22MHz、36MHz经由普通I/O管脚输出,而且22MHz反向还要与信号t_rn作逻辑与运算,试给出该需求的全局时钟系统解决方案。

在ISE中组建时钟系统有两种方法:一是用IP核生成器配置生成相应IP,再用线连接起来, 二是在文件中直接用语言配置生成各类资源(DCM、PLL、IBUFG、BUFG等),再用线连接。第一种方法较为简单但灵活性差,而第二种方法稍微复杂但灵活性较强,可以随时修改,使用哪种方法取决于个人喜好。

这里用第二种方法来生成上文需求的全局时钟系统,下图为最终效果图。

1、clk26为从全局时钟管脚输入的时钟源,从管脚输入后先经过一个IBUFG。

2、因为22MHz、171.6MHz和36MHz不能由一个PLL产生,故将IBUFG的输出时钟信号输入到两个PLL。

3、PLL0有三个输出:CLKOUT0、CLKOUT1、CLKOUT2,分别为22MHz、171.6MHz和22MHz反向。clk22_out为22MHz时钟的I/O输出信号,故不经BUFG直接输出;clk22为22MHz经过BUFG后的信号,为全局时钟信号;clk171p6为171.6MHz经过BUFG后的信号,为全局时钟信号;clk22_inv为22MHz反向经过BUFGCE(与t_rn作逻辑与运算)后的信号,为全局时钟信号。

4、PLL1有一个输出:CLKOUT0,为36MHz,clk36_out为36MHz的I/O输出信号,故不经BUFG直接输出。

转自:http://blog.csdn.net/lg2lh/article/details/44997937

Xilinx全局时钟的更多相关文章

  1. Xilinx FPGA全局时钟和全局时钟资源的使用方法

    对FPGA的全局时钟了解不多,遂转载一篇文档: http://xilinx.eetop.cn/?action-viewnews-itemid-42 目前,大型设计一般推荐使用同步时序电路.同步时序电路 ...

  2. xilinx FPGA全局时钟资源的使用

    1.什么是xilinx fpga全局时钟资源 时钟对于一个系统的作用不言而喻,就像人体的心脏一样,如果系统时钟的抖动.延迟.偏移过大,会导致系统的工作频率降低,严重时甚至会导致系统的时序错乱,实现不了 ...

  3. 51.ISE中的DCM全局时钟转为普通IO

    在用DCM这个IP核时,它的输入时钟为全局时钟引脚输入,输出有两种情况,第一,可以直接接在全局时钟引脚:第二,可以通过ODDR2原语接在普通IO引脚:说下第二种是怎么用的: DCM DCM_INST ...

  4. Xilinx原语学习之时钟资源相关原语

    一直来,都是使用Vivado中自带的GMIItoRGMII IP核来完成GMII转RGMII的功能:尽管对GMII及RGMII协议都有一定的了解,但从没用代码实现过其功能.由于使用IP时,会涉及到MD ...

  5. Xilinx FPGA的专用时钟引脚及时钟资源相关

    主要参考了https://www.eefocus.com/liu1teng/blog/12-02/237897_4533d.html .Xilinx UG471.UG472以及Xilinx Forum ...

  6. 时钟管脚设置问题 xilinx ERROR:Place:864 - Incompatible IOB's are locked to the same bank 0

    ERROR:Place:1108 - A clock IOB / BUFGMUX clock component pair have been found   that are not placed ...

  7. [Xilinx]Modelsim独立仿真Vivado生成的PLL核

    EDA Tools: 1.Vivado 2015.1(64-bit) 2.Modelsim SE-64 10.1c Time: 2016.05.26 ------------------------- ...

  8. xilinx FPGA普通IO作PLL时钟输入

    本帖转自于 :http://www.cnblogs.com/jamesnt/p/3535073.html 在xilinx ZC7020的片子上做的实验; [结论] 普通IO不能直接作PLL的时钟输入, ...

  9. Xilinx FPGA LVDS应用

    最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用.Xilinx FPGA中,主要通过原语实现差分信号的收发:OBUFDS(差分输出BUF),IBUFDS(差分输入BUF). 注意在分 ...

随机推荐

  1. [NPM] Execute Code from a Remote GitHub Branch with npx

    We will see how you can use npx to pull and execute code from a GitHub repository. If you need even ...

  2. [Node.js] Load balancing a Http server

    Let's see how to do load balancing in Node.js. Before we start with the solution, you can do a test ...

  3. [Javascipt] Immediately-Invoker 2

    Now the people at Poplar Puzzles would like you to treat an array of functions like a Queue, passing ...

  4. C#.NET常见问题(FAQ)-如何在系统变量中加入新的环境变量

    比如我要将C:\Windows\Microsoft.NET\Framework\v3.5这个目录加入环境变量 则在系统的环境变量中点击Path,编辑,然后加入一个分号";",然后粘 ...

  5. Linux一些基本命令一(学习笔记三)

    菜鸟记录. 一.更改主机名 hostname 新的主机名 hostname ln0491 将主机名更改为ln0491 登出再登陆,就变为新的主机名 二.新建文件夹和删除 如:在当前路径新建data文件 ...

  6. 在Ubuntu下设置默认编辑器

    在默认情况下,Ubuntu 系统会为用户预设程序.就拿文本编辑器来说吧,Ubuntu 预设的是 Nano,对某些朋友来说,使用 Vim 可能更得心应手些.那么如何更改这些预设的程序呢? 你可以使用 s ...

  7. Oracle 去重查询

      Oracle 去重查询 CreateTime--2018年2月28日15:38:45 Author:Marydon (一)使用distinct --查询指定区间内表停诊字段的值 SELECT DI ...

  8. 【docker】挂载web应用

    现在将webapps目录挂载在宿主机目录,方便运维 docker run -p 8090:8080 --name app -v /usr/app:/usr/local/tomcat/webapps d ...

  9. 【shell】正则表达式

    当一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式(RE),正则表达式是一些特殊或很不特殊的字符串模式的集合. 在Linux中grep.awk.sed均可解释正则 1.基本元字符集及其定义 ^ ...

  10. OpenStack网络介绍

    OpenStack网络介绍     OpenStack里面的网络相对复杂.经常有人对几个网络概念搞混淆.因此,本文对OpenStack里面的Provider network 和 Tenant netw ...