EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Zedd 于 2018-10-10 10:47 编辑 ( y7 k. u; y7 n& m3 ~6 y2 C
2 d5 R; U% ^6 Z/ f' `3 V _' X
IC芯片设计跨时钟域
5 z) e# i# K* h( I$ j! ? 芯片设计中最重要的就是时钟处理,如何处理好时钟的关系成为一款芯片成功的关键。通常来讲将时钟分为同步时钟和异步时钟两大类。
8 B; Q0 K* k) L# r, q同步时钟:时钟之间有固定的相位关系。" q# k7 p2 h2 F3 e
$ L' z5 M# r( w8 a! k& s
: @' N: s7 X0 [9 R- e2 ]
异步时钟:同频不同相,两个时钟的频率是相同的,但是它们之间的相位是不同的;不同频率,两个时钟源不同。
# k# m% U: m! R( {8 `$ ]3 ~1 M9 _7 L8 ]
. u! D& p: h/ V
/ W& I4 h/ A# c# f+ o2 f
5 }5 m" n$ C2 l, t 为什么要处理跨时钟域4 o% U& U- ]/ d W9 ^; ?
' R% e/ B. r" X6 M, V' V& j7 Q A时钟域的数据传输到B时钟域,被B时钟域的触发器采样到,表面看起来好像没什么问题,整个传输的过程看起来很Happy的样子。可是如果我们时钟无限放大,传输的信号无限放大,自然而然你就会有疑问,会不会传输信号的跳变沿碰到了采样时钟的跳变沿?如果碰到了会出现什么问题,是采样到了0,还是采样到了1?很好,这个问题其实就引出了触发器的setup(建立)时间和hold(保持)时间。
, n: J0 W l6 R3 \; K! s
/ f$ G1 Y) R8 A0 C% m$ {
H! O7 J0 Q" Y- f6 U0 ^- x' z& j+ w A时钟域的信号传输到B时钟域,无法保证B时钟域触发器的setup time和hold time,这个时候就会出现metastability,也就是所谓的亚稳态,这个亚稳态是芯片设计中最忌讳的东西,它会传播到下一级,甚至引起电路的震荡,危害非常之大。最要命的是亚稳态问题进行仿真的过程中是无法发现的,很多时候是上了 FPGA或者芯片回来以后才发现,但是这个时候多半已经晚了。 ) `6 G+ ~& P- L+ u0 ?0 @3 T) L3 X: R
, Y, Y" R/ D5 J) K3 r x# H6 W1 _# K
8 O7 ]9 r9 t( [- A1 y
如上图所示,S是异步输入源,在clk上升沿采样的时候,s也发生了跳变,这个时候问题就出现了,q的输出是0还是1,q可能采样到中间值,所以可能随机成0或者1,功能正确不能保证,电路也会偶尔正确,偶尔错误。
c# }3 N0 A0 u- W+ R- U9 d7 n- W7 N- M- @ j/ y& S/ r1 C; e T
: r# s! m9 E, [ q3 e
上公式给出了亚稳态出现的频率,可以看出它和采样频率,异步数据源的跳变频率,触发器的setup/hold time的window有关。 ' m: Z; F/ d! S
' G# v) a- T8 q' C q2 f }. [
! \7 ^: R# L* {! `
上图示意了当亚稳态发生时真实的电路工作情况和平时的仿真情况,从上图看出,平时仿真和真正硬件工作时的数据可能差一个周期。但是,这些情况是不可预期的,不可预期的东西在芯片上会带来很大的麻烦,譬如芯片正常工作的时候突然挂掉了,你甚至都不知道该怎么debug。 - R2 b9 i* r3 ^7 n3 r; a+ `$ o! R
- ~9 i! |: j n9 _
一种模拟亚稳态仿真的方法就是故意随机的插入1T的延时,如下图所示,数据经过同步后再经过随机的mux进行选择,这样可以使仿真更接近实际的工作情况。 6 D; q c5 w$ ]) r# s
" Q: ~6 I- M) K" g3 D5 q {; o
* g! ~5 {" U9 V) ]( H4 S( T, r/ A
! `$ Y& k% s! y0 }0 w, J
|