跨时钟域问题处理

  

在FPGA设计中,不太可能只用到一个时钟。因此跨时钟域的信号处理问题是我们需要经常面对的。

跨时钟域信号如果不处理的话会导致2个问题:

(1) 若高频率时钟区域输出一个脉冲信号给低频率时钟区域,则该脉冲很有可能无法被采样到,示意图如下,clk2根本采样不到pulse,

但是从原理上来说,低频时钟是无法完全去采样高频信号的,这里面一定会丢失信息。这是无法避免的。

(2) 亚稳态问题

在说明亚稳态之前,我们需要先了解什么是建立时间保持时间

建立时间:在时钟沿到来前,被采样信号应该提前一段时间就进入稳定状态,这个时间称为建立时间

保持时间:在时钟沿到来后,被采样的信号应该保持稳定一段时间,这个时间称为保持时间

而亚稳态就是建立时间和保持时间不满足导致的。如下图所示,就是建立时间不满足,造成dout是个不确定值,即亚稳态。

很多新人以为亚稳态仅仅是逻辑上的障碍,其实亚稳态是实实在在的电路上的问题。模拟电路中,三极管主要工作在其放大区间,而在数字电路却是要工作在截至态。亚

稳态非常类似模拟电路中的放大态,这个状态将使得器件的输出电流被放大,如果这个状态被传递,那么将导致更多的电路处在放大电路的工作状态中,这将引起巨大的

电流和功耗,甚至烧毁芯片,所以,跨时钟域是一定会出现亚稳态的,但是我们必须要把亚稳态控制在一个很小的范围内。这就是为什么要在其后面再用一个寄存器的原

因。它的功能就是把亚稳态仅仅限制在那一个寄存器的小区域。

亚稳态会造成严重的后果。就像将军发命令一样,若其发出的是一个亚稳态的命令,士兵A可能判定这个命令为进攻,士兵B可能判定这个命令为撤退,这将引起极大的混乱。

解决方案:

1,握手操作(高频信号要进入低频时钟域)

针对问题1中所描述的情况,即快时钟域传递一个脉冲信号到慢时钟域,慢时钟域很有可能采样不到该脉冲。这时就需要采用握手操作来解决了。

首先,快时钟域应该将脉冲信号转换为一个持续信号,慢时钟域采样到该持续信号后,返回一个反馈信号,告知块时钟域将持续信号拉低。这种方法的本质就是降低频率

2,相位控制:

考虑下面2种情况,

情况1:

情况2:

上面2种情况中,数据是随着慢时钟所变化的,现将该数据发送到快时钟模块。两种情况唯一的区别在于时钟相位的不同,但这就导致情况1满足建立与保持时间,但情况2不满足建立时间。

因此,跨时钟域的时钟相位控制是决定跨时钟域功能正常的关键因素。

这种情况一般出现在我们使用DCM模块时,这时候才能控制输入与输出的相位关系。建议无特殊要求下,相位选择0,从而避免因相位问题导致的跨时钟域问题。

3,双跳技术(打两拍)

在很多情况下,设计者是无法控制两个时钟间的相位关系的,因此方案1并不太适用。

若跨时钟信号为单比特信号,我们可以采用双跳技术来解决。

前面提到,将军的亚稳态命令会导致士兵做出不同的判断,而双跳技术就是先把亚稳态命令转化为确定命令,再传送给士兵。这样士兵接收到的都是统一命令,才能够统一行动。

代码如下,若sin跨时钟域信号,则sreg很有可能为亚稳态信号,但是sout却是确定信号,这个信号可能是确定的0,也可能是确定的1,但能够保证后续接收到这个信号的模块判定是统一的。

这个两拍的电路很显然,只适合信号从低频时钟跨越到高频时钟

4,异步双口RAM及异步fifo

方案2,3只能用于单比特信号,对于多比特信号是不适用的。因为双跳技术只能保证输出一个确定值,但不能保证这个确定值是0还是1,比如4'b1111跨时钟域传输,若用双跳技术的话,可能变成4'b1010,这是不允许的。

双口RAM

处理多bit数据的跨时钟域,一般采用异步双口RAM。假设我们现在有一个信号采集平台,ADC芯片提供源同步时钟60MHz,ADC芯片输出的数据在60MHz的时钟上升沿变化,而FPGA内部需要使用100MHz的时钟来处理ADC采集到的数据(多bit)。在这种类似的场景中,我们便可以使用异步双口RAM来做跨时钟域处理。
先利用ADC芯片提供的60MHz时钟将ADC 输出的数据写入异步双口RAM,然后使用100MHz的时钟从RAM中读出。对于使用异步双口RAM来处理多bit数据的跨时钟域,相信大家还是可以理解的。当然,在能使用异步双口RAM来处理跨时钟域的场景中,也可以使用异步FIFO来达到同样的目的。

异步FIFO

FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据

原文地址:https://www.cnblogs.com/xiaoyangerlaoshi/p/13543770.html