异步时钟域处理的七种方法

文章目录

一、概要

二、技术方法

2.1. 单bit信号跨时钟域处理:

2.2. 多bit信号跨时钟域处理:

2.2.1 异步FIFO机制

2.2.2 硬件handshake机制

2.2.3 利用sync bit来锁存多bit数据

2.2.4 多bit同时锁存

2.2.5 格雷码机制

2.2.6 软件flow来避免异步问题

三、小结



一、概要

        当一个信号signal在clk1 domain产生,并传递到clk2 domain中时,且clk1和clk2为不同时钟源产生的时钟,signal就完成了跨时钟域的迁移。对于这类的跨时钟问题,从设计上一定要进行跨时钟域处理,否则就可能会出现亚稳态问题。

二、技术方法

       本文整理了常用的跨时钟域处理的方法,下面就逐一进行介绍:

       首先要说明的是:标准的跨时钟域处理,要求signal在原时钟域是寄存器输出的,否则经过组合逻辑后,从timing角度来讲会变得更恶劣,不利于中后端收敛timing。

2.1. 单bit信号跨时钟域处理:

      对应单bit的同步,通常情况下可以直接打几拍即可,具体根据destination clk domain的时钟频率来看以及工艺节点来决定,打几拍后可以大大减少亚稳态发生的概率。

异步时钟域处理的七种方法_第1张图片

2.2. 多bit信号跨时钟域处理:

      针对多bit的情况,就不能像单bit那样简单的打打几拍了,更不能说把每个bit都打几拍,这样做不仅费面积,同时也不一定能达到预期的效果,因为同步过程的第一拍本来就是不确定输出0还是1的,所以虽然同时对多个bit分别打拍,但实际上有可能有的bit先同步成功,有的bit后同步出成功。那么对于多bit的处理方法,常用的有以下几种:

2.2.1 异步FIFO机制

      这种在大型IP中很常见,尤其对数据量较大的传输,可以利用FIFO来缓存一定量的数据,进而提高数据传输效率。

2.2.2 硬件handshake机制

       即一方发送请求数据,另一方收到请求后,对请求信号进行同步处理,然后回复ack和数据,请求方收到ack后做同步处理并将数据缓存到本地时钟域,见下图。

异步时钟域处理的七种方法_第2张图片

2.2.3 利用sync bit来锁存多bit数据

    这也是个常用的方法,比如返回数据的一方,提供当前数据以及数据valid信号,接收方先对valid进行同步,然后利用同步后的valid去采样数据,这样就保证了采样时刻,数据是稳定的。

2.2.4 多bit同时锁存

      像上面介绍的,不能简单的对每个bit同时打拍,但是可以这样,我们在新时钟域中将多bit信号进行锁存,并根据需求打几拍,然后判断最后两拍数据相同时,我们认为所有bit数据同步成功,这个时候可以直接输出。

2.2.5 格雷码机制

将多bit转格雷码,格雷码的特点是每次只有1个bit翻转,因此经过格雷码输出的多bit也就等价为单bit的情况,可以直接打几拍输出。

2.2.6 软件flow来避免异步问题

    最后一种方法,我们在设计中也会经常用到,具体来说,当我们需要更新某些配置时,通过软件先关闭模块使能或者时钟使能等方法,然后改写配置,等配置信息更新完成后,再打开模块进行工作。这种完全靠软件flow来保证异步的方式,可以节省硬件资源,缺点就是不够灵活,具体还要参考实际应用。

三、小结

        以上介绍了异步处理的7种常用的解决方法,每种方法各有优势,具体的选择可以根据实际需求进行平衡。另外,对于异步时钟域的跨时钟转换过程,中后端是设FALSE path的,认为设计保证了,因此这部分timing必须要硬件保证,否则实际工作过程中有可能会出现亚稳态。

你可能感兴趣的:(单片机,fpga开发,嵌入式硬件,青少年编程,开发语言,汇编)