EDA365电子工程师网
标题:
电路设计漫谈之 - 同步/异步设计及metastability
[打印本页]
作者:
admin
时间:
2019-9-27 15:10
标题:
电路设计漫谈之 - 同步/异步设计及metastability
(信息来源:EETOP BBS 作者:sun_ic)
; [4 ^% ?4 G4 w3 f
6 y+ q, A; f5 S. A, e/ h
同步设计,异步设计,以及metastability
; ^* `) e( G2 @# r s8 ]- H
) n9 b2 X/ o: X( T! l3 i( y
数字电路设计一般是采用同步设计技术。除非在某些特殊的局部场合,有人用时钟延时的补偿达到更高的处理速度。但在大多数情况下,应该遵循同步设计的理念。所谓同步设计指的是对于所设计的一个电路而言,所有logic在一个时钟的domain。这点很重要,因为大量复杂的logic不能靠人工或者工具一点点的验证。靠得是遵循一些统一的timing约束。而这样的约束在同一个时钟domain内描述出来比较容易。所以如果在一个设计中最好用一个统一的时钟。如果有不同的电路运行在不同的时钟速率怎么办?一般有以下几个办法
, y p2 D: k4 `. {: y$ W
4 l$ ?0 ^. v+ G9 d s0 _! T! e
1)采用通用的时钟,对需要不同时钟速率的电路使用同步使能控制。比如memory的处理,MCU的bus,等等
) ]" h# K4 E/ q, N' i
8 k! \& s: S9 ~9 {: M& t6 d' y. K
2)对于同源的不同速率的数据间的转换,尤其是对于同速率不同相位的,采用FIFO来处理。这在采用总线背板的多插件系统中,同步不同linecard来的数据中很是普遍。比如光通信系统的设计,SDH/SONET的phase alignment/pointer processing经常用这种方式。
, ?6 S7 W4 U: N* o- j; r" `& h
9 f) l5 I/ `9 o3 ~
有时有些简单的电路也可以采用逻辑电路实现,但要十分小心setup时间的保证。一般初学者最容易采用这种方式。但建议在变成中高手后再使用
* Y3 [ k* v" `" S" \0 Z
- D- q0 S7 ]) b* V& W
3)对于不同源,或者速率不同的数据之间的转换,实现起来比较复杂。这需要采用异步FIFO来做。在下认为异步FIFO的设计,与用RAM的lookup table设计,DRAM做大量独立的buffer/FIFO的设计等一起,构成了数字logic设计的高级境界。
+ P9 ?" k3 q2 P+ `6 P
# n6 }, R, j2 S: y& J
在不同时钟domain间的数据转换,主要考虑的是metastability。假设有两个不同源的时钟A和B,时钟B取样产生于时钟A的数据。总有可能会取样在数据的变化沿,这就可能产生取样结果的不确定性。解决这一问题的方式有几个(也可能有别的方法,请有经验的DX分享一下)
4 p: ^5 {, }/ `- g1 v0 @+ A6 ^
+ P+ t$ l# Y' ~7 s% p* L2 j
i
)如果被取样的数据是一个bit,可采用如下的double clock的方式去除metastability
/ D. X' x) J' }8 k
5 G9 n0 F! u% s' H3 W, i
1 _ h8 h8 q I
ii) 如果被取样的数据多于一个bit,以上所述的方式不能完全消除metastability。因为如果有两个bit同时在switching时被另一个domain的时钟取样,即使double clock也有一个时钟的不确定性的可能。
这时异步FIFO是最好的选择。
- D9 i- |0 @8 l/ N3 c/ ]
, c% M/ t; t# q* J
在异步FIFO设计中需要对read和write的地址进行比较,以产生Full和empty的指示。一个可能的方法是采用GRAY编码的方式解决。这种编码的特点是每个时钟周期只有一个bit发生变化。这时再采用double clock技术就不会产生metastability了。
0 P& p. ~7 \- V( a9 N
注意GRAY编码其实是在时钟domain变换中的一个接口。数据转变到新的domain中后还要转换为正常的binary。
' z4 j9 D- Z4 F" H2 p9 r% r
一个4-bit GRAY编码的例子: 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
) g% w$ B# O8 z/ Y) J8 [: J
# g+ G$ ?1 M, r- Y9 w* _
所以利用double clock和GRAY编码的方法先设计AFIFO,然后就可在不同timing domain之间转换任意宽度的数据。
) {+ y# S' @3 M8 p4 n# f$ K8 h3 J
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2