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

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

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

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

在这里插入图片描述
信号A从时钟域CLK1传输到时钟域CLK2。
再来画个波形图(没图讲个屁啊)!!!
图片来源于李洪革FPGA/ASIC高性能数字系统设计
图片来源于李洪革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时间不违规

猜你喜欢

转载自blog.csdn.net/MaoChuangAn/article/details/88814300