|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
(信息来源:EETOP BBS 作者:sun_ic)
c+ ~4 p% p# @& l4 f4 u6 e& D! M" ?# ?1 p* l$ ^ j
同步设计,异步设计,以及metastability8 H- H4 p8 O4 }6 C; O; e
; }9 U- _% J) ]% Z, A
数字电路设计一般是采用同步设计技术。除非在某些特殊的局部场合,有人用时钟延时的补偿达到更高的处理速度。但在大多数情况下,应该遵循同步设计的理念。所谓同步设计指的是对于所设计的一个电路而言,所有logic在一个时钟的domain。这点很重要,因为大量复杂的logic不能靠人工或者工具一点点的验证。靠得是遵循一些统一的timing约束。而这样的约束在同一个时钟domain内描述出来比较容易。所以如果在一个设计中最好用一个统一的时钟。如果有不同的电路运行在不同的时钟速率怎么办?一般有以下几个办法* ^, |: M! y, Z, J d" |3 U
, p3 M' t: W* M( ?4 T
1)采用通用的时钟,对需要不同时钟速率的电路使用同步使能控制。比如memory的处理,MCU的bus,等等
; e0 B$ y6 N, F4 S! H9 y5 p
* f! ^8 |% v# ^9 X5 z6 i2)对于同源的不同速率的数据间的转换,尤其是对于同速率不同相位的,采用FIFO来处理。这在采用总线背板的多插件系统中,同步不同linecard来的数据中很是普遍。比如光通信系统的设计,SDH/SONET的phase alignment/pointer processing经常用这种方式。6 i9 b* s3 L- I t% t
3 Z- e+ P, I o k* f; c! X0 R
有时有些简单的电路也可以采用逻辑电路实现,但要十分小心setup时间的保证。一般初学者最容易采用这种方式。但建议在变成中高手后再使用 1 S! J! ^" E- ]% i
; L3 g/ U- l2 t5 w$ s3)对于不同源,或者速率不同的数据之间的转换,实现起来比较复杂。这需要采用异步FIFO来做。在下认为异步FIFO的设计,与用RAM的lookup table设计,DRAM做大量独立的buffer/FIFO的设计等一起,构成了数字logic设计的高级境界。
# n9 F. a% x* l4 |" t
% I3 L0 b: n3 M* }, B/ j& \% k+ G在不同时钟domain间的数据转换,主要考虑的是metastability。假设有两个不同源的时钟A和B,时钟B取样产生于时钟A的数据。总有可能会取样在数据的变化沿,这就可能产生取样结果的不确定性。解决这一问题的方式有几个(也可能有别的方法,请有经验的DX分享一下)3 C+ `- W$ B/ b
: [) v3 F$ Z [' Ji)如果被取样的数据是一个bit,可采用如下的double clock的方式去除metastability
% S D* n+ x$ t![]()
0 ]3 `! V4 L) f- p3 t/ F/ R2 n3 F
& i' U( }( g( w4 ]/ y1 r. Nii) 如果被取样的数据多于一个bit,以上所述的方式不能完全消除metastability。因为如果有两个bit同时在switching时被另一个domain的时钟取样,即使double clock也有一个时钟的不确定性的可能。这时异步FIFO是最好的选择。. H/ A, ?) }6 g! H) C! b0 m3 c
! O* u9 A: L: F( c$ F
在异步FIFO设计中需要对read和write的地址进行比较,以产生Full和empty的指示。一个可能的方法是采用GRAY编码的方式解决。这种编码的特点是每个时钟周期只有一个bit发生变化。这时再采用double clock技术就不会产生metastability了。5 u! q6 h2 C1 u5 f* P) m' g6 C' o
注意GRAY编码其实是在时钟domain变换中的一个接口。数据转变到新的domain中后还要转换为正常的binary。0 o1 V d ?; p6 Q
一个4-bit GRAY编码的例子: 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000) ^8 F7 b% T' V+ j) `8 O2 G# M
4 V4 A/ e9 U5 |% m; C/ u, n6 y
所以利用double clock和GRAY编码的方法先设计AFIFO,然后就可在不同timing domain之间转换任意宽度的数据。
" Q4 s7 |5 j- {: t8 h' k |
|