逻辑设计方法学【7】 --跨时钟域

来源:互联网 发布:央视新闻大数据播报 编辑:程序博客网 时间:2024/06/05 04:21

在上一篇文章的最后,详细说明了什么是同步时钟,什么是异步时钟,在本篇中,主要介绍跨同步时钟域问题,为详细描述异步时钟域间数据传输的方法打好基础。


如果多个时钟都起源于同一时钟,并且它们的香味和频率关系是已知的,那么这些时钟可以看成是跨同步时钟域的时钟。按照相位和频率的关系,可以将这些时钟分成以下类型:

  • 同频零相位差时钟
  • 同频恒定相位差时钟
  • 非同频可变相位差时钟
    • 整数倍时钟
    • 有理数倍时钟
假定两个时钟之间的相位和时钟抖动相同,并假定他们之间的路径已经按同样的时钟延迟和偏移参数进行了平衡。除此之外,还假设这两个时钟起始处的相位差为零,并且触发器的“时钟到Q端”的延时也为0.

1 同频零相位差时钟

这种情况下,两个时钟其实属于完全相同的时钟,并且这两个时钟虽然在概念上(不考虑各种偏移)是不同的时钟,但是在实际的工作中,没有偏移是不存在的,延时完全相同也是很难达到的。所以实际上我们可以认为这两个时钟属于完全相同的时钟。那么,信号在跨越这两个时钟的时候就不属于跨时钟域。也就不需要在此进行详细分析了。

2 同频恒定相位差时钟

这些时钟有相同的时钟周期,但是相位差恒定。最常见的例子是对一个时钟信号取反使用。同样,如果一个时钟相对于其上级时钟发生了相位移动,以下的分析中假设时钟的移动为T/4.如图1所示,时钟clk1和clk2的频率相同,但在图1中clk1相对于clk2相位前移了3T/4个单位时间。

图 1 频率相同相位不同的时钟

每当数据从clk1传输到clk2的时候,由于更小的建立时间/保持时间裕量,对组合逻辑的延时约束都会变得更紧。如果组合逻辑的延时能保证采样沿处建立时间和保持时间的要求,数据就能正确地传输,并且不会有亚稳态产生。在这种情况下是不需要同步器的,只需要使设计的STA通过就可以了。一般会在STA中创建这种情况以保证满足时序要求。如果组合逻辑有更多的延时,通过在发射边沿和捕获边沿加入偏移(例如,使时序有相同频率和不同相位),会有助于满足时序的要求。

针对图1的情况,如果在clk1和clk2跨时钟域的时候有组合逻辑带来更多的延时,可以将clk1的信号多延时一个clk1时钟节拍,以保证在clk2的时候能够满足建立时间,因为clk1和clk2具有相同的频率,所以当clk2中的信号满足建立时间要求,因为它本身满足clk1的保持时间,所以在clk2中也同样会满足保持时间。

3 非同频、可变相位差时钟

这类时钟具有不同的频率,而且相位差也是可变的。可以将这类时钟分成两个子类,第一子类中各时钟周期之间是整数倍的关系,第二子类中各时钟周期是非整数倍(有理数倍)的关系。不论是哪一子类,各时钟有效沿的相位差都是可变的。下面将详细介绍这两种情况。

3.1 整数倍频率的时钟

在这种情况下,一个时钟的频率是另一个时钟的整数倍,并且他们有效边沿的相位差是可变的(这个是一定的)。这两个时钟的有效边沿之间可能的最小相位差始终等于其中较快的那个时钟的时钟周期(请注意这个条件,我们可以认为是起始时间相同,起始位置相同)。
在图2中,时钟clk1的频率是时钟clk2的三倍,假定T是时钟clk1的时钟周期,时钟clk2可以用来捕获数据的时间可能是T、2T、3T。这取决于数据在时钟clk1的那个边沿发出。因此,任意路径的最差延迟都应在时钟边沿相位差为T时满足建立时间要求。最差保持时间检查应当在时钟边沿相位差为0时进行。


图 2 整数倍频率关系

在以上所有情况下,都有较快时钟的一个完整的周期用来传输数据,以使其能正确地捕捉,所以它通常都可以保证满足建立时间和保持时间的要求。因此,就不存在亚稳态或数据不一致的问题,也就不必使用同步器了。这是因为信号在clk1的时候肯定能满足建立时间和保持时间,当信号从clk1到clk2的时候,无论建立时间还是保持时间在最坏的情况下,都不会影响clk1的时钟稳定性,所以,在clk2情况下,也不会发生建立保持时间违例。

既然在这里数据由较快时钟发出,并由较慢时钟捕获,那么会带来什么问题呢?通过图2可以清楚地看出来,如果信号在clk1下每个时钟节拍都改变一次,那么clk2在采样数据的时候就有可能会丢失一部分数据。为了避免数据的丢失,源时钟下的信号应该至少保持一个目的时钟的周期,以保证信号能被目的时钟采样。实现方法可以使用一个简单的状态机来实现,这个相对比较简单,在此不再讨论。

同样地,如果clk2的时钟频率是clk1频率的三倍,这种情况下,因为这两个时钟属于同一PLL或者DCM出来的时钟,所以与上面的分析方法一样,也不需要同步器,因为不会发生建立时间和保持时间违例。那么这样的时钟关系在信号传输的过程中会有什么问题呢?我们需要十分关注clk2会多采样数据,同样可以使用状态机来实现。

3.2 非整数倍频的时钟

这种情况指一个时钟的频率是另一个时钟的非整数倍而且他们有效边沿的相位差是可变的。这与3.1节中所提到的情况不同,因为频率的非整数倍关系,就可以导致在传输的过程中,两个时钟之间在某一个时间阶段有最小的相位差,这个相位差很有可能会导致亚稳态的产生。至于亚稳态是否一定会发生呢,这取决于两个时钟实际的关系,以及芯片的设计工艺。下面详细介绍三种不同的情况。
在第一种情况下,在源时钟有效沿和目的时钟有效沿之间有足够大的相位差,所以不会有亚稳态产生
在第二种情况下,源时钟和目的时钟有效沿非常接近,导致产生亚稳态问题。然而,在这里时钟频率倍数关系需要满足以下条件,即一旦有时钟边沿接近出现,下一个时钟周期就会留出足够大的时间冗余,使得数据的捕获不会出现违背建立时间或保持时间的要求。(我们认为设计者有办法避免在这个比较接近的边沿下,目的时钟不进行数据采样,这么做也是安全的设计)
在第三种情况下,两个时钟的时钟沿在许多连续的周期中都非常接近,这与异步时钟的行为很相似,但因为这两个时钟的源头是相似的,所以他们之间的相位差是可以计算出来的,会产生亚稳态
在下面的所有例子中,会使用某些延迟值,假设时钟边沿之间的相位冗余在小于或等于1.5ns时会产生亚稳态。这里的1.5ns并不只是一个比喻,在实际设计中与所用技术、触发器特性等许多因素相关。

例子1
在这种情况下,两个时钟的有效沿永远不会过于接近,从而可以保留足够的冗余来满足电路对建立时间和保持时间的要求。
假设两个时钟clk1和clk2分别是对同一个时钟clk的3分频和2分频。那么clk1比clk2慢1.5倍。如图3所示,clk1的周期是15ns,clk2的周期是10ns.这两个石中剑的最小相位差是2.5ns,这对于满足建立时间和保持时间已经足够了。


图 3 两个时钟沿距离较远可以避免亚稳态

然而,由于该相位差很小,应该避免在跨越两个时钟的位置使用任何组合逻辑。对于增加的任何组合逻辑,必须满足建立和保持时间的要求以避免亚稳态,因此必须使用同步器。同样,在快时钟域向慢时钟域传递的时候,有可能发生数据丢失的情况;从慢时钟域到快时钟域的传输中,会发生多采样的情况,所以在逻辑设计的时候一定要保证数据采样的正确性。

例子2
在这种情况下,两个时钟的有效沿可能间隔性地非常接近。即每隔一段时间就会出现两个时钟的有效沿紧挨着,接下来的一些周期内,两个时钟沿会保留足够的裕量。两个有效沿非常接近已经使电路有产生亚稳态的风险。在下图4中,时钟clk1和clk2的周期分别为10 ns和7 ns.它们之间的最小相位差是0.5 ns,这个远小于1.5ns,所以会出现亚稳态。


图 4 间歇性聚集的时钟沿

例子3
在这种情况下,石中剑的相位差以很小,并能连续存在几个周期。除了变化的相位差异和周期性的重复现象,其余都与异步时钟很相似。在图5中,时钟clk1和clk2的周期分别为10ns和9ns.可以看出两个时钟的有效时钟沿很接近,并持续4个连续的周期。在前两个周期中可能会违背建立时间(源时钟在目的时钟之前),而在后两个时钟周期中可能会违背保持时间(目的时钟在源时钟之前)。


图 5 连续聚集的几个周期的时钟沿

在这种情况下,将会出现亚稳态问题,因此需要进行同步。除了亚稳态问题,数据从慢时钟域传递到快时钟域时也可能丢失。为了不丢失数据,数据需要保持稳定至少两个目的的时钟周期。这既是用于从快到慢的传输,也是用于从慢到快的传输。可以通过使用简单的FSM对原数据产生进行控制完成这一任务,但数据不连贯的问题可能依然会存在。

总结
在这篇里面,主要分析的是同步时钟中的跨时钟域问题,在实际的设计中,我们经常会遇到这样的问题。对于新手工程师来说,他们喜欢在时钟不相同的时候就用同步器来同步信号,虽然这么做没有错,并且可以使信号在跨时钟域时达到很好的同步效果,但是,使用同步器会导致输出信号相对输入有一些时钟延迟,对于传输需求延时很小的系统,这样的方法不适合。同样,对于资源紧缺的系统来说,增加同步器也会造成资源利用率的增加。所以我们一定要根据以上的分析来清楚地知道在设计中,哪些情况下需要使用同步器,哪些信号只需要满足STA就已经足够了。

参考文献
[1] Mohit Arora.硬件架构的艺术.机械工业出版社. 57-63

原创粉丝点击