EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Zedd 于 2018-10-10 10:54 编辑 1 Z% J! |6 M9 C$ d( R6 l
/ M6 ~$ F# I7 d0 i5 k# ?" P
IC芯片设计经验如何处理跨时钟域
|* S' ]& a9 N0 w3 {( _ 如何处理跨时钟域4 U! Z5 Z1 U3 U* R C
1 Y7 k3 x5 {. h, M& Q! k 上一节讲了系统中如果出现跨时钟域的数据信号交互如果不进行同步处理可能会出现一系列不可期的问题,那么如果要处理该如何处理呢。8 B$ ^ H ?) ^& F# f" w
. Y, I8 _" D# R" B+ K% [/ H; l( y 1) 控制信号的处理,事实上控制信号处理也分很多种,如慢时钟域的信号如何同步到快时钟域的,快时钟域的如何同步到慢时钟域的。 & y% y& d7 N( ~6 F d7 o
6 S1 L- S, H0 P 1.1)电平信号的同步
8 b3 j) D# B8 B5 h) s2 Z/ V# \
% `0 h$ w1 x% l* @
上图示意了慢时钟域的信号采用两级dff同步到快时钟域,此时要求cdc_s信号stable要维持足够长的时间,如上图右侧的公式,否则仍然可能出现不能正确同步的情况。这种电路一般用于同步电平信号或者pusle很宽的信号。使用限制:保险起见,输入信号的脉冲宽度至少是同步器同步时钟的2倍
) c; P1 U* h( a0 Z# B( I7 e2 A- x8 Q4 S- b8 J
1.2)边沿检测电路及其同步
0 F/ \% _. U& X0 v
4 ^& k/ h8 T4 r+ ~5 y, C 如上图,是在1.1的基础上实现的边沿检测电路(上升沿检测电路,大家可以想象一下下降沿检测电路该如何实现,右上角的A&(~B)改成(~A)&B,如果将这两种都合并呢,其实就是抑或逻辑。),当它检测到clk1的时钟域有个上升沿的时候,会在clk2的时钟域产生一个pulse。这种电路在应用于控制信号中非常常见。使用限制:保险起见,输入信号的脉冲宽度至少是同步器同步时钟的2倍。如果不满足条件,则只能使用下面提到的脉冲检测电路。
% h& k( v/ m- ~: ~: z% V; X% N, d r6 w! P
下图是边沿检测电路,其实就是右上角的电路换成异或逻辑,下面提到的脉冲检测电路会利用这个电路的特性实现。
0 N5 n/ e6 G) b5 O' _0 K8 q: D& M7 w/ k7 r; u3 T& g
1 r1 m G* n/ t. |0 c
1.2)脉冲检测电路及其同步 ) }) N, s* n& M1 V u. _
1 V8 e6 f* g( c
如上图是脉冲检测电路,可以将快时钟域的脉冲同步到慢时钟域中,这种电路有个使用注意点,就是快时钟域的脉冲之间要保留一定的时间间隔,否则第二个脉冲会检测不到,同步后的脉冲变成了一个,保险起见脉冲之间的间隔至少保留2个同步器同步时钟。那么有人会问如果真正的电路会出现间隔很小的脉冲那该如何进行同步处理。我提供的第一种方法是故意将彼此之间的间隔拉开,另一种方法就是采用下面提到的异步fifo处理了。提示:右上角的电路其实就是data^Q(异或)。
( F) p4 x \! h) z6 C* H( F5 f4 @: l* E* R* b- w1 X+ V: {
使用注意事项:
@, Y b v) z2 P8 N3 {5 A: ?- ?' Z2 q+ d! ^! R o, s
- _/ c1 `9 L/ T& u3 U! `3 v8 o) }1 A# U& f, H& @ Q4 M) i8 d& G
|