精华内容
下载资源
问答
  • FPGA引入外部时钟

    千次阅读 2019-08-22 10:49:23
    在有些项目设计中,为了方便,将外部时钟信号不加处理直接引入FPGA...将外部时钟直接连接到FPGA芯片的普通I/O管脚,而非专用时钟输入管脚,将会导致下面问题: 1.由于该时钟信号是通过各种长短布线资源,甚至经过LU...

    参考文章链接:https://www.mianbaoban.cn/blog/452191-407048.html
    在有些项目设计中,为了方便,将外部时钟信号不加处理直接引入FPGA芯片使用,有时候会导致意想不到的BUG发生,而且这种BUG是不可重复的。

    将外部时钟直接连接到FPGA芯片的普通I/O管脚,而非专用时钟输入管脚,将会导致下面问题:
    1.由于该时钟信号是通过各种长短布线资源,甚至经过LUT连接才能到达其驱动的各个寄存器,因此该时钟信号从进入FPGA管脚,到传递到各个寄存器的时钟输入端,其时间是很难保持相同的,距离的远近直接决定了该时钟信号的传输延迟(时钟延迟)。而这个传输延迟的差值,可能达到几纳秒甚至十几纳秒。这个差值,将直接影响数据的建立和保持时间,造成时序无法收敛,从而导致设计失败。
    2.使用非全局布线资源,时钟信号在布线的过程中更容易受到周围信号的干扰。导致时钟质量变差。什么意思呢?打个比方,一只小鸟和一只兔子共同穿越一个满是灰尘的工地。工地上到处都是灰尘。小鸟从空中飞过,不直接与灰尘接触,因此基本不会沾到灰尘,因为它有自己独立的路线和空间。而兔子因为不会飞,因此只能跑着从工地中穿过,那么,不可避免的,兔子的脚上会沾上灰尘。导致当兔子穿过这个工地的时候,早已由小白兔变成了小灰兔。时钟信号也是如此,全局时钟资源有专门的时钟路径,在自己的空间走线,不穿过或很少穿过各种高速翻转的逻辑区域,因此很少受到污染。而非全局时钟资源没有专门的时钟路径,只能使用通用布线资源,而这些布线不可避免的会穿过很多高速翻转的逻辑区域。从而受到这些逻辑的翻转噪声的污染。最终时钟信号变的很差。例如边沿上升和下降更慢,占空比发生变化,时钟抖动增大等。

    要想解决该问题,可以将普通I/O输入的外部时钟连接到全局时钟资源。具体做法是调用ALTCLKCTRL的IP核。如下图所示
    在这里插入图片描述

    展开全文
  • FPGA差分输入时钟怎么使用

    万次阅读 多人点赞 2018-12-21 16:12:41
    准备下载开发板(xilinx kc705),发现时钟输入和普通的不太一样,折腾了一段时间 xilinx kc705 时钟输入电路  这个电路是差分时钟输出,我想肯定有办法将差分信号转为单端信号,就去查阅了一下资料,  IBUFDS...

    最近,FPGA刚刚入门,写了个分频电路,点亮几个LED灯,testbench方面已经没有问题了。准备下载开发板(xilinx kc705),发现时钟输入和普通的不太一样,折腾了一段时间

    xilinx kc705 时钟输入电路 

    这个电路是差分时钟输出,我想肯定有办法将差分信号转为单端信号,就去查阅了一下资料, 

    IBUFDS、IBUFGDS和OBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。

    IBUFDS 是差分输入的时候用;

    OBUFDS 是差分输出的时候用;

    IBUFGDS 则是时钟信号专用的输入缓冲器。

    更多参考 https://blog.csdn.net/github_33678609/article/details/53789063

    然后我就实例化一个差分信号缓冲器

    并在testbench进行仿真,差分信号可以用下面方式仿真

    仿真是没有问题的。然后想下载到板子里跑,那么需要IO约束吧。我在xdc中添加如下指令

    set_property PACKAGE_PIN AD12 [get_ports {clk_i_p}]

    set_property PACKAGE_PIN AD12 [get_ports {clk_i_n}]

    set_property SEVERITY {Warning} [get_drc_checks UCIO-1]   //可以忽略掉drc error

    实现现象告诉我,时钟并没有跑起来,我就纳闷了,差分信号已经引入到板子里了,没生效为什么?后面又查了下资料:

    差分信号和普通的信号有一定差异的,差分信号的输入是成对分配的,并且I/O标准是默认LVDS模式,(注意:要是不对差分信号进行IP核的差分信号转化,I/O标准下拉框是没有LVDS模式

    差分的管脚分配是成对分配的,只要分配好了一个,另一个会自动分配好,所以不用担心另一个信号怎么分配的问题

    https://blog.csdn.net/houyichaochao/article/details/80566699

    只有差分端口的P侧需要被约束。

    该工具将约束向前传播到iBFGDS实例的输出。

    如果两者都被约束,则工具将它们作为两个独立的时钟定义,并分析它们之间的时钟路径。

    这可能导致不正确的要求。

    类似地,只有差分数据端口的p侧需要在输入延迟和输出延迟约束中受到约束。

    N侧路径的分析与P侧完全相同。

    https://hifpga.com/%E9%97%AE%E9%A2%98/11819/vivado%E7%BA%A6%E6%9D%9F%E6%88%91%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6vivado%E4%B8%AD%E7%9A%84%E5%B7%AE%E5%88%86%E6%97%B6%E9%92%9F%E6%88%96%E6%95%B0%E6%8D%AE%E5%AF%B9/

    然后修改xdc,注意

    要引入 IBUFGDS.I 这个信号 ,比如上图是 clk_i_p。。。若引入clk_i_n,则会失败

     

    然后,OK 程序跑起来了嘻嘻嘻

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • FPGA基础知识6(FPGA时钟系统及多时钟系统处理)

    万次阅读 多人点赞 2016-06-25 09:49:50
    需求说明:FPGA基本知识...内容 :第一部分 FPGA各个时钟说明  第二部分 FPGA时钟总结  第三部分 异步时钟同步化及门控时钟 来自 :时间的诗 第一部分 FPGA各个时钟说明 来自:http://blog.chinaunix.net/uid-

    需求说明:FPGA基本知识

    内容       :第一部分  FPGA各个时钟说明

                      第二部分  FPGA时钟总结

                      第三部分  异步时钟同步化及门控时钟

    来自       :时间的诗


    第一部分  FPGA各个时钟说明

    1.         FPGA的全局时钟是什么?

    FPGA的全局时钟应该是从晶振分出来的,最原始的频率。其他需要的各种频率都是在这个基础上利用PLL或者其他分频手段得到的。

    2.         全局时钟和BUFG:
    BUFG,输入为固定管脚,输出为H型全铜全局高速网络,这样抖动和到任意触发器的延时差最小,这个也就是FPGA做同步设计可以不需要做后仿真的原因。

    全局时钟:今天我们从另一个角度来看一下时钟的概念:时钟是D触发器的重要组成部分,一个有效边沿使得D触发器进行一次工作。而更多的时候,D触发器保持住上次的值。对于D触发器来说,可以将输入信号和时钟作比较。也许你会问,这么比较有什么意义。首先看我们比较得出什么东西:
           翻转率:R=Dr/Crx100%
    就是D触发器改变一次值与时钟有效沿个数的比值。

    举例:你写了一个来一个时钟有效沿就取一次反的电路,那么他的翻转率就是100%,翻转率和你的FPGA的功率有很大关系,翻转率越高,FPGA功率越高。 

    3.         全局时钟不够用是什么意思?
    因为全局时钟需要驱动很多模块,所以全局时钟引脚需要有很大的驱动能力,FPGA一般都有一些专门的引脚用于作为全局时钟用,他们的驱动能力比较强。但是如果这些引脚用完了,就只能用一般的引脚了,而他们的驱动能力不强,有可能不能满足你的时序要求。(驱动能力小的,产生的延迟会大一些)

    理论上,FPGA的任意一个管脚都可以作为时钟输入端口,但是FPGA专门设计了全局时钟,全局时钟总线是一条专用总线,到达片内各部分触发器的时间最短,所以用全局时钟芯片工作最可靠,但是如果你设计的时候时钟太多,FPGA上的全局时钟管脚用完了就出现不够用的情况。

    4.         什么是第二全局时钟?

    比如我有一个同步使能信号,连接到FPGA内部80%的资源(但不是时钟),这个时候,你的信号走线到达各个D触发器的延迟差很大,或者翻转率比较大的时候(>40%),这个时候你就需要使用第二全局时钟资源。

      第二全局时钟资源的驱动能力和时钟抖动延迟等指标仅次于全局时钟信号。第二全局时钟资源其实是通过片内的高速行列总线来实现的,而不像全局时钟总线是一条专用总线。第二全局时钟总线是通过软件布线得到的,所以硬指标肯定是拼不过全局时钟总线。特别是当你在已经有80%以上的布线率的情况下,可能会出现约束第二全局时钟资源失败的情况。

    5.         CCLK:
    CCLK:FPGA同步配置时钟。如果配置模式为主模式,则该时钟由FPGA器件生成,并输出;如果配置模式为从模式,则该时钟由外部提供;
    当所配置的数据存放在PROM中,即通过PROM来配置器件时,必须选择CCLK时钟;
    USER CLOCK:用户定义的配置时钟信号,该配置时钟目前很少采用;
    JTAG CLOCK:JTAG模式的配置时钟,该时钟提供给内部的JTAG控制逻辑。
    默认值为:CCLK

    6.         CCLK是怎么产生的:
    CCLK的产生根据配置模式不同而不同,如果设置为Master模式,则由内部的震荡电路产生,作为外部ROM的工作时钟,默认为6MHZ,可通过配置选项设置;如果设置为Slave模式,则由计算机(或其他下载设备)提供,作为芯片内部下载电路的工作时钟;在JTAG模式情况下,CCLK不输出,此时芯片内部下载电路时钟由内部震荡电路提供,TCK仅用作边界扫描相关电路时钟。

    补充:FPGA的主配置模式中,CCLK信号是如何产生的?
    CCLK是由FPGA内部一个晶振电路产生的,同时ISE的软件在生成BIT流文件时,有个CCLK CONFIG选项,这个选项只有在时钟为CCLK时才可以起作用,可以在4-60MHz选择,可以控制CCLK的频率。
    在主从模式配置,配置数据的前60个字节导入FPGA之前,CCLK一直是2.5MHz,接下来由于前60个配置字节的作用,CCLK改为CONFIG设定的频率,直到结束,一般CONFIG默认的频率是4MHz.

    7.         FPGA中全局时钟怎么用啊? 是把时钟接到FPGA的全局时钟输入引脚后,就起到全局时钟的作用了,还是在编译时需要制定某个时钟为全局时钟阿?

    其实全局时钟的使用关键在你的代码… 如果你的代码中只用了一个时钟作为所有的或者大部分触发器的时钟,编译器自然会把它编译为全局时钟。当然硬件连接上还是用全局时钟引脚较好,尤其是带PLL的,不是所有的全局时钟脚都能用PLL。


     第二部分  FPGA时钟总结

    无沦是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。 在设计PLD/FPGA时通常采用几种时钟类型。时钟可分为如下四种类型:全局时钟、门控时钟、多级逻辑时钟和波动式时钟。多时钟系统能够包括上述四种时钟类型的任意组合。


    1.全局时钟


    对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。在PLD/FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟。PLD/FPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时。


    图1 示出全局时钟的实例。图1 定时波形示出触发器的数据输入D[1..3]应遵守建立时间和保持时间的约束条件。建立和保持时间的数值在PLD数据手册中给出,也可用软件的定时分析器计算出来。如果在应用中不能满足建立和保持时间的要求,则必须用时钟同步输入信号(参看下一章“异步输入”)。

    图1 全局时钟
    (最好的方法是用全局时钟引脚去钟控PLD内的每一个寄存器,于是数据只要遵守相对时钟的建立时间tsu和保持时间th)

    2.门控时钟


    在许多应用中,整个设计项目都采用外部的全局时钟是不可能或不实际的。PLD具有乘积项逻辑阵列时钟(即时钟是由逻辑产生的),允许任意函数单独地钟控各个触发器。然而,当你用阵列时钟时,应仔细地分析时钟函数,以避免毛刺。
    通常用阵列时钟构成门控时钟。门控时钟常常同微处理器接口有关,用地址线去控制写脉冲。然而,每当用组合函数钟控触发器时,通常都存在着门控时钟。如果符合下述条件,门控时钟可以象全局时钟一样可靠地工作:

    1.驱动时钟的逻辑必须只包含一个“与”门或一个“或”门。如果采用任何附加逻在某些工作状态下,会出现竞争产生的毛刺。
    2.逻辑门的一个输入作为实际的时钟,而该逻辑门的所有其它输入必须当成地址或控制线,它们遵守相对于时钟的建立和保持时间的约束。


    图2和图3 是可靠的门控时钟的实例。在 图2 中,用一个“与”门产生门控时钟,在 图3 中,用一个“或”门产生门控时钟。在这两个实例中,引脚nWR和nWE考虑为时钟引脚,引脚ADD[o..3]是地址引脚,两个触发器的数据是信号D[1..n]经随机逻辑产生的。
    图2 “与”门门控时钟


    图3 “或”门门控时钟

    图2和图3 的波形图显示出有关的建立时间和保持时间的要求。这两个设计项目的地址线必须在时钟保持有效的整个期间内保持稳定(nWR和nWE是低电平有效)。如果地址线在规定的时间内未保持稳定,则在时钟上会出现毛刺,造成触发器发生错误的状态变化。另一方面,数据引脚D[1..n]只要求在nWR和nWE的有效边沿处满足标准的建立和保持时间的规定。

    我们往往可以将门控时钟转换成全局时钟以改善设计项目的可靠性。图4 示出如何用全局时钟重新设计 图2 的电路。地址线在控制D触发器的使能输入,许多PLD设计软件,如MAX+PLUSII软件都提供这种带使能端的D触发器。当ENA为高电平时,D输入端的值被钟控到触发器中:当ENA为低电平时,维持现在的状态。

    图4 “与”门门控时钟转化成全局时钟



    图4 中重新设计的电路的定时波形表明地址线不需要在nWR有效的整个期间内保持稳定;而只要求它们和数据引脚一样符合同样的建立和保持时间,这样对地址线的要求就少很多。

    图 给出一个不可靠的门控时钟的例子。3位同步加法计数器的RCO输出用来钟控触发器。然而,计数器给出的多个输入起到时钟的作用,这违反了可靠门控时钟所需的条件之一。在产生RCO信号的触发器中,没有一个能考虑为实际的时钟线,这是因为所有触发器在几乎相同的时刻发生翻转。而我们并不能保证在PLD/FPGA内部QA,QB,QC到D触发器的布线长短一致,因此,如 图5 的时间波形所示,在器从3计到4时,RCO线上会出现毛刺(假设QC到D触发器的路径较短,即QC的输出先翻转)。


    图5 不可靠的门控时钟

    (定时波形示出在计数器从3到4改变时,RCO信号如何出现毛刺的)


    图6 给出一种可靠的全局钟控的电路,它是图5不可靠计数器电路的改进,RCO控制D触发器的使能输入。这个改进不需要增加PLD的逻辑单元。
     

    图6 不可靠的门控时钟转换为全局时钟

    (这个电路等效于图5电路,但却可靠的多)

    3.多级逻辑时钟


    当产生门控时钟的组合逻辑超过一级(即超过单个的“与”门或“或”门)时,证设计项目的可靠性变得很困难。即使样机或仿真结果没有显示出静态险象,但实际上仍然可能存在着危险。通常,我们不应该用多级组合逻辑去钟控PLD设计中的触发器。

    图7 给出一个含有险象的多级时钟的例子。时钟是由SEL引脚控制的多路选择器输出的。多路选择器的输入是时钟(CLK)和该时钟的2分频(DIV2)。由图7 的定时波形图看出,在两个时钟均为逻辑1的情况下,当SEL线的状态改变时,存在静态险象。险象的程度取决于工作的条件。 多级逻辑的险象是可以去除的。例如,你可以插入“冗余逻辑”到设计项目中。然而,PLD/FPGA编译器在逻辑综合时会去掉这些冗余逻辑,使得验证险象是否真正被去除变得困难了。为此,必须应寻求其它方法来实现电路的功能。


    图7 有静态险象的多级时钟

    图8 给出 图7 电路的一种单级时钟的替代方案。图中SEL引脚和DIV2信号用于使能D触发器的使能输入端,而不是用于该触发器的时钟引脚。采用这个电路并不需要附加PLD的逻辑单元,工作却可靠多了。 不同的系统需要采用不同的方法去除多级时钟,并没有固定的模式。

    图7 无静态险象的多级时钟
    (这个电路逻辑上等效于图7,但却可靠的多)

    4.行波时钟


    另一种流行的时钟电路是采用行波时钟,即一个触发器的输出用作另一个触发器的时钟输入。如果仔细地设计,行波时钟可以象全局时钟一样地可靠工作。然而,行波时钟使得与电路有关的定时计算变得很复杂。行波时钟在行波链上各触发器的时钟之间产生较大的时间偏移,并且会超出最坏情况下的建立时间、保持时间和电路中时钟到输出的延时,使系统的实际速度下降。
    用计数翻转型触发器构成异步计数器时常采用行波时钟,一个触发器的输出钟控下一个触发器的输入,参看图9 同步计数器通常是代替异步计数器的更好方案,这是因为两者需要同样多的宏单元而同步计数器有较快的时钟到输出的时间。图10 给出具有全局时钟的同步计数器,它和 图9 功能相同,用了同样多的逻辑单元实现,却有较快的时钟到输出的时间。几乎所有PLD开发软件都提供多种多样的同步计数器。

    图9 行波时钟

    图10 行波时钟转换成全局时钟
    (这个3位计数器是图9异步计数器的替代电路,它用了同样的3个宏单元,但有更短的时钟到输出的延时)

    5. 多时钟系统


    许多系统要求在同一个PLD内采用多时钟。最常见的例子是两个异步微处理器器之间的接口,或微处理器和异步通信通道的接口。由于两个时钟信号之间要求一定的建立和保持时间,所以,上述应用引进了附加的定时约束条件。它们也会要求将某些异步信号同步化。

    图11 给出一个多时钟系统的实例。CLK_A用以钟控REG_A,CLK_B用于钟控REG_B,由于REG_A驱动着进入REG_B的组合逻辑,故CLK_A的上升沿相对于CLK_B的上升沿有建立时间和保持时间的要求。由于REG_B不驱动馈到REG_A的逻辑,CLK_B的上升沿相对于CLK_A没有建立时间的要求。此外,由于时钟的下降沿不影响触发器的状态,所以CLK_A和CLK_B的下降沿之间没有时间上的要求。, 如图4,2.II所示,电路中有两个独立的时钟,可是,在它们之间的建立时间和保持时间的要求是不能保证的。在这种情况下,必须将电路同步化。图12 给出REG_A的值(如何在使用前)同CLK_B同步化。新的触发器REG_C由GLK_B触控,保证REG_G的输出符合REG_B的建立时间。然而,这个方法使输出延时了一个时钟周期。
    图ll 多时钟系统
    (定时波形示出CLK_A的上升沿相对于CLK_B的上升沿有建立时间和保持时间的约束条件)

    图12 具有同步寄存器输出的多时钟系统
    (如果CLK_A和CLK_B是相互独立的,则REG—A的输出必须在它馈送到1REG_B之前,用REG_C同步化)

    在许多应用中只将异步信号同步化还是不够的,当系统中有两个或两个以上非同源时钟的时候,数据的建立和保持时间很难得到保证,我们将面临复杂的时间问题。最好的方法是将所有非同源时钟同步化。使用PLD内部的锁项环(PLL或DLL)是一个效果很好的方法,但不是所有PLD都带有PLL、DLL,而且带有PLL功能的 芯片大多价格昂贵,所以除非有特殊要求,一般场合可以不使用带PLL的PLD。 这时我们需要使用带使能端的D触发器,并引入一个高频时钟。
      
    图13 不同源时钟
    如图13所示,系统有两个不同源时钟,一个为3MHz,一个为5MHz,不同的触发器使用不同的时钟。为了系统稳定,我们引入一个20MHz时钟,将3M和5M时钟同步化,如图15所示。 20M的高频时钟将作为系统时钟,输入到所有触发器的的时钟端。3M_EN 和5M_EN将控制所有触发器的使能端。即原来接3M时钟的触发器,接20M时钟,同时3M_EN 将控制该触发器使能 ,原接5M时钟的触发器,也接20M时钟,同时5M_EN 将控制该触发器使能。 这样我们就可以将任何非同源时钟同步化。

    图13 同步化任意非同源时钟
    (一个DFF和后面非门,与门构成时钟上升沿检测电路)

    另外,异步信号输入总是无法满足数据的建立保持时间,容易使系统进入亚稳态,所以也建议设计者把所有异步输入都先经过双触发器进行同步化

    第三部分  异步时钟同步化及门控时钟

    来自:http://www.eefocus.com/karldada/blog/12-05/252437_66a55.html

    1 异步时钟同步化

    通过双触发器接口,异步信号输入总是无法满足数据的建立保持时间,所以建议大家把所有异步输入都先经过双触发器进行同步化。如图所示,时钟域clk_s传给时钟域clk_d的数据经过了双触发器的同步处理,相同的,时钟域clk_d经双触发器传给时钟域clk_s的数据


     

    通过高频时钟同步化,当在单个系统中有两个或两个以上非同源时钟的时候,数据的建立和保持时间很难得到保证,我们将面临复杂的时间问题,最好的方法是将所有非同源时钟同步化:选用一个频率是它们的时钟频率公倍数的高频主时钟将他们进行同步。

    假设系统有两个不同源时钟,一个为3MHz,一个为5MHz,不同的触发器使用不同的时钟。为了系统稳定,假设我们引入一个20MHz时钟。

    module orignal(clk,clk5m,clk3m,clk3men,clk5men);
    input clk;
    input clk3m;
    input clk5m;
    output clk3men;
    output clk5men;
     
    reg clk3mreg1;
    reg clk5mreg1;
    reg clk3mreg2;
    reg clk5mreg2;
     
    always @(posedge clk)
    begin
    	clk3mreg1<=clk3m;
    	clk3mreg2<=clk3mreg1;
    	clk5mreg1<=clk5m;
    	clk5mreg2<=clk5mreg1;
    end
    	assign clk3men=clk3mreg1&(~clk3mreg2);
    	assign clk5men=clk5mreg1&(~clk5mreg2);
    endmodule
     


    用modelsim仿真后得到的时序图如图所示

     

    2 门控时钟

    门控时钟通过一个时能信号控制时钟的开关。当系统不工作时可以关闭时钟,整个系统处于非激活状态,这样就能够在某种程度上降低系统功耗。但是使用门控时钟并不符合同步设计的思想,它可能会影响设计的实现和验证,在FPGA设计中并不是很推荐使用时能时钟。

    对于上升沿有效的系统时钟clk,他的下降沿先把门控时钟打一拍,然后再用这个使能信号和系统时钟clk相与后作为后续电路的门控时钟。


     

    在方案一中由单独的组合逻辑来控制时钟的使能,容易产生毛刺。

    在方案二中可以避免产生毛刺。

    always @(negedge clk)
    	enable<=gating_signal;
    assign clkout=enable&clk;

     

    使能时钟

    在前面提到门控时钟并不符合FPGA设计的思想,我们可以用时能时钟代替。在时能时钟的设计中,用原来的系统时钟作为触发器时钟,而让分频后的时钟作为信号的使能端。但是使能时钟在使能信号关闭时,时钟信号仍然在工作,它无法像门控时钟那样降低系统的功耗。

    Verilog 代码:
    always @(posedge clk)
    if(!rst_n)…;
    else if(en)…;  //en为是时能时钟,寄存器使能端的输入


    使能时钟例子

    在某系统中,前级数据输入位宽为8,而后级的数据输出位宽32,我们需要将8bit的数据转换成32bit的数据,因此后级处理的时钟频率为前级的 1/4,若不使用时钟时能,则就要将前级时钟进行4分频来作为后级处理的时钟,这种设计方法会引入新的时钟域,为了避免这种情况,我们采用了时钟时能的方 法来减少设计的复杂度。

    module gray
    (
    input clk,
    input rst_n,
    input [7:0] data_in,
    output reg [31:0] data_out,
    output reg clk1x_en
    );
    
    reg [1:0] cnt;
    reg [31:0] shift_reg;
    
    always @ (posedge clk,negedge rst_n)
    begin
      if(!rst_n)
        begin
        cnt <= 2'b0;
        clk1x_en <= 1'b0;
        shift_reg <= 32'b0;
      end
      else if(cnt ==2'b01)
      begin
        cnt <= cnt +1'b1;
        clk1x_en <= 1'b1;
        shift_reg <= {shift_reg[23:0],data_in};
      end
      else
      begin
        cnt <= cnt +1'b1;
        clk1x_en <= 1'b0;
        shift_reg <= {shift_reg[23:0],data_in};
      end
    end 
    
    always @ (posedge clk,negedge rst_n)
    begin
      if(!rst_n)
        data_out<= 32'b0;
      else if(clk1x_en==1'b1)//仅在clk1x_en为1时才将shift_reg的值赋给data_out
        data_out<=shift_reg;
    end 
    endmodule


    展开全文
  • FPGA时钟时钟

    2021-04-12 22:08:47
    1.时钟信号的分类 1.1 外部时钟 外部时钟,即时钟来自FPGA外部。通常外部时钟源对FPGA设计来说是必须的,因为一般FPGA芯片内部没有能够产生时钟信号的选频和激励电路...再生时钟FPGA芯片内部通过输入时钟信号作为参考

    在这里插入图片描述

    1.时钟信号的分类

    1.1 外部时钟

    外部时钟,即时钟来自FPGA外部。通常外部时钟源对FPGA设计来说是必须的,因为一般FPGA芯片内部没有能够产生时钟信号的选频和激励电路。因此,通常FPGA芯片都需要外部晶振以及电阻、电容、电感、三极管等器件,用于搭建产生时钟信号的电路。
    另外,当用示波器观察外部时钟信号时,会发现波形是一个正弦波,不过模拟的时钟信号经逻辑门的驱动后,由于MOS电路的陡峭导通特性,会对时钟信号的边沿起到积极的缩减作用。

    1.2 内部时钟

    再生时钟:FPGA芯片内部通过输入时钟信号作为参考,再次基础上通过调整频率和相位产生的新时钟。目前FPGA中只有DCM和PLL能够产生再生时钟。
    门控时钟:在外部输入时钟的基础上,由组合逻辑产生的时钟叫门控时钟。通常情况下,由于组合逻辑产生的竞争冒险现象,而寄存器对时钟边沿非常敏感,因此不建议使用门控时钟。
    在这里插入图片描述

    行波时钟:在外部输入时钟的基础上,由时序逻辑产生的时钟叫行波时钟。在这里插入图片描述
    通常不建议使用行波时钟,因为会引入新的时钟域,增加时序分析难度。当需要为后续电路进行降频时,可采用控制后续电路使能端实现。如下图所示
    在这里插入图片描述

    2.时钟域

    2.1 概念

    时钟域即时钟信道的驱动范围。一个时钟域中只能存在一个时钟信号,但一个信号可以对应两个时钟域,即适中的上升沿和下降沿。
    寄存器时钟域判断方法:看其输入时钟是哪个时钟信号的哪个边沿即可。
    组合逻辑时钟域判断方法:如果一个组合逻辑的所有输入都来自同一个时钟域的寄存器的输出,那么该组合逻辑的输出变化必然随着该时钟跳动,所以该组合逻辑属于这个时钟域。

    2.2 时钟树简介

    时钟树为大范围的时钟域提供时钟连接,这就需要时钟树有强大的扇出能力,同时保证时钟到达不同除法器时间差尽可能小。为了达到这两点要求,时钟树采用如下结构实现。
    在这里插入图片描述
    时钟信号由中间树根引入时钟树,并由不用级缓存扇出分别送往不同区域,如此往复,之道时钟信号达到触发器资源。由此可见,时钟树主要利用多级扇出来达到高扇出要求;通过每级扇出后的布线长度尽量保持一致来保证时钟尽可能同时达到各个触发器。
    注意,如果两个时钟域分别对应一个时钟信号的上升沿和下降沿,则他们可以公用一个时钟。
    注意,时钟树是为了保证时钟域不同触发器的始终到达时间尽可能一直,并不保证时钟信号到达触发器所消耗时间尽可能小。

    2.3 时钟树分类

    全局时钟网络资源:覆盖整个FPGA,可以保证时钟信号到FPGA上任意两个地方的延迟时间偏差最小。一般来说,全局时钟网络资源比较珍贵,使用时需要节省。
    区域时钟网络资源:每个FPGA区域都有若干属于自己的区域时钟网络,可以覆盖的范围是整个区域甚至包括与本区域相邻的区域(一般来说,一个FPGA区域只包括一个IO bank)。区域时钟网络资源可以保证时钟信号到FPGA上该区域任意两个地方的延迟时间偏差最小。
    IO时钟网络资源:前面所述网络资源针对的主要是FPGA的内部资源,而对于接口资源,则有专门的IO时钟网络资源来完成时钟信号承载工作。原因有三:第一,接口资源中的寄存器数量较少,不需要大型树状时钟网络来减少延迟差。第二,内部时钟网络资源由于规模大,范围广,往往不能承载频率太高的信号,而一些通信接口的时钟速率很高,远超出内部始终网络资源承受范围,因此需要专有的IO时钟网络资源。第三,高速接口逻辑一般有专用的接口资源,布局布线已固定,能够保证外部信号到达寄存器的延迟最短,对了配合达到高速信号传输,必须要求时钟信号所走路径最短,内部始终资源不合要求,因此只能用专有的IO时钟网络资源。

    2.4 时钟树的正确使用

    2.4.1 什么情况下应当使用时钟树

    如果时钟用来驱动FPGA内部逻辑资源,则建议时钟上树;如果时钟信号时钟域太小,则不利用触发器也可能可以通过时序分析,但仍然建议使用时钟树。如果只有一个触发器,则没有所谓时钟差,也不需要上树。如果时钟信号仅仅为了为FPGA外围硬件提供时钟激励,则无需使用时钟树,因为时钟树无法延申到FPGA外部。

    2.4.2 如何选择时钟树

    区域大就选全局时钟树,区域小就选区域时钟树,区域特别小就选IO时钟树,这种思路是完全错误的。
    IO时钟树:只分布在接口资源中,FPGA内部资源无法使用该时钟树。
    全局时钟树:覆盖范围广但数量有限,尽量充分使用。
    区域时钟树:优先使用全局时钟树,全局时钟树不够时与区域时钟树配合使用。使用区域时钟树可以让资源的分布在物理上更加紧凑,同时有些功能要求必须使用区域时钟树和IO时钟树配合完成。

    2.4.3 如何使用时钟树

    2.4.3.1 全局时钟资源

    一,通过正确的物理连接
    如果时钟信号是FPGA外部产生的,则只需要将时钟信号连接到专门为全局时钟设计的管脚即可。这些特定管脚也可以接入普通信号,FPGA会对接入信号进行分析,此时不会为其分配时钟域资源。
    二,通过恰当的代码描述
    当时钟信号没有通过正确管脚引入FPGA,或者时钟由FPGA内部产生,则需要用原语。

    BUFG onTree(.O(globalClk), .I(innerClk));
    
    2.4.3.1 区域时钟树、IO时钟树

    与全局时钟类似,FPGA也有专门为区域时钟和IO时钟设计的专用管脚,但是仅仅连接在这些管脚不一定能完成相应时钟树的应用,必须在代码中用原语描述才可以。例如BUFIO分配IO时钟树,BUFR分配区域时钟树。

    2.4.4 被“拉下树”的信号

    时钟树仅能提供对时钟信号的传递作用。因此,凡是对时钟树上的时钟信号进行任何的逻辑操作,生成新的信号,那么新的信号就不在时钟树上了(原始时钟信号仍在树上)。如果希望新的信号作为时钟驱动一些逻辑,则必须重新调用原语让新的信号上树。

    3.DCM与PLL

    3.1 PLL

    锁相环,PLL包含了模拟电路部分。基本原理如下:
    在这里插入图片描述
    PLL只有一个输出端口,但是可以通过外接分频器和移相器实现多路输出,因此PLL的输出往往是受限的、相关的。

    3.2 DCM

    DCM为纯数字电路。

    3.3 应用

    待完成

    展开全文
  • 引言:从本文开始,我们陆续介绍Xilinx 7系列FPGA时钟资源架构,熟练掌握时钟资源对于FPGA硬件设计工程师及软件设计工程师都非常重要。本章概述7系列FPGA时钟,比较了7系列FPGA时钟和前几代FPGA差异,总结7系列...
  • FPGA专用时钟引脚

    千次阅读 2018-09-18 09:25:04
    在最近的一次设计中,我把FPGA的系统时钟接到了IO_L0N_CC_GC_3上,我本以为有*GC*的就是专用时钟引脚,但是后来才发现对于单端时钟信号而言,只有*P*GC*才能当专用时钟引脚,如果想下图这么设计,在Implement时会...
  • FPGA 时钟管脚详述1

    千次阅读 2021-02-12 23:46:03
    本文主要用来随意记录一下最近在为手头的FPGA项目做约束文件时候遇到的一点关于FPGA专用时钟管脚相关的内容,意在梳理思路、保存学习结果、以供自己日后以及他人参考。 起因是在做约束文件中的时序例外约束部分的...
  • FPGA里面的时钟管理

    千次阅读 2019-07-25 15:21:53
    一般情况下,FPGA器件内部的逻辑会在每个时钟周期的上升沿执行一次数据的输入和输出处理,而在两个时钟上升沿的空闲时间里,则可以用于执行各种各样复杂的处理。而一个比较耗时的复杂运算过程,往往无法一个时钟周期...
  • Xilinx FPGA全局时钟和局部时钟资源

    千次阅读 2019-09-12 09:40:10
    “全局时钟和第二全局时钟资源”是FPGA同步设计的一个重要概念。合理利用该资源可以改善设计的综合和实现效果;如果使用不当,不但会影响设计的工作频率和稳定性等,甚至会导致设计的综合、实现过程出错。Xilinx ...
  • FPGA 中差分时钟的使用

    千次阅读 2021-04-20 16:24:29
    多FPGA的板载时钟(板载晶振提供)不是普通的单端时钟信号,而是差分时钟信号,比如我正在使用的genesys2开发板。 此时我们就不能像使用普通时钟信号一样直接使用差分时钟信号,而是需要使用IBUFGDS(xilinx 原语...
  • FPGA-时钟

    2021-02-08 20:54:12
    在时序逻辑中,正是时钟信号将各个存储单元中的数据一级、一级地推动下去,如果时钟信号突然停止,那么整个时序逻辑也将陷入瘫痪,因此时钟就好像时序逻辑的心跳一样,那么重要,却又那么平常的存在着。 一、时钟...
  • 时钟周期约束   时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束。   下面我们讲一些Vivado中时钟约束指令。 1. Create_clock   在Vivado中使用...
  • FPGA时钟倍频,分频

    2021-07-20 10:25:07
    1、 实验环境 ...PLL 技术非常复杂,主要实现的功能就是倍频分频,实现的原理这里丌做讲解,FPGA 内的PLL 都是一个硬件模块(硬核),是 FPGA 中非常重要的资源。 Cyclone IV 和 Cyclone 10 LP 最多能
  • 普通IO不能直接作PLL的时钟输入,专用时钟管脚可以; 普通IO可以通过BUFG再连到PLL的时钟输入上,但要修改PLL的设置 input clk的选项中要选择"No Buffer"; 具体内部布局分配可以通过 Xilinx的FPGA Editor来查看, ZYNQ的...
  • FPGA异步时序和多时钟模块

    千次阅读 2018-04-13 13:26:52
    第六章 时钟域有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域。...FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过I/O接口接收和发送数据...
  • FPGA时钟简介

    千次阅读 2018-11-26 20:36:44
    时钟,时序逻辑的心跳 ...几乎所有的FPGA设计都是时序逻辑,就意味着几乎所有的FPGA设计都离不开时钟时钟之于时序逻辑,好比空气之于众生。因此,要确保FPGA设计成功,就先要确保时钟信号成功。 如果要评判FPG...
  • FPGA数字时钟计数器

    千次阅读 2018-11-08 17:58:47
    FPGA数字时钟计数器 好久没有登博客了,周末出去浪了一转!!! 今天给大家讲一下数字时钟计数器,上个月写的。只是简单的数字时钟计数,没有设置闹钟、设置时间和秒表的功能,下次我会发一个带有功能的数字时钟,...
  • 基于FPGA的简易时钟(含verilog源码)

    千次阅读 热门讨论 2021-06-06 17:33:40
    基于FPGA的简易数字时钟(含Verilog代码) 实验板板上亲测可用。
  • FPGA时钟信号的总结

    万次阅读 多人点赞 2017-10-17 12:57:51
    数字电路中,时钟是整个电路最重要、最特殊的信号。 第一, 系统内大部分器件的动作都是在时钟的跳...出于这样的考虑在FPGA这类可编程器件内部一般都设有数量不等的专门用于系统时钟驱动的全局时钟网络。这类网络的特点
  • 数字时钟——FPGA

    2021-05-29 13:34:02
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 设计要求 一、如何分频(即生成想要频率的时钟信号)? 二、利用视觉暂留 ...用FPGA实现一个数字时钟——用ve..
  • Xilinx FPGA内部资源之时钟篇1

    万次阅读 2018-09-21 16:35:07
    以下时钟介绍以Virtex5系列芯片作为参考芯片 ...事实上每个时钟域的大小都是固定的,在Virtex5系列芯片中,每个时钟域的大小固定为20个CLB,这就导致了芯片越大,时钟域就越。 Xilinx FPGA的...
  • Xilinx 7系列FPGA时钟结构

    千次阅读 2021-12-12 23:13:48
    本文源自Xilinx手册《UG472:7 Series FPGAs Clocking Resources》的第一章节,主要讲解了Xilinx7系列器件的时钟结构。
  • 在Xilinx的FPGA中,CMT包含PLL和MMCM。 PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存的存取资料等。PLL用于振荡器中的反馈技术。 MMCM(混合模式时钟管理):是...
  • XILINX 7系列FPGA_时钟

    千次阅读 多人点赞 2020-03-26 09:48:59
    XILINX 7系列FPGA时钟简介,能够对基本的时钟结构有个了解
  • FPGA基于Verilog实现的功能时钟 时钟实现的功能: 1.数码管显示时间 2.有计时功能 3.可实现定点报时 功能时钟共两种工作状态: ...一共有5个输入,包括四个按键及一个时钟输入 3个输出,包括位、
  • 亚稳态 触发器是FPGA设计中最常用的基本器件。...在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability)
  • 如何正确使用FPGA时钟资源

    千次阅读 2018-02-26 16:16:59
    如何正确使用FPGA时钟资源把握DCM、PLL、PMCD和MMCM知识是稳健可靠的时钟设计策略的基础。 赛灵思在其FPGA中提供了丰富的时钟资源,大多数设计人员在他们的FPGA设计中或多或少都会用到。不过对FPGA设计新手来说,...
  • 在xilinx的FPGA中,要实现高频时钟的输出,并保证时钟质量,最有效的方案是使用ODDR来产生。例如,需要输出的时钟为CLK,用CLK来驱动ODDR,让ODDR在CLK的上升沿输出0或1,在CLK的下降沿输出1或0,从而产生一个时钟...
  • FPGA技巧篇】时钟设计技巧

    千次阅读 2021-12-08 21:00:48
    时钟信号在很大程度上决定了整个设计的性能和可靠性。
  • FPGA时钟域处理方法

    2021-07-17 20:19:16
    前提条件是 快时钟域到慢时钟域,原因有两个,1)只有快时钟域到慢时钟域,才能保证慢时钟域的脉冲信号能被快时钟域采样到。2)两级寄存器的主要作用是消除亚稳态(不能完全消除亚稳态,但可以使亚稳态出现的概率...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,662
精华内容 7,064
关键字:

多时钟输入fpga