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


在以上所有情况下 , 都有较快时钟的一个完整的商和保持时间的以使其能正确地捕捉 , 所以它通常都可以保证满足建立时间和保持时间的要求 。因此 , 就不会存在亚稳态或数据不一致的问题 , 也就不必使用同步器了 。
既然在这里数据由较快时钟发出 , 并由较慢时钟捕获 , 那么为了避免数据丢失 , 源数据应该保持至少一个目的时钟周期的稳定状态 。可以使用一些控制电路来满足这一要求 , 例如 , 使用一个简单的有限状态机(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
在这种情况下 , 两个时钟的有效沿可能间隔性地非常接近 。换句话说 , 两个时钟沿会出现挨着的情况 , 然后在再次出现挨着的情况之前 , 接来的几个周期两个时钟沿会保留足够的裕量(能正确捕捉到数据) 。这里“挨着”的意思是接近到了足以产生亚稳态的程度 。