|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Taio 于 2019-3-25 18:09 编辑 9 A ?, r$ A' v+ w; W+ h
& |+ V9 e4 `5 A% h3 j9 Q2 W
简谈异步电路中的时钟同步处理方法
: Y4 y# o2 k5 ?3 K3 f 今天我们来聊一聊异步电路中的时钟同步处理方法。( K) j" f! D0 G$ o
1 w/ G- \% R+ s+ `1 O9 ^3 y
既然说到了时钟的同步处理,那么什么是时钟的同步处理?那首先我们就来了解一下。
7 N: e6 O/ ~! k* e/ c. A1 Q% O6 h- `* W0 Y2 W7 x& ]( o) X# M
时钟是数字电路中所有信号的参考,没有时钟或者时钟信号处理不得当,都会影响系统的性能甚至功能,所以在一般情况下,我们在同一个设计中使用同一个时钟源,当系统中有多个时钟时,需要根据不同情况选择不同的处理方法,将所有的时钟进行同步处理,下面分几种情况介绍时钟的同步处理方法。* ]7 T8 z$ J j' y* G6 ^
8 g. X* [) b! i! v$ P" `, b5 t******************************************************************************************************************************************************- @* C2 [% H; Y9 Q8 M9 @
一、当有多个时钟在同一个数字电路中,且有一个时钟(假设为SysClk)的速率大于其它时钟两倍以上& G" `, p. }) b( @, Q! ]' V; B
! D1 i6 J5 E6 Q. O" T 这种情况最为简单,我们在接口部分就必须要对其他时钟进行同步化处理,将其处理为与SysClk同步的时钟信号。这样处理的好处是:
) V$ G1 f: R3 l8 m, V* }! j 1. 便于处理电路内部时序;
% ~5 v* @1 J, b9 P" J 2. 时钟间边界条件只在接口部分电路进行处理。: S( d3 |" d6 ^ T. W
一般的时钟同步化方法如下图所示。
' C8 ^ ]+ G: ^ o o- J
# F/ q" A5 c; T: q; s1 g
实质上,时钟采样的同步处理方法就是上升沿提取电路,经过上升沿提取输出信息中,带有了系统时钟的信息,所以有利于保障电路的可靠性和可移植性。) B" n/ B( Z- U8 C0 N
1 s9 z1 F1 B! Z3 x! {, F
******************************************************************************************************************************************************, L3 R6 e& Q3 ~
二、当系统中所有时钟没有一个时钟速率达到其他时钟频率的两倍的情况,也就是系统中多个时钟速率差不多的情况' m* a6 o E; }1 E. g
$ U( d- F3 q$ h4 r 这个时候无法满足采样定理,所以在接口部分就必须对其他时钟和数据通过FIFO进行隔离,并将其他时钟信息转换为和系统时钟同步的允许信号。比如在高速的数据采集系统当中,AD的采集时钟往往比较高,大于系统时钟的一半以上,这时候采用同步化处理无法满足时序设计。 X2 T) O6 ^1 N* Y
8 f* ~2 E. H3 n
******************************************************************************************************************************************************
0 f* O# b8 w, s3 b, ] @8 e 三、系统中多个时钟之间存在数据互相采样
9 h! u; C* }; t0 @
! J# O% i9 y% G* L8 ?; r 如下图所示的情况。clk1和clk2来自不同的时钟源,该电路即可能出现在同一芯片里,也可能出现在不同的芯片里,但是都存在同样的危险性。由于时钟源不同,对于寄存器reg2和reg3来说,在同一时刻,极有可能一个认为reg1输出为“1”,另一个认为是“0”,必然导致电路结果的错误。
/ D4 N J$ b9 |
% i$ F3 `, |- R. n3 x1 J
对于这种电路,我们必须在reg1之后再添加一个触发器,用clk2的时钟沿进行采样,然后用该触发器的输出经过组合逻辑输出到reg2和reg3当中,如下图所示。
$ s' O: Z, t/ P' q; x
, N/ M# ^% K; @$ z
1 N( k4 D( {( u. q
******************************************************************************************************************************************************9 J: B3 ~7 }* r0 n+ C# C& M9 ~
四、多级时钟或多级时钟网络处理5 C) B8 {" W; G1 m/ o- ^
( ^; C" b* {. y# i A0 ] 由于时钟建立-保持时间的限制,FPGA设计中应尽量避免采用多时钟网络,或者尽量减少时钟的个数,所以在FPGA对ASIC芯片进行验证的时候,我们必须要将时钟网络进行简化,因为FPGA内部时钟资源不像ASIC一样具有很强的穿透性和灵活性。下图为一个含有危险的多级时钟的例子,多路选择器的输入是clk和clk的2分频,时钟由SEL引脚控制的多路选择器输出,在这两个时钟均为逻辑“1”时,当SEL的状态改变时,存在静态冒险竞争现象。 |$ Q, a4 Y$ a$ ^ d
S7 f% G% s( `8 l/ w$ _/ ^ 所以为了确保电路的正常工作,需要进行修改,修改之后的电路如下图所示。
5 C( K) E P. \
" k+ Y9 h8 M2 j. K/ O* J0 ` |
|