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

本文摘自:硬件架构的艺术 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时满足建立时间的要求 。最差保持时间检查应当在时钟边沿相位差为零时进行 。