Clock Skew , Clock Uncertainty和 Period

本文将介绍FPGA中和时钟有关的相关概念,阅读本文前须要对时序收敛的基本概念和创建、保持关系有必定了解,这些内容能够在时序收敛:基本概念创建时间和保持时间(setup time 和 hold time)中找到。html

系列目录  dom

    时序收敛:基本概念工具

    创建时间和保持时间(setup time 和 hold time)ui

    OFFSET约束(OFFSET IN 和OFFSET OUT)spa

    Clock Skew , Clock uncertainly 和 Period设计

    特殊约束From Tohtm

    OFFSET IN 使用举例blog

    Achieving Timing Closureip

0. 引言

    Intel 4790K的主频是4.0GHz,高通801的单核频率可达2.5GHz,A8处理器在1.2GHz,MSP430能够工做在几十MHz……这里的频率的意思都是相似的,这些处理器的频率都是厂商给定的。可是对于FPGA的工做频率而言却每每须要咱们本身决定,在产品的设计初始就须要考虑FPGA工做在哪一个频率,譬如250MHz。这个取值并非瞎肯定的,譬如若是定在1GHz,那显然是不可能的,有一本叫《XXXXX FPGA Data Sheet DC and Switch Characteristics》的手册给出了FPGA各个模块的直流供电特性和最高工做频率。这里给出的是理论工做上限制,Virtex-5各个模块工做频率最高大概在400-500MHz之间。固然还要考虑FPGA的输入clk了,即便有DCM等模块分频倍频,通常也不会选择一个很奇怪的分频比。element

    一旦工做频率肯定下来以后,问题就来了。你所创建的工程是否能在这一要求的工做频率下正常工做?只须要在UCF文件内添加时钟的周期约束,Place & Route以后就能够获得结果了。约束知足了,很好;没有知足,能够改,如何修改将在Achieving Timing Closure中介绍。

    谈到这里,有一个问题呼之欲出:除了器件自己的限制,还有什么会影响工做频率?下文将介绍相关概念。

1. Clock Skew

    考虑同步时序电路中的触发器,在时钟沿到达的时候,数据必须是稳定(非亚稳态)且有效的(符合设计需求)。同步时序电路中,对于两个相连的触发器(譬以下图,Figure6-26),咱们天然但愿这两个触发器的时钟相位彻底一致,但这每每是不现实的。不一样的延时将破坏这一关系,延时差称为Clock Skew,即时钟歪斜。

    Clock Skew = clock path delay to the destination synchronous element - clock path delay to te source synchronous element.

    时钟的不一样路径延时将破坏其本来完美的相位关系。但并非说Clock Skew的取值为0是最好的 。Clock Skew是如何影响时钟周期(频率)将在第三节介绍。

    注意,clock skew中只提到了path delay,可是实际上对于destination synchronous element 和source synchronous element而言,时钟的相位多是不同的。这一点表现出了时钟的相位和clock skew是独立的两个概念。在前文的OFFSET中,相位的表现为clock arrival time。

clipboard

 

    上图是一个clock skew的例子,能够看到两个触发器的时钟不是同相的,可是计算clock skew的时候没有必要考虑。以DCM的输出做为参考,源同步元素的路径延时为0.852+0.860+0.639 = 2.351,目的同步元素的路径时延为0.860 + 0.860 +  0.639 = 2.359。故clock skew = 0.008 。

2. Clock Uncertainty

    Clock Uncertainty 的概念比较好理解,就是时钟的不肯定性。时钟不肯定性是时钟自己的不完美致使的。譬如对于100MHz时钟,上升沿本应该在0ns,10ns,20ns;实际上却在0ns,10.01ns,19.99ns,这个差距就是时钟的不肯定性。时钟不肯定性受到了多个因素的影响,其中一个因素是clock jitter,关于clock jitter,PERIOD约束中有一个INPUT JITTER的关键字告诉综合工具输入时钟的jitter。譬如

clipboard[1]

    不一样状况下,Clock Uncertainty 的计算方式是不同的,譬如DCM时钟下

Clock Uncertainty = [√(INPUT_JITTER² + SYSTEM_JITTER²) +  DCM_Discrete_Jitter]/2 + DCM_Phase_Error

    SYSTEM JITTER定义了整个系统的jitter,受到了电源噪声、板级噪声和系统任何外部jitter的影响。对于clock uncertainty和clock jitter来讲,好像并无什么太值得注意的地方。

3. Period 分析

Clock Domains

对于同步时序电路来讲,不可避免的有时钟的存在,比较简单的就是全部的触发器都采用了一个时钟。那么能够认为整个设计中的路径都处于这个时钟的覆盖下,以下图,这两个触发器之间的路径是受到这一个时钟的时钟周期约束的。这种状况称为single clock domain。

clipboard[2]

 

    可是对于大多数设计来讲,状况并非这样的,譬如DCM能够分出不一样相位的时钟。以下图,此时两个触发器的时钟不是同样的,而这两个触发器之间的数据路径链接了这两个时钟。什么是时钟域?域便是区域,时钟的区域,在我看来就是时钟覆盖的范围。下图中触发器之间的路径,一端属于clk20,一端属于clk20_90g,横跨了两个时钟域。注意这两个时钟是一个DCM产生的,时钟相关,所以XST可以对其进行分析。本节内容不谈跨时钟域的问题。

clipboard[3]

举例

    以上图(Figure6-6)为例,计算slack。Requirement取决于两个触发器时钟的相对相位关系。注意到第一个触发器在降低沿采样,第二个触发器相移为90,时钟周期为20ns。结合前文的setup和OFFSET说起的相关概念。这是很好理解的。和OFFSET约束不一样的是,OFFSET主要是受到外部信号的相对关系影响,Period则基本取决于设计。经过分析可知,限制最小时钟周期的影响因素在于data path。data path包括了布线延时和逻辑延时。了解到这一点,对以后代码编写是由帮助的。譬如,不能有太复杂的逻辑。(这是由于FPGA的LUT结构输入有限,以4输入为例,逻辑复杂须要LUT级联,那么天然会影响到逻辑延时)

Slack (setup path): 13.292ns (requirement - (data path - clock path skew + uncertainty))

Source: IntC_2 (FF)

Destination: XorB_2 (FF)

Requirement: 15.000ns

Data Path Delay: 2.594ns (Levels of Logic = 1)

Clock Path Skew: -0.086ns

Source Clock: clk0 falling at 10.000ns

Destination Clock: clk90 rising at 25.000ns

Clock Uncertainty: 0.200ns

周期约束分析

    结合三节内容来看,注意式子Slack = requirement - (data path - clock path skew + uncertainty)) 。requirement是由时钟周期肯定的,要判断时钟的周期约束是否获得知足,计算data path - clock path skew + uncertainty是否大于requirement 便可。data path是数据路径延时,另两个参数已经在1,2节介绍。

相关文章
相关标签/搜索