不同相频关系时钟的跨时钟域问题

本文摘自:硬件架构的艺术 57-63页


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

  • 同频零相位差时钟
  • 同频恒定相位差时钟
  • 非同频可变相位差时钟
    -整数倍时钟
    -有理数倍时钟

假定两个时钟之间的相位和时钟抖动相同,并假定它们之间的路径已经按同样的时钟延迟和偏移参数进行了平衡。除此之外,还假设这两个时钟起始处的相位差为零,而且触发器的“时钟到Q端”的延时也为零。

1 同频零相位差时钟

在此种情形下,两个完全相同的时钟“clk1”和“clk2”具有同样的频率与零相位差。“clk1”和“clk2”是完全相同的,并由同一个时钟源产生,在“clk1”和“clk2”之间的数据传输并不算是跨时域的。实际上,这种情况就是单时钟设计,在这里仅仅是出于全面考虑才提及它。

无论何时,从“clk1”到“clk2”的数据都有一个完整的有效时钟周期用于传输,以保证数据可以正常捕捉,如图3.11所示。
在这里插入图片描述

只要在源触发器和目的触发器之间的组合逻辑的延迟能满足电路建立和保持时间的要求,数据就能正确地传输。在这种情况下,对设计的唯一要求只是保证STA(静态时序分析)通过。如果这一条件满足,就不会出现亚稳态问题和数据丢失或不一致的问题。

2 同频恒定相位差时钟

这些时钟有相同的时钟周期,但是相位差恒定。典型例子是对某个时钟及其反相时钟的使用。另一个例子是某个时钟相对于其上级时钟发生相位移动,例如,如果规定T为时钟周期,移动值为T/4。

如图3.11所示,时钟“clk1”和“clk2”的频率相同,但在图3.12中“clk1”相对于“clk2”相位前移了3T/4个单位时间。
在这里插入图片描述

每当数据从“clk1”传输到“clk2”时,由于更小的建立时间/保持时间裕量,对组合逻辑的延时约束都会变得更紧。如果组合逻辑的延时能保证满足采样沿处建立时间和保持时间的要求,数据就可以正确地传输,并且不会有亚稳态产生。在这种情况下是不需要同步器的。只需要使设计的STA通过就可以了。

一般会在STA中创建这种情况以保证满足时序要求。如果组合逻辑有更多延时,通过在发射边沿和捕获边沿加入偏移(例如,使时序有相同频率和不同相位),会有助于满足时序的要求。

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

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

3.1 整数倍频率的时钟

在这种情况下,一个时钟的频率是另一个时钟的整数倍,并且它们有效边沿的相位差是可变的。这两个时钟的有效边沿之间可能的最小相位差始终等于其中较快的那个时钟的时间周期。

在图3.13中,时钟“clk1”的频率是时钟“clk2”的三倍。假定T是时钟“clk1”的时钟周期,时钟“clk2”可以用来捕获数据的时间可能是T、2T或3T,这取决于数据在时钟“clk1”的哪个边沿发出。因此,任意路径的最差延迟都应在时钟边沿相位差为T时满足建立时间的要求。最差保持时间检查应当在时钟边沿相位差为零时进行。

在以上所有情况下,都有较快时钟的一个完整的商和保持时间的以使其能正确地捕捉,所以它通常都可以保证满足建立时间和保持时间的要求。因此,就不会存在亚稳态或数据不一致的问题,也就不必使用同步器了。

既然在这里数据由较快时钟发出,并由较慢时钟捕获,那么为了避免数据丢失,源数据应该保持至少一个目的时钟周期的稳定状态。可以使用一些控制电路来满足这一要求,例如,使用一个简单的有限状态机(FSM)。参考图3.13,如果使源数据每三个源时钟改变一次,就不会出现丢数据的问题了。
在这里插入图片描述

3.2 非整数倍频率的时钟

这种情况指一个时钟的频率是另一个时钟的非整数倍,而且它们有效边沿的相位差是可变的。

与前面提到的各时钟之间保持整数倍关系不同,因此两时钟之间的最小相位差足以使亚稳态产生。至于亚稳态是否真的发生,取决于实际的频率倍数和设计工艺。下面介绍三种不同的情况。

在第一种情况下,在源时钟有效沿和目的时钟有效沿之间有足够大的相位差,所以不会有亚稳态产生。

在第二种情况下,源时钟和目的时钟有效沿非常接近,导致产生亚稳态问题。然而,在这里时钟频率倍数关系需要满足以下条件,即一旦有时钟边沿接近出现,下一个时钟周期就会留出足够大的时间冗余,使得数据的捕获不会出现违背建立时间或保持时间的要求。

在第三种情况下,两个时钟的时钟沿在许多连续的周期中都非常接近。这与异步时钟的行为很相似,但因为这两个时钟的源头是相同的,所以它们之间的相位差是可以计算出来的。

注意,在下面的所有例子中,会使用某些延迟值,假设时钟边沿之间的相位冗余在小于或等于1.5ns时会产生亚稳态。这里的1.5ns 并只是一个比喻,在实际设计中与所用技术、触发器特征等许多因素相关。

例子1


在这种情况中两个时钟的有效沿永远不会过于接近,从而可以保留足够的冗余来满足电路对建立时间和保持时间的要求。


假设两个时钟“clk1”和“clk2”分别是对同一个时钟“clk”的3分频与2分频。那么“clk1”比“clk2”慢1.5倍。如图3.14所示,“clk1”的周期是15ns,“clk2”的周期为10ns。这两个时钟间的最小相位差是2.5ns,这对于满足建立时间和保持时间已经足够了。

在这里插入图片描述
然而,由于该相位差很小,应该避免在跨越两个时钟的位置使用任何组合逻辑。对于增加的任何组合逻辑,必须满足建立和保持时间的要求以避免亚稳态,因此必须使用同步器。


进一步说,在数据从慢时钟域传递到快时钟域时,必须增加逻辑以保证数据在快时钟域中只取样一次,这时不会有数据丢失的现象。然而,在从快时钟域向慢时钟域传递数据时,就可能出现数据丢失。为了解决这个问题,必须将源数据保持至少一个目标时钟周期,以保证在两个连续变换的源数据之间至少有一个目标时钟到达。

例子2


在这种情况下,两个时钟的有效沿可能间隔性地非常接近。换句话说,两个时钟沿会出现挨着的情况,然后在再次出现挨着的情况之前,接来的几个周期两个时钟沿会保留足够的裕量(能正确捕捉到数据)。这里“挨着”的意思是接近到了足以产生亚稳态的程度。


在图3.15中,时钟“clk1”和“clk2”的周期分别为10ns 与7ns。注意,它们之间的最小相位差是0.5ns,这已经非常小了。所以会出现亚稳态,并且必须使用同步器。


由于亚稳态的出现,当两个时钟沿很接近时数据不能被目标域正确地捕获。然而,在这种情况下,注意,一旦出现时钟沿非常接近的情况,下一个周期的裕量就会很大,以便数据就可以被目标时钟正确捕获。图3.15中的信号B2就表示这种情况。所期望的输出是B1,实际的波形是B2。注意,这里数据不会丢失,但是可能有数据不连贯的问题。


对于从快时钟域到慢时钟域的传输,可能出现数据丢失,为了阻止这种现象,源数据应该保持至少一个目标时钟周期不变。可以通过使用一个简单的FSM实现这一目的。
在这里插入图片描述

例子3


在这种情况下时钟间的相位差异很小,并能连续存在几个周期。除了变化的相位差异和周期性的重复现象,其余都与异步时钟很相似。


在图3.16中,时钟“clk1”和“clk2”的周期分别为10ns与9ns。可以看出两个时钟的有效时钟沿很接近,并持续4个连续周期。在前两个周期中可能会违背建立时间(源时钟在目的时钟之前),而在后两个时钟周期中可能会违背保持时间(目的时钟在源时钟之前)。
在这里插入图片描述
在这种情况下,将会出现亚稳态问题,因此需要进行同步。除了亚稳态的问题,数据从慢时钟域传递到快时钟域时也可能失丢。可以从图3.16中可以看到,B1是不含亚稳态的正确输出。但实际的输出可能是B2。这里数值1丢失了,因为第一个周期“1”由于违背建立时间未能捕捉到,而在第二个周期中由于违背保持时间误捕捉到了“0”。


为了不丢失数据,数据需要保持稳定至少两个目的时钟周期。这既适用于从快到慢的传输,也适用于从慢到快的传输。可以通过使用简单的FSM对源数据产生进行控制完成这一任务。但数据不连贯的问题仍然存在。


这时,已标准化的技术(如握手和FIFO)对于传输数据更为有效,因为它们也解决了数据不连贯的问题。

  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耐心的小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值