文章目录
Metastability
Metastable bdat1
output propagating invalid data throughout the design.
Synchronizers
两种同步情景
第一种:信号穿过时钟边界时允许有部分信号被漏采。举例,使用在异步fifo中的gray码计数器。
第二种:所有穿过时钟边界的信号都需要被全采样
两级同步器
最简单,最常用的同步器
MTBF - - mean time before failure
MTBF,顾名思义表示故障前的平均时间,这个值越大越好
三级同步器
对于一些高速设计,两级同步器的MTBF太小,不满足设计要求,因此需要使用三级同步器增加MTBF的大小。
同步来自发送时钟域的信号
灵魂提问:为什么要信号传递到接收时钟域之前,寄存器输出来自发送时钟域的信号?
对于同步设计,寄存器输出是为了留有时序裕量,方便后续优化设计。
对于CDC,寄存器输出是为了减少数据在跨时钟域时的数据变化,也就是上上图的Dara changing frequency
,提高MTBF,避免亚稳态。
未经过寄存器输出的信号,因为组合电路的特点,跨越时钟边界时数据变化很快,Dara changing frequency
增加,MTBF
减小,产生亚稳态的可能性增加。
将信号同步到接收时钟域
如下图所示,经过寄存器输出的信号,减少了Dara changing frequency
,有效增加MTBF
。
同步快信号到慢时钟域
与同步器相关的一个问题,面对慢时钟对快信号的采样,快信号有可能在采样前快速变化两次,这就需要考虑漏采的值对设计是否有影响。
对于不允许漏采样的情况而言,有两种办法
(1)开环解决方案,确保在没有ack的情况下捕获信号。
(2)一种闭环解决方案,需要收到跨越CDC边界的信号的ack。
信号域之间可靠信号传输的要求
如果快时钟域是慢时钟域的频率的1.5倍(或更多),则将慢控制信号同步到快时钟域中通常不是问题,因为快时钟信号将对慢CDC信号采样一次或多次。
认识到将慢信号采样到快时钟域中比将快信号采样到慢时钟域中引起的潜在问题更少,设计者可以通过使用简单的两个触发器同步器在时钟域之间传递单个CDC信号来利用这一特点。
“三边”要求
当通过两级同步器在时钟域之间传递一个CDC信号时,CDC信号必须宽于接收域时钟周期周期宽度的1-1/2倍。即输入数据值必须在三个目标时钟边沿保持稳定。
问题1:窄脉冲跨时钟域
窄脉冲跨时钟域可能被漏采;
问题2:采样宽CDC脉冲-但时间不够长!
目的时钟域的第一个时钟上升沿产生了亚稳态,如果脉冲足够长,那么在第二个时钟沿处就会被正确采样。但脉冲不过长,则导致采用失败。
开环解决办法-使用同步器采样信号
在超过所述采样时钟的周期时间的时间段内断言CDC信号。
优点:开环解决方案是跨越CDC边界传递信号的最快方式,其不需要对所接收的信号进行确认。
闭环解决方案-使用同步器采样信号
第二个解决问题的办法就是发送回一个使能控制信号。
优点:安全,稳定。
缺点:延时较大。
多比特数据跨时钟域
当遇到多比特数据跨时钟是,简单的同步器就不好处理了,因为不能保证每个bit位上的数据是同时被采样还是没被采样。就好像a[1:0]=01,下一个时钟a[1:0]=10。对于目的时钟域,a[0]在第一个沿可能采样到了,也可能在第二个时钟沿采样了。a[1]同理。所以在跨时钟域时,a[1:0]的值就有可能出现:01,10,11,00。简言之,就是各bit位上的不对齐导致数据出错。
多比特CDC策略
为了避免多位CDC偏斜采样场景,将多位CDC策略分为三大类:
1.多比特信号合并
2.多周期路径公式
3.使用格雷码