跨时钟域同步问题(四)
跨时钟域同步问题(四)
多bit信号跨时钟域问题
首先,绝大多数情况下,我们不能通过2flop synchronizer来同步多bit信号。这里的多比特信号是值非各自独立的信号,只有组合在一起才有意义。
不能用2flop sychronizer的原因:

这是因为该方法中bdata的delay具有随机性,而在同一时刻下的多位bit信号可能无法匹配。
因此提出一种适用于多比特传输的跨时钟域处理方法:
方案一:引入判断aclk中data_in保持稳定的pulse脉冲信号load_aclk,通过脉冲同步器处理引入bclk中作为使能信号,则在此状态下不会采到边沿信号。
同时还需要有三个判断条件需要主义:1.对于源信号data_aclk,在load_aclk信号取到1以后需要进行保持 2.在bclk完成同步之后data_aclk才能准备更新,即需要在同步完成后将bclk域内的同步信号脉冲反馈会aclk,作为ready信号,提示可以进行信号更新 3.在bclk之后的后级模块使用完data之后,aclk_data才能开始更新,即valid_aclk
该方法仍具有局限性,其适用于以下情况:
- 无法化简为单bit信号跨时钟域传递
- 适用于非高速传输的场合,即在source时钟域的多bit信号可以保持稳定一段时间,而不是时刻都在变化,可以有一个明确的load窗口
- load信号为高时需要保证多bit信号稳定不变
- 如果没有连续同步数据的要求,可以适当使用不带反馈的
方案二:
对于别人设计过的,多bit但没有load信号的情况,可以用三级flop值连续相等作为一个update信号,来update三级flop中最后一级flop的输出。
和第一种方法一样,这两种方法的局限性都在于适用于提前已知adata变化频率低的特点。否则会错过data。第二种方案消耗的面积也会更大。
方法三:
格雷码编码
方案四:
异步FIFO

浙公网安备 33010602011771号