EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Zedd 于 2018-10-10 10:47 编辑
2 @' @! w8 H! r, N& Y6 {: y# j e3 ~! W( A
IC芯片设计跨时钟域 : o, u: h @& r9 X$ ` E
芯片设计中最重要的就是时钟处理,如何处理好时钟的关系成为一款芯片成功的关键。通常来讲将时钟分为同步时钟和异步时钟两大类。 1 v. p r' Z9 F h% l
同步时钟:时钟之间有固定的相位关系。
K7 t# M* ^9 d3 j: M ?/ v& F) U5 |8 i
`& T7 T; u# S' [ K 异步时钟:同频不同相,两个时钟的频率是相同的,但是它们之间的相位是不同的;不同频率,两个时钟源不同。2 Z6 i) e# _: a7 G9 Z$ M
3 [+ O! ^' o5 M' o' Q d3 p
' R: K0 F0 ~; b' j8 h" y% D- ]2 G3 H- r0 m* H6 g
: `7 @/ R. j+ m* Z$ Z 为什么要处理跨时钟域
, X; u% `5 ] o% c/ C
0 V( }7 I! a: u: ^. Z5 j/ C C A时钟域的数据传输到B时钟域,被B时钟域的触发器采样到,表面看起来好像没什么问题,整个传输的过程看起来很Happy的样子。可是如果我们时钟无限放大,传输的信号无限放大,自然而然你就会有疑问,会不会传输信号的跳变沿碰到了采样时钟的跳变沿?如果碰到了会出现什么问题,是采样到了0,还是采样到了1?很好,这个问题其实就引出了触发器的setup(建立)时间和hold(保持)时间。
: ]0 q( Q- u( |; }
6 ]7 K2 _) Y2 u
& p Y% q$ W4 t8 Z0 k* I
A时钟域的信号传输到B时钟域,无法保证B时钟域触发器的setup time和hold time,这个时候就会出现metastability,也就是所谓的亚稳态,这个亚稳态是芯片设计中最忌讳的东西,它会传播到下一级,甚至引起电路的震荡,危害非常之大。最要命的是亚稳态问题进行仿真的过程中是无法发现的,很多时候是上了 FPGA或者芯片回来以后才发现,但是这个时候多半已经晚了。 7 \& W( T# o4 k% D' A
# l: P+ p" g2 V2 n7 ^& \+ J' M4 e
/ x3 A# @ w- j
如上图所示,S是异步输入源,在clk上升沿采样的时候,s也发生了跳变,这个时候问题就出现了,q的输出是0还是1,q可能采样到中间值,所以可能随机成0或者1,功能正确不能保证,电路也会偶尔正确,偶尔错误。 $ F0 Q+ R `/ M1 p3 {5 ?
3 V! z' y* s' q- Z5 q# q. I
; o( J6 ~& p# `: H8 C( K9 M
上公式给出了亚稳态出现的频率,可以看出它和采样频率,异步数据源的跳变频率,触发器的setup/hold time的window有关。 ! J! A9 s6 C& I$ B" Q: N! \
9 ?4 Q# w( t0 E. V, D8 }8 g
$ Z: k, `+ \: K 上图示意了当亚稳态发生时真实的电路工作情况和平时的仿真情况,从上图看出,平时仿真和真正硬件工作时的数据可能差一个周期。但是,这些情况是不可预期的,不可预期的东西在芯片上会带来很大的麻烦,譬如芯片正常工作的时候突然挂掉了,你甚至都不知道该怎么debug。
0 W$ k& ^* f: l& |3 u$ t
$ I: y2 T7 c& F- N6 b 一种模拟亚稳态仿真的方法就是故意随机的插入1T的延时,如下图所示,数据经过同步后再经过随机的mux进行选择,这样可以使仿真更接近实际的工作情况。 ' z! p2 ~% C2 o6 l; m
8 b- e& ~3 v7 }1 `( U; I
8 q, H& N3 e/ G T% \
9 T9 y. T! o9 f# ?( s |