热度 1|
时钟域A产生的信号,传输到时钟域B的触发器D端时,若不经过特殊处理,则触发器容易产生亚稳态。原因是无法保证A的信号跳变沿与触发器的时钟沿满足setup time和hold time要求。因为时钟与信号之间无法满足一定的相位关系。
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个不稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。这样的情况对于整个电路是很危险的,应尽量避免。
避免的方法要从亚稳态的另一特性说起,亚稳态是可以自动回复的,也就是说触发器在亚稳态发生一段时间后,自动恢复到0或1的状态。消除亚稳态的典型电路是两级的触发器,因为根据理论计算,信号经过两级触发器后,足以回复稳定。如下图,即使第1级触发器A_ff端发生亚稳态,传到A_sync端的概率也小于1%(注意并不是完全可以消除亚稳态传播),所以有电路为了更加可靠,会用三级触发器级联。
然而,这只是消除亚稳态的方法,并不等于解决了信号跨时钟域的问题。信号跨时钟域,可以分为两种:
慢时钟域到快时钟域(慢时钟周期至少是快时钟的两倍):
慢时钟域信号传输至快时钟域,不会存在信号丢失的情况,所以两级触发器同步即可。
快时钟域到慢时钟域(或者两个时钟频率接近):
快时钟域的信号可能在慢时钟一个周期内已经恢复到默认状态,所以只用两级触发器同步可能会丢失信号(因为两级同步的关系,即使频率接近,也是可能会丢失信号),这是信号跨时钟域的难点,解决办法由两种:
a 可以将快信号进行扩展,根据两个时钟关系,扩展出足够的周期数,以保证快时钟可以抓到。
b.握手机制,使用请求,应答的方法传递信号,信号在接收到应答后才恢复默认状态,保证信号的传递正确(别忘了应答信号回来时也需两级同步)。
彩蛋来了:两级触发器的处在综合时有什么问题呢?
首先因为信号与触发器时钟是异步关系,所以时序分析一定无法满足,所以要设置为false_path
为了尽可能减小亚稳态发生的几率,两级触发器必须位置非常接近,以减小线延时,中间更禁止有组合逻辑
所以公司中都会有标准的信号同步单元库供designer使用,目的就是为了可以在后端更方便的处理。
先写到这里,对于总线的跨时钟域处理,会在以后的文章中说明。