1. 2级同步的第二拍亚稳态出现概率非常小,但是也有可能出现,这一点对于从慢到快和从快到慢都是一样的;
如果认为第二拍亚稳态不会出现的话,从慢到快从功能上,一定可以采到正确的值;从快到慢从功能上,不一定
可以采到正确的值;
电路如下所示:
时序如下所示:
情况1和情况2都是假定q2不会出现亚稳态,情况3假定q2发生了概率极小的亚稳态事件。
对于从慢到快,情况1和情况2都采到了正确的值,功能正确;情况3时序说明2级同步失败;
对于从快到慢,情况1采到了正确的值,功能正确,情况2采到了错误的值,功能错误;情况3时序说明2级同步失败;
2.接下来说明q2出现亚稳态的概率极小的原因,从MTBF角度分析:首先MTBF(Mean Time Between Failures):触发器采样失败的时间间隔;
每一个触发器都有其规定的建立(setup)和保持(hold)时间参数, 在这个时间参数内, 输入信号在时钟的上升沿是不允许发生变的。 如果在信号的建立时间中对其进行采样, 得到的结果将是不可预知的,即亚稳态。
触发器进入亚稳态的时间可以用参数 MTBF(mean time between failures)来描述, MTBF即触发器采样失败的时间间隔,其公式描述如下:
通常,MTBF越大说明系统采样失败的可能越小。可见,对于高速的设计,MTBF是更容易发生的。对于一个典型的 0.25µm 工艺的 ASIC 库中的一个触发器,我们取如下的参数:
tr = 2.3ns, τ = 0.31ns, T0 = 9.6as, f=100MHZ, a = 10MHZ, MTBF = 2.01 days
也就是说触发器以100MHZ工作,假设异步事件触发的频率,也就是数据变化的频率10M。我们用100MHZ的频率去不停地采它的数据,则每两天第一级触发器就可能采集到一次亚稳态。
为了避免所述的亚稳态问题,就应当使参数 MTBF 尽可能的大,通常采用的方法 是双锁存器法,即在一个信号进入另一个时钟域之前,将该信号用两个锁存器连续锁存两次, 最后得到的采样结果就可以消除亚稳态问题。
也就是说,第二级触发器采样失败的间隔时间是9.57*10……9年。
3.从电路角度去看亚稳态这件事,可以得到如下分析:
触发器发生亚稳态后,Q端电平是增加还是减小去否取决于CLK采样D端是大于0.5VDD,还是小于
0.5VDD?最终将稳定到1或0? 当采到0.5VDD时,Q端电平将如何变化?
从定性的角度来看,CLK采样D端大于0.5VDD,最终将稳定到1,CLK采样D端小于0.5VDD,最终将稳定到0,但是实际上跟触发器本身阈值电压密切相关,
例如触发器阈值电压0.2VDD,那么CLK采样D端0.3VDD,最终触发器输出也有可能为1,因此只是一个定性的分析,无法说给出一个确定的亚稳态最终
将稳定到何值的预测;
采样到0.5VDD时,Q端电平和采样到非0.5VDD时一样,没有区别,0.5VDD并不是一个特例。
格雷码同步多bit信号有一个大的前提条件,即此多bit信号是连续递增或递减的,在此基础上分类讨论:
1.多bit信号时钟域相比module时钟域是慢时钟域,那么多bit信号虽然中间值有可能出现1bit错误,但是下一拍此值可以正确被同步,
因此多bit信号的每一个信号都是可以正确被同步的;
2.多bit信号时钟域相比module时钟域是快时钟域,那么除了多bit信号中间值有可能出现1bit错误外,多bit信号的值是被间隔着同步的,
无法做到每一个值都被正确同步;
如下图所示:
对应时序图解释:
因此使用格雷码计数器同步多bit信号这种CDC方式很受限,基本上只在异步FIFO中有用到;但是在具体设计中如果满足以上格雷码同步的前提,并知晓格雷码同步
后的结果,可以做出对应设计。例如一个module输入10bit信号sig,慢于module时钟域且sig是逐次递增的,想要将sig同步的module时钟域,那么可以用格雷码同步。
4. 多bit寄存器动态可配这件事如何去做?转化成格雷码,寄存器时钟域打一拍,然后同步取沿,用取到的沿
去寄存变化的寄存器值;这样的话,假定无论寄存器打出时钟是快还是慢,寄存器本身的变化是慢于使用寄存器
的module的时钟的,那么从快到慢和从慢到快都是可以这样去做;不能这样做,因为寄存器值的变化不是连续的!!
有什么别的方法吗?
用握手方式去做,即reg_wr脉冲同步到module时钟域,然后module时钟域的pulse有效时,将写数据寄存到module时钟域,在此期间,注意写数据是hold住不变的。
标签:采样,触发器,同步,引发,亚稳态,思考,bit,时钟 From: https://www.cnblogs.com/senyingpengpeng/p/18512672