IC基础(三):跨时钟域处理——电平同步器

一、什么是跨时钟域?
在讲怎么解决跨时钟域问题之前,起码的先介绍什么是跨时钟域吧!!!那么跨时钟域指的是什么意思呢?在IC基础(一):异步FIFO的介绍异步FIFO的介绍中其实就存在跨时钟域的问题。跨时钟域简单的说就是两个模块之间运行的时钟频率不一致,并且这里两个模块之间需要通信。举个例子就是现在有两个模块A和B,其运行的时钟分别是CLKA和CLKB。CLKA和CLKB的频率和相位不同的话,一定是跨时钟域。(PS:有些博客中说频率不同,但是相位差相同的情况下,也可以当作是同步时钟。这个我没有太研究过,也很想和大家一起讨论)。

二、异步信号的危害和处理

首先给出跨时钟域的模型!!!!

IC基础(三):跨时钟域处理——电平同步器
信号A从时钟域CLK1传输到时钟域CLK2。
再来画个波形图(没图讲个屁啊)!!!
IC基础(三):跨时钟域处理——电平同步器
图片来源于李洪革FPGA/ASIC高性能数字系统设计

如上图所示,CLK1和CLK2分别属于不同的时钟,既不同频也不同相,这就是典型的跨时钟域了。
当信号A的拐点处于第二时钟域的上升沿的时候,触发器的输出B就是亚稳态信号,通过第二个触发器之后的C就变成了稳定的数据信号。具体可以参考一下三种情况。

1、当数据A的下降沿被采样为高电平时,数据B的输出就是高电平信号。经过一个CLK时钟后数据被锁存到第三个锁存器中,是输出保持为高电平。(如图中的a情况所示,只看a情况就行)
2、当数据A的下降沿被采样为低电平时,数据B的输出就是低电平信号。经过一个CLK时钟后数据被锁存到第三个锁存器中,是输出保持为低电平。(如图中的b情况所示,只看b情况就行)
3、这种情况就了不得了。数据A的下降沿被采样存在亚稳态可能,则输出的数据B信号也是亚稳态信号,如图中c所示(也就是输出的既不是高电平也不是低电平,因为逻辑器件高低电平的定义是有一定的区间的,当输出的电压不在这个区间的时候输出的逻辑值既不是1也不是0)。但是这个亚稳态总得回到稳态吧,而且其恢复到稳态的时间必然小于CLK2的一个时钟周期,(由器件特性决定)。因此在CLK2的第一周期内,亚稳态信号c转变为高电平或者低电平,从而使信号再经过一级触发器的时候被重新采样,这时候输出的就是稳定的信号了。

这种采用两级D触发器的电路结构称为电平同步器,其实异步信号的处理都是基于各种各样的同步器。这里对单个bit 的信号采用两级D触发器就能很好的较少亚稳态的传播,但是绝不可能消除。(为什么要消除亚稳态?因为亚稳态会在电路进行传播,如果直接将B接到下一个模块,那么不稳定的信号就会使电路中的组合逻辑输出错误)

但是,这里要特殊说明一下,虽然输出的是稳定的信号,但是这个信号也不一定是正确的信号,换言之双D触发器只是降低了亚稳态的传播,并没有能保证采样到的数据是正确的,这是我当时一直纠结的问题。想要采样到正确的数据就要保证数据A在CLK2下的建立时间和保持i时间不违规

补录 2019.5.07

最近在复习异步通信知识点的时候发现需要需要考虑的问题还挺多的,在此补充一下关于电平同步器的一些考虑。

1、电平同步器的使用场景?
2、由慢时钟域传输到快时钟域需要注意哪些问题?
3、由快时钟域传输到慢时钟域需要注意哪些问题?

解答:
1、顾名思义,电平同步器主要用于电平信号的同步。(划重点,是用于电平信号的同步,也就是说给给信号在clk_a的时钟域中至少是有两个周期有效)

2、在由慢时钟域向快时钟域传输的时候,只要电平信号在clk_a的时钟域中保持一个有效的周期,就可以被clk_b采样到。但是作为电平信号,该信号至少在clk_a中保持两个时钟有效,所以一定会被clk_b采样到的。

3、在由快时钟域传输到慢时钟域时,将可能会因为数据变化太快而导致慢时钟域无法采样到数据。那么如何保证数据一定会被采样到呢?我们可以反推过来想一下,在clk_b中不能采样到数据的原因主要是因为电平信号在clk_b中持续的时间不足一个clk_b的时间。所以只要保证在由快时钟域向慢时钟域传输的过程中
电平信号的有效时间至少为一个clk_b即可。

未能正确采样。
IC基础(三):跨时钟域处理——电平同步器
可正确采样:
IC基础(三):跨时钟域处理——电平同步器