处理跨时钟域的数据有单bit和多bit之分,而打两拍的方式常见于处理单bit数据的跨时钟域问题。打两拍本质就是定义两级寄存器对数据进行延拍。流程如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/c26f47af9056d3ecc71c077118eb731d.png)
两级寄存器的原理:
两级寄存是一级寄存的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性减少其发生概率。总的来讲,就是一级概率很大,三级改善不大。
信号同步的要求:
为了使同步工作能正常进行,从某个时钟域传来的信号应先通过原时钟域上的一个触发器,然后不经过两个时钟域间的任何组合逻辑直接进入同步器的第一个触发器中。这一要求非常重要,因为同步器的第一级触发器对组合逻辑所产生的毛刺非常敏感。如果一个足够长的毛刺正好满足建立-保持时间的要求则同步器的第一级触发器会将其放行,给新时钟域的后续逻辑送出一个虚假的信号。
常用的同步器:
同步器的类型基本上有三种:电平、边沿检测和脉冲。
A:电平同步器
在电平同步器中,跨时钟域的信号在新时钟域中要保持高电平或低电平两个时钟周期以上,同步之后的信号是电平的形式。
代码:
![](https://i-blog.csdnimg.cn/blog_migrate/2e1aed39de059d0336a6a97bb7547ecc.png)
B:
边沿检测(edge detecting)同步器
![](https://i-blog.csdnimg.cn/blog_migrate/de969b6a8e62a54a5b7da325ade03425.png)
C:脉冲同步器
脉冲同步器的作用是检测原时钟域的脉冲并在新时钟域产生一个新的脉冲。简单的脉冲同步器设计步骤为:
1,将脉冲信号在原时钟域转换为电平信号;
2,将电平信号通过打两拍同步至另一时钟域;
3,在新的时钟域中进行边沿检测,产生新的脉冲信号;
![](https://i-blog.csdnimg.cn/blog_migrate/cc5cfc9374b94de9539e2ce2e0a1bb99.png)