一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 12322|回复: 4

Tsu,Tco,Th,Tpd的概念

[复制链接]
发表于 2010-5-20 22:30 | 显示全部楼层 |阅读模式
Tsu,Tco,Th,Tpd的概念
( I$ q( A  S) l. z% m2 I* t7 I: c: _) O
6 a! ^! k/ e& k3 _0 e2 C# c
, j; Q! a7 T9 Y7 Y4 Ztsu : setup time, ) H) j. L6 t4 H* O% h" |: f' Y
定义输入数据讯号在 clock edge 多久前就需稳定提供的最大须求;以 正缘触发(positive edge trigger)的D flip-flop 来举例就是 D 要比 CLK 提前 tsu 时间以前就要准备好,此 flip-flop 就能于某特定之频率下正常工作.
( r: G3 Q& ?5 m# ?( R
th : hold time,$ y# A7 G: I4 y1 ]
定义输入数据讯号在 clock edge 后多久内仍需稳定提供的最大须求;以 正缘触发(positive edge trigger)的D flip-flop 来举例就是 D 要在 CLK 正缘触发  th  时间内仍要提供稳定之数据,此 flip-flop 就能于某特定之频率下正常工作.
- z* W$ ~* I2 W# W$ \
tco : clock output delay,+ r* N7 A; b  N# n1 F% V7 S" O, ?
定义由 clock latch/trigger 到输出数据有效之最大延迟时间 ;以正缘触发(positive edge trigger)的D flip-flop 来举例就是Q 要在 CLK 正缘触发后至多  tco  时间就会稳定输出.
& z2 y; d: ?' Q- x
tpd : propagation delay,6 ?" X4 w3 s0 q
定义由输入脚到输出脚最大延迟时间,一般定义予 combination logic circuit 较适合.
 楼主| 发表于 2010-5-30 11:26 | 显示全部楼层
FPGA时序分析实用指南
; N' @& X5 g8 i! F3 L
, L2 c$ R  T6 _, ?  S! \1 n1.       基本时序分析; q+ |" {, K: ^4 E
% o: {( s8 \# R% c; {
a)         时钟周期
* O/ R2 c$ `' P6 v. l
; U0 q4 i# L( D. ^时钟周期分析是最简单的一个, 也是最容易理解的一个分析, 硬件对应的基本道理是寄存器输出延迟 + 逻辑操作延时 + 连线延迟 + 建立时间 必须小于时钟周期, 上面的式子即定义了最短的时钟周期, 也即信号的最高工作频率. 在一些实际情况下, 上面的式子会有一些变化, 比如考虑时钟的抖动, 不同信号状态下传输的延迟不一样, 等. 一般情况下, 分析最坏情况即可. 一般情况下, 时钟周期都是作为全局约束添加的. 在FPGA工作当中, 只需要加一个简单的时钟周期约束即可. 在实际项目当中, 可能会遇到有多个相关时钟, 在Quartus II中, 可以设置时钟之间的相对关系, 然后只需要设置基本的时钟约束即可. 可以在 Assignments à Settings à Timing Analysis Settings à Classical timing analyzer à Individual clock中设置. 对Quartus比较熟悉的也可以通过.qsf文件设置, 具体语法可以参考原有的设置, 一般情况下, 只要稍作修改就可以了. 直接编辑.qsf文件的好处是对于添加多个类似的约束比较快. 在ISE中, 可以使用 User constraints à create timing constraints, 通过图形界面设置, 也可以直接编辑.ucf文件实现. 同样, 具体语法可以参考现成的文件.- b7 N  z! A3 O  m- Y+ J
8 b- _: e0 z8 U0 P; y4 @
b)         输入setup
" ]+ K2 M" o( p) V, t& o+ k& \/ S% F/ @4 _
输入数据的setup要求是初学者经常搞糊涂的一个约束. 其实Quartus和ISE里边对输入setup的定义都非常清晰, 也即, 从外部来看, 只要满足时钟和数据一定的关系, FPGA内部可以保证不会出现亚稳态现象(即采在数据的沿上). 在Quartus中, 这个参数是Tsu, 其准确定义如下: The length of time for which data that feeds a register via its data or enable input(s) must be present at an input pin before the clock signal that clocks the register is asserted at the clock pin. 具体计算公式如下: tSU = + - . 确切的说, 这个定义应该是从外部看到的FPGA的时序要求. 比如Tsu为 0.5ns, 那么只要数据在0.5ns之前建立, 数据送入FPGA应该不会出现问题. Tsu可以是全局约束, 也可以是局部约束. 全局约束可以通过Assignments à Settings à Timing Analysis Settings à Classical timing analyzer中的Tsu来设置, 局部约束可以通过Assignment Editor来添加.( y8 A1 V& C! L  u: u$ v! m

6 @% P& s$ ?3 j- ^8 D9 [( m在ISE中, 叫做Offset In Before或者Pad to setup, 准确定义如下: The minimum time for input signals to be stable before they can be sampled correctly on the next active clock edge. 具体计算公式为: Slack = Requirement - (Data Path - Clock Path + uncertainty)+ L  n/ Z% f+ `* w
  J1 E( y5 h+ ~( R" a( r5 x! a
举个例子来说, 如果时序报告给出数值为4.468ns, 那么这意味着数据必须在时钟沿之前4.468ns建立, 换而言之, 只要外部送入数据在4.468ns之前建立, FPGA内部采用不会出问题. 具体的计算方法如同Altera. Offset in Before可以是全局约束, 也可以局部约束, 在Constraint Editor可以设置.
! \- d0 V: g1 [$ V& M1 d& T5 T9 }# r6 A, q" ]1 ?8 W5 z/ H! Q0 i
在实际使用过程中, 通常大部分情况下, 数据和时钟都是每个周期有效. 因此, 数据到底在哪个时钟周期被寄存器捕获其实并不重要, 关键是所有的相关数据(比如一个总线的数据[7:0])必须保证在一个时钟周期内采样. 因此, 如何避开会造成亚稳态以及如何使得相关的数据的Tsu尽量保持一致, 是解决数据输入FPGA的时序问题的关键. 比如, 假定输入FPGA的数据在时钟沿的1ns处发生变化, 那么Tsu应当避开这个1ns附近这个区域. 只要按照上述原则操作, 时序裕量都会是够的. 在一些特殊情况下, 比如有使能信号传递, 或者是数据的时钟周期必须严格对其, 或者是时钟抖动特别大, 则需要更加仔细的考虑时序约束. 6 w# h6 b' }1 P+ {1 l

+ p3 M9 }' R6 MTco/ p( J+ g( C6 l+ V7 P6 ^

4 q) s' G9 v! C$ ^/ f& s% ~( O9 }2 @; iTco是Clock to output的延时. 道理如同Tsu, 只不过是换个角度看问题, 即作为驱动源来看待的问题. 也是从外部观察的. 在Quartus中, 这个参数是Tco, 其准确定义如下: The maximum time required to obtain a valid output at an output pin that is fed by a register after a clock signal transition on an input pin that clocks the register. 意思是相对于输入时钟管脚而言, 从寄存器输出的数据(到达pin)最长多长时间可以稳定. 具体的计算公式如下:
* |+ I  P+ Y3 I; F7 X3 M7 g# W& F4 x- u* n/ A5 b( b
tCO = + + . Tco可以是局部约束, 也可以是全局约束. 具体设置方法和Tsu类似.
; s, u% Q- [2 c+ P* q5 k) H' p# L
4 k: {6 X/ y5 `: t0 t- e) v) w在ISE中, 这个参数是Offset out after或者称为Clock to Pad, 其准确定义如下: The clock-to-output, or OFFSET OUT, delay of the FPGA is the total delay encountered from the time a clock edge arrives at the input pin of the device to the time data becomes valid at the output pin of the device. 具体计算公式为Slack = Requirement – (Clock Arrival + Clock Path + Data Path + Clock Uncertainty). Offset Out After可以为全局约束或者是局部约束, 在constraint editor工具或者直接编辑UCF文件均可设置. 下面的一个报告给出了一个示例:
& F) E; x* B  B& s) l# Q+ d6 [5 g" E  o- m) F- F
        OFFSET = OUT 4 ns AFTER COMP "ClkIn";
' |' c8 `8 R# V$ W; ]        Largest slack: 0.667 ns; Smallest slack: 0.667 ns; Relative Skew: 0.0 ns;6 A. l$ l5 ~/ v$ U1 e+ A4 x3 h' a
        +-----------------------------------------------+-------------+-------------+. p" ]; v6 B8 V# r/ t
        |PAD                                            |    Slack    |Relative Skew|
$ M  ^$ u) J/ e+ D2 M% d+ ^        +-----------------------------------------------+-------------+-------------+$ o; X& U3 v: u0 k, |1 Z0 E
        |DataOut<0>                                     |        0.667|        0.0 |9 ?. Q' M$ o4 _2 @8 q
        +-----------------------------------------------+-------------+-------------+
$ r' m$ h. F1 `' H- M9 c
: Q* v" [. t5 Z/ C# z$ @: r: }5 g即要求的Tco为4ns, 实际的Tco为3.333ns, 寄存器输出的最大延迟不超过3.33ns.
( R* L( y( a9 A/ n. b" W9 b3 z. u* w! o: A6 P
         在实际应用中, 还需考虑其他的一些因素, 比如时钟布线的策略, 比如星形结构, Daisy Chain结构等等. 不同的策略分析的方法有所差别, 具体的分析方法将在下篇有关FPGA芯片间通信(或着板间通信)的时序分析介绍.
回复

使用道具 举报

 楼主| 发表于 2010-5-31 11:45 | 显示全部楼层
Altera对应的时序概念
6 |. c! h6 a) m/ Y9 ]$ x% o7 T
    下面主要介绍Altera对应的这些时序概念和约束方法。前面首先介绍的第一个时序概念是周期(Period),这个概念是FPGA/ASIC通用的一个概念,各方的定义相当统一,至多是描述方式不同罢了,所有的FPGA设计都首先要进行周期约束,这样做的好处除了在综合与布局布线时给出规定目标外,还能让时序分析工具考察整个设计的Fmax等。
  A/ J: J- {6 O" u. w    Altera的周期定义如下图所示,公式描述如下:
$ Z- A, e$ _% Nhttp://www.dzkf.cn/upimg/userup/0810/2PZ2455136.jpg
- K2 k/ S  g  V0 s图5 Altera 的 Period 示意图5 f! C, V! A' O' x: w% }
Clock Period = Clk-to-out + Data Delay + Setup Time - Clk Skew# q( q, P; Z( t; i9 R
即,Tclk= Tco+ B + Tsu-(E-C) Fmax =1/Tclk
! s* c' E3 H. p0 W9 \& H! D    对比一下前面的介绍,只要理解了B 包含了两级寄存器之间的所有 logic 和 net 的延时就会发现与前面公式完全一致。
( c* [4 E0 |+ f; PJ Altera的其他基本时序概念' N* H3 W( o" \! ?( D, @% b* ^
    Clock Setup Time (tsu) 要想正确采样数据,就必须使数据和使能信号在有效时钟沿到达前就准备好,所谓时钟建立时间就是指时钟到达前,数据和使能已经准备好的最小时间间隔。如下图所示:1 G  W4 \3 i% Y! G6 c. h
http://www.dzkf.cn/upimg/userup/0810/2PZ5041I8.jpg
; z& P0 H9 s5 q图6 tsu示意图
( N1 H2 t: `( t3 P& p; d(注:这里定义Setup时间是站在同步时序整个路径上的,需要区别的是另一个概念Micro tsu。Micro tsu指的是一个触发器内部的建立时间,它是触发器的固有属性,一般典型值小于1~2ns。在Xilinx等的时序概念中,称Altera的Micro tsu为setup时间,用Tsetup表示,请大家区分一下。 回到Altera的时序概念,Altera的tsu定义如下: tsu = Data Delay – Clock Delay + Micro tsu)
8 E( d; n8 ~1 z2 [+ b. h, v7 }  x$ t3 c8 b& m! u2 G/ d; J
    Clock Hold Time (tH) 时钟保持时间是只能保证有效时钟沿正确采用的数据和使能信号的最小稳定时间。其定义如下图所示:) I6 p+ ?1 \  S1 Z6 V1 O; f
http://www.dzkf.cn/upimg/userup/0810/2PZ54QC4.jpg
* b7 N' T. m0 G5 ]$ ~图7 tH示意图
. C4 H5 ~! H+ u6 N& W, W) V* I7 |    定义的公式为: tH= Clock Delay – Data Delay + Micro tH
  N  |. p# \4 K2 w# y) Q. R注:其中Micro tH是指寄存器内部的固有保持时间,同样是寄存器的一个固有参数,典型值小于1~2ns。
+ @! `3 i4 [! ~, d! `1 V) c$ j8 V) R# b2 U6 `' B
    Clock-to-Output Delay(tco) 这个时间指的是当时钟有效沿变化后,将数据推倒同步时序路径的输出端的最小时间间隔。如下图所示:, u' ?5 h9 X* g8 H
http://www.dzkf.cn/upimg/userup/0810/2PZA641R.jpg
7 [1 a# @' I) ^) `& \+ F9 p# |图8 tco示意图
7 x0 m: M# |* ytco = Clock Delay + Micro tco + Data Delay
0 R. y* _' y7 O/ v3 U2 b+ n" }(注:其中 Micor tco也是一个寄存器的固有属性,指的是寄存器相应时钟有效沿,将数据送到输出端口的内部时间参数。它与Xilinx的时序定义中,有一个概念叫Tcko是同一个概念。)4 ~6 j/ |& s9 R6 F+ C8 P4 e8 r

8 ~, o0 U7 f* t, y7 j$ @& Q    Pin to Pin Delay (tpd) tpd指输入管脚通过纯组合逻辑到达输出管脚这段路径的延时,特别需要说明的是,要求输入到输出之间只有组合逻辑,才是tpd延时。
/ L3 Z( _9 F  B) _# q    Slack是表示设计是否满足时序的一个称谓,正的slack表示满足时序(时序的余量),负的slack表示不满足时序(时序的欠缺量)。slack的定义和图形如下图所示。9 ^9 [) ~" D! r! O
http://www.dzkf.cn/upimg/userup/0810/2PZIB257.jpg  _+ n8 c  A+ }$ D2 O2 V! R
图9 slack示意图$ G' o7 d; F1 [" I
Slack = Required clock period – Actual clock period# i8 |9 D5 J1 s8 s+ x
Slack = Slack clock period – (Micro tCO+ Data Delay + Micro tSU)& b$ o- W* m9 |% l
    Clock Skew指一个同源时钟到达两个不同的寄存器时钟端的时间偏移,如下图所示。4 _. T9 c0 U+ S
http://www.dzkf.cn/upimg/userup/0810/2PZR12C0.jpg
7 `# p% K; U+ q  X9 O图10 clock skew示意图
回复

使用道具 举报

 楼主| 发表于 2010-5-31 11:59 | 显示全部楼层
无论是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。 在设计PLD/FPGA时通常采用几种时钟类型。时钟可分为如下四种类型:全局时钟、门控时钟、多级逻辑时钟和波动式时钟。多时钟系统能够包括上述四种时钟类型的任意组合。5 T; B1 a2 q+ F0 w, U4 J4 x

$ L. e! [0 L1 W1 p' g/ J# u/ M* \+ l; V6 A
1.全局时钟
9 M6 g; }4 k2 D" z4 A7 Z/ @) m' H; T/ n) X
对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。在PLD/FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟。PLD/FPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时。8 l; ^$ P4 U& {

( p- \" M' k. O4 ~/ q
3 X( q9 V2 u; V图1 示出全局时钟的实例。图1 定时波形示出触发器的数据输入D[1..3]应遵守建立时间和保持时间的约束条件。建立和保持时间的数值在PLD数据手册中给出,也可用软件的定时分析器计算出来。如果在应用中不能满足建立和保持时间的要求,则必须用时钟同步输入信号(参看下一章“异步输入”)。
* P7 W) z) R$ c$ W0 b; b

http://www.pld.com.cn/advance/clock/clock.1.jpg

http://www.pld.com.cn/advance/clock/clock.2.jpg

+ {- O7 H6 }9 D5 A" \( Z. D
图1 全局时钟


$ A  j) e5 n* t(最好的方法是用全局时钟引脚去钟控PLD内的每一个寄存器,于是数据只要遵守相对时钟的建立时间tsu和保持时间th)
6 z7 v5 h- V' G* _/ m 
) y) X  t5 ?2 N! N: Z( n2.门控时钟7 ?$ v. ^0 [" X/ r* L( Q4 o
, w8 L( Y- @# ~4 o. u
在许多应用中,整个设计项目都采用外部的全局时钟是不可能或不实际的。PLD具有乘积项逻辑阵列时钟(即时钟是由逻辑产生的),允许任意函数单独地钟控各个触发器。然而,当你用阵列时钟时,应仔细地分析时钟函数,以避免毛刺。' `( _' z9 L$ p- U5 @" U
通常用阵列时钟构成门控时钟。门控时钟常常同微处理器接口有关,用地址线去控制写脉冲。然而,每当用组合函数钟控触发器时,通常都存在着门控时钟。如果符合下述条件,门控时钟可以象全局时钟一样可靠地工作:4 i, |/ [5 {' P  m, c6 c

. ^  w. `: `% K. s1.驱动时钟的逻辑必须只包含一个“与”门或一个“或”门。如果采用任何附加逻在某些工作状态下,会出现竞争产生的毛刺。# p. E( L6 r+ [. T# t
2.逻辑门的一个输入作为实际的时钟,而该逻辑门的所有其它输入必须当成地址或控制线,它们遵守相对于时钟的建立和保持时间的约束。+ i! C$ w. S' U9 A9 U

9 W, c/ g" f# Y. @  f6 D1 c( G5 A, H, R- C/ z# ~
图2和图3 是可靠的门控时钟的实例。在 图2 中,用一个“与”门产生门控时钟,在 图3 中,用一个“或”门产生门控时钟。在这两个实例中,引脚nWR和nWE考虑为时钟引脚,引脚ADD[o..3]是地址引脚,两个触发器的数据是信号D[1..n]经随机逻辑产生的。
7 S" N7 A; o6 d$ |; D

http://www.pld.com.cn/advance/clock/clock.3.jpg

http://www.pld.com.cn/advance/clock/clock.4.jpg

图2 “与”门门控时钟

3 t, w4 c1 d' o
 

http://www.pld.com.cn/advance/clock/clock.5.jpg

" v( p( W2 p! a0 l
 

http://www.pld.com.cn/advance/clock/clock.6.jpg

图3 “或”门门控时钟


+ {# g- o6 }! v1 d4 x
6 a& \9 v; i3 F& A1 Q图2和图3 的波形图显示出有关的建立时间和保持时间的要求。这两个设计项目的地址线必须在时钟保持有效的整个期间内保持稳定(nWR和nWE是低电平有效)。如果地址线在规定的时间内未保持稳定,则在时钟上会出现毛刺,造成触发器发生错误的状态变化。另一方面,数据引脚D[1..n]只要求在nWR和nWE的有效边沿处满足标准的建立和保持时间的规定。6 k) S, S. P0 s9 F" k( }2 I6 P
9 s% W' _; r# m: v' l
我们往往可以将门控时钟转换成全局时钟以改善设计项目的可靠性。图4 示出如何用全局时钟重新设计 图2 的电路。地址线在控制D触发器的使能输入,许多PLD设计软件,如MAX+PLUSII软件都提供这种带使能端的D触发器。当ENA为高电平时,D输入端的值被钟控到触发器中:当ENA为低电平时,维持现在的状态。

http://www.pld.com.cn/advance/clock/clock.7.jpg

. {  U4 k; G8 n
http://www.pld.com.cn/advance/clock/clock.8.jpg

图4 “与”门门控时钟转化成全局时钟
; U& s! k, ^/ f; _


. D- {) L: W" K$ A! {" d
2 a5 Z+ B7 F; e5 f/ C! h5 `' _; s, g7 ^* R- Y
1 O$ g: s$ g# T. E& _1 M
图4 中重新设计的电路的定时波形表明地址线不需要在nWR有效的整个期间内保持稳定;而只要求它们和数据引脚一样符合同样的建立和保持时间,这样对地址线的要求就少很多。/ s6 `6 @, A- \5 q0 \# ]
- v+ s/ C) f9 l  p) d% j  F
图 给出一个不可靠的门控时钟的例子。3位同步加法计数器的RCO输出用来钟控触发器。然而,计数器给出的多个输入起到时钟的作用,这违反了可靠门控时钟所需的条件之一。在产生RCO信号的触发器中,没有一个能考虑为实际的时钟线,这是因为所有触发器在几乎相同的时刻发生翻转。而我们并不能保证在PLD/FPGA内部QA,QB,QC到D触发器的布线长短一致,因此,如 图5 的时间波形所示,在器从3计到4时,RCO线上会出现毛刺(假设QC到D触发器的路径较短,即QC的输出先翻转)。
8 n8 P# J8 I0 T; q& H

http://www.pld.com.cn/advance/clock/5-1.jpg

http://www.pld.com.cn/advance/clock/5-2.jpg

6 f( y$ i) K( y/ R, l
 

( `# y% k, k8 I- ]* G% z
图5 不可靠的门控时钟
) p, r  u) s8 T( k
$ `: O9 D' j8 N(定时波形示出在计数器从3到4改变时,RCO信号如何出现毛刺的)

, t" s, B. q+ z
, P! u# O' S/ A. @
6 t$ w! [7 L  t! J. i! k
图6 给出一种可靠的全局钟控的电路,它是图5不可靠计数器电路的改进,RCO控制D触发器的使能输入。这个改进不需要增加PLD的逻辑单元。

http://www.pld.com.cn/advance/clock/6.jpg
5 ^3 r& L" F) s+ ^0 `+ b$ X$ T% v  j5 ?
图6 不可靠的门控时钟转换为全局时钟
$ g$ [7 I/ Y% C" }: C  N/ w" Q$ m1 v# f% M$ z
(这个电路等效于图5电路,但却可靠的多)

6 u' r7 b5 J; T& D1 Q0 E

' V+ \3 R3 D. X; ]3.多级逻辑时钟* _; [9 w% E+ v

6 Q4 e2 A3 I( _1 _8 S2 r当产生门控时钟的组合逻辑超过一级(即超过单个的“与”门或“或”门)时,证设计项目的可靠性变得很困难。即使样机或仿真结果没有显示出静态险象,但实际上仍然可能存在着危险。通常,我们不应该用多级组合逻辑去钟控PLD设计中的触发器。
* _9 N+ s2 ~0 ^* E' n2 _: y5 \+ ~4 z7 {& g: O
图7 给出一个含有险象的多级时钟的例子。时钟是由SEL引脚控制的多路选择器输出的。多路选择器的输入是时钟(CLK)和该时钟的2分频(DIV2)。由图7 的定时波形图看出,在两个时钟均为逻辑1的情况下,当SEL线的状态改变时,存在静态险象。险象的程度取决于工作的条件。 多级逻辑的险象是可以去除的。例如,你可以插入“冗余逻辑”到设计项目中。然而,PLD/FPGA编译器在逻辑综合时会去掉这些冗余逻辑,使得验证险象是否真正被去除变得困难了。为此,必须应寻求其它方法来实现电路的功能。
- x$ a/ ~+ h& ~" O& V$ C! a5 y; w0 @: L 

http://www.pld.com.cn/advance/clock/clock21.jpg

) A. b5 w' M( b6 i- V
图7 有静态险象的多级时钟


! U% Z2 i5 h! O1 e' ?1 \' r
' e& M6 y/ Y7 `8 u: ?& k0 u图8 给出 图7 电路的一种单级时钟的替代方案。图中SEL引脚和DIV2信号用于使能D触发器的使能输入端,而不是用于该触发器的时钟引脚。采用这个电路并不需要附加PLD的逻辑单元,工作却可靠多了。 不同的系统需要采用不同的方法去除多级时钟,并没有固定的模式。: O# Z1 H6 `+ o  Q* S
 

http://www.pld.com.cn/advance/clock/clock22.jpg

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

(这个电路逻辑上等效于图7,但却可靠的多)

+ a/ Y/ ~( v* U) \5 d7 Q( x3 G7 \
 * b  t0 y' z+ {8 [
4.行波时钟/ |: c/ u; b  \( Z8 E

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

http://www.pld.com.cn/advance/clock/clock23.jpg

图9 行波时钟

0 u, h+ u7 m1 }8 n$ Z1 h
 

http://www.pld.com.cn/advance/clock/clock24.jpg

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

* U1 Q2 k4 w  b; c
5. 多时钟系统
; t0 G" R6 }& N% l8 m; U& h) @  n4 ~3 o5 P
许多系统要求在同一个PLD内采用多时钟。最常见的例子是两个异步微处理器器之间的接口,或微处理器和异步通信通道的接口。由于两个时钟信号之间要求一定的建立和保持时间,所以,上述应用引进了附加的定时约束条件。它们也会要求将某些异步信号同步化。
, s# }6 ^( e; E  I% z6 S" O6 Y
5 h6 S- |) F( Z* d: }$ k4 O. O图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的建立时间。然而,这个方法使输出延时了一个时钟周期。

http://www.pld.com.cn/advance/clock/clock25.jpg

图ll 多时钟系统7 x: \* |! T8 U
(定时波形示出CLK_A的上升沿相对于CLK_B的上升沿有建立时间和保持时间的约束条件)

( b) [& O) H, x# C& d, y2 x
 

http://www.pld.com.cn/advance/clock/clock26.jpg

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


, x0 F9 I6 F- g; {; b ' Z1 |7 e0 i. `
在许多应用中只将异步信号同步化还是不够的,当系统中有两个或两个以上非同源时钟的时候,数据的建立和保持时间很难得到保证,我们将面临复杂的时间问题。最好的方法是将所有非同源时钟同步化。使用PLD内部的锁项环(PLL或DLL)是一个效果很好的方法,但不是所有PLD都带有PLL、DLL,而且带有PLL功能的芯片大多价格昂贵,所以除非有特殊要求,一般场合可以不使用带PLL的PLD。 这时我们需要使用带使能端的D触发器,并引入一个高频时钟。

 http://www.pld.com.cn/advance/clock/clock31.jpg

图13 不同源时钟

$ c2 \/ E* Z0 |) _! ^
如图13所示,系统有两个不同源时钟,一个为3MHz,一个为5MHz,不同的触发器使用不同的时钟。为了系统稳定,我们引入一个20MHz时钟,将3M和5M时钟同步化,如图15所示。 20M的高频时钟将作为系统时钟,输入到所有触发器的的时钟端。3M_EN 和5M_EN将控制所有触发器的使能端。即原来接3M时钟的触发器,接20M时钟,同时3M_EN 将控制该触发器使能 ,原接5M时钟的触发器,也接20M时钟,同时5M_EN 将控制该触发器使能。 这样我们就可以将任何非同源时钟同步化。

" P( A$ z  l. n2 @2 |3 ?
http://www.pld.com.cn/advance/clock/clock32.jpg

图13 同步化任意非同源时钟

(一个DFF和后面非门,与门构成时钟上升沿检测电路)

/ |- v: }# R' D; i3 C) x

另外,异步信号输入总是无法满足数据的建立保持时间,容易使系统进入亚稳态,所以也建议设计者把所有异步输入都先经过双触发器进行同步化,详情可参阅这篇文章:Are Your PLD Metastable?


' f# j5 a" [( @' ^ 1 y0 Q/ H& T. P0 Q- v
小结:稳定可靠的时钟是系统稳定可靠的重要条件,我们不能够将任何可能含有毛刺的输出作为时钟信号,并且尽可能只使用一个全局时钟,对多时钟系统要注意同步异步信号和非同源时钟。
回复

使用道具 举报

发表于 2010-6-3 16:13 | 显示全部楼层
顶!!!!
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-4-17 17:55 , Processed in 0.038973 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表