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


在图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)对于传输数据更为有效 , 因为它们也解决了数据不连贯的问题 。