数字IC设计——跨时钟域同步

跨时钟域同步的核心是要解决不同时钟域之间所产生的亚稳态问题。

跨时钟域同步分为多bit同步和单bit同步。

1、多bit跨时钟域同步

对于多bit数据的跨时钟域同步通常有两种方法:二进制计数值格雷码打两拍法和异步FIFO法。

       具体来说,对于格雷码打两拍法而言,首先需要同步的信号是一个二进制计数值,将此值在时钟域A转换为格雷码,再将此格雷码在时钟域B打两拍完成同步,此法主要是由于如果直接将二进制数打两拍至下一时钟域时,由于二进制计数的下一个值会出现多个位同时改变产生毛刺引发亚稳态问题,而格雷码计数只有一位改变,不会产生亚稳态问题。其框图如下:

数字IC设计——跨时钟域同步_第1张图片

图1  二进制计数器的格雷码跨时钟域多bit同步

       二进制计数器格雷码跨时钟域同步只针对二进制计数器而言,用于特定的场合,如异步FIFO的设计中。较一般的情况,对于多bit的跨时钟域同步通常使用异步FIFO来完成,异步FIFO跨时钟域同步是一种比较行之有效的处理方式,此处不再细说。

2、单bit跨时钟域同步

按照信号的用途将单bit跨时钟域同步器分为:电平同步器、边沿检测器和脉冲同步器。

  • 电平同步器

所谓电平同步器,顾名思义是将有用的电平信号同步至另一时钟域,电平信号需要在原时钟域保持至少两个时钟周期。其同步方法是将信号经过两个D触发器,即打两拍。其Verilog代码如下:

数字IC设计——跨时钟域同步_第2张图片

  • 边沿检测器

边沿检测器的原理是在电平同步器的输出加一个触发器(由于第一级触发器可能存在亚稳态现象),利用二三级触发器结果判断信号是上升沿还是下降沿。其Verilog代码如下:

数字IC设计——跨时钟域同步_第3张图片

  • 脉冲同步器

脉冲同步器的作用是检测原时钟域的脉冲并在新时钟域产生一个新的脉冲。简单的脉冲同步器设计步骤为:

将脉冲信号在原时钟域转换为电平信号;

将电平信号通过打两拍同步至另一时钟域;

在新的时钟域中进行边沿检测,产生新的脉冲信号。

数字IC设计——跨时钟域同步_第4张图片

以上是较为简单的脉冲同步器,此脉冲同步器对于某些情况下是不可靠的,若要可靠的完成脉冲的同步,可以引入握手机制。具体的握手机制如下:

若源时钟域脉冲来临,且同步器处于空闲状态,则向同步器发出同步请求;

同步请求信号到达目的时钟域,目的时钟域产生应该信号表示同步完成;

源时钟域检测到应答信号后清楚请求信号;

目标时钟域检测到源时钟域请求信号清除后清除应答信号;

同步器回到空闲状态,进行下一个脉冲的同步;

Verilog如下:

数字IC设计——跨时钟域同步_第5张图片

数字IC设计——跨时钟域同步_第6张图片

数字IC设计——跨时钟域同步_第7张图片

你可能感兴趣的:(数字IC)