双锁存器法(两个触发器)
一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存,那么采样的结果将可能是亚稳态。 通常采用的方法是双锁存器法, 即在一个信号进入另一个时钟域之前, 将该信号用两个锁存器连续锁存两次,最后得到的采样结果就可以消除亚稳态问题。 电路结构如下: 双锁存器同步法的优点在于其结构简单而且易实现,缺点为
- 增加了两级触发器延时,在高性能计算中,两个时钟周期的消耗对系统性能有消极的影响。如果电路中时钟较多,跨时钟域会浪费很多有效的时钟周期。
- 当快时钟域转到慢时钟域时,易造成慢时钟采样丢失(还未来得及采样数据就已经变化),所以此方法常用于慢时钟域转到快时钟域。
在慢时钟域转到快时钟域用双锁存器同步法时,需要满足两个条件:
- clk_slow的周期 > (clk_fast的周期 + 路径延时)
这是为了确保信号可以被clk_fast采样到。(假设clk_fast和clk_slow起始时刻是相同的) - 数据变化的间隔 > (clk_slow的周期 + 2*(clk_fast的周期) + 路径延时)
这是为了确保所有的数据变化均能被采集到。
单bit信号跨时钟域
边沿检测同步器
对于慢时钟到快时钟的信号传输,采用边沿检测同步器法,这种方法可以检测输入信号的上升沿,也可以检测它的下降沿。 称之为边沿检测的原因是,慢时钟域下的一个有效脉冲最短等于慢时钟的一个周期,我们站在快时钟域的角度来看,就会觉得这个原本慢时钟域一个周期的信号可能会在快时钟域下持续好几个周期,但是其实这个脉冲只发生了一次,所以快时钟去检查有效脉冲的翻转边沿是最为准确的,边沿上升或者下降只有一次。 如上图所示,边沿检测同步器的功能就是将慢时钟域下一个时钟周期的脉冲搬移并缩小为快时钟域下一个时钟周期的脉冲。 电路结构如下: 边沿检测同步器的适用条件为:输入数据的宽度必须比一个接受时钟周期加上一个同步触发器的hold时间要长。
脉冲检测同步器
对于快时钟域到慢时钟域,通常采用脉冲检测同步器进行同步。其基本功能为从快时钟域取出一个单时钟宽度脉冲,然后在慢时钟域中建立另一个单时钟宽度的脉冲。 电路结构如下: 快时钟的时钟频率比慢时钟频率高,慢时钟直接去采快时钟的脉冲,很有可能采不到。通过翻转电路,将快时钟域前后间隔较多周期的脉冲进行有效标定,形成toggle波形;这样就可以在慢时钟域下,先通过同步电路,将这个toggle信号进行同步,形成A、B信号的波形;然后最后使用异或逻辑门,对A、B信号进行逻辑操作。如下图所示: 脉冲同步器的限制条件为: 输入脉冲之间的最小间隔必须等于两个同步器时钟周期。
三种同步器比较
| 输入 | 输出 | 应用 | 限制 |
---|
电平检测(双锁存器) | 电平 | 电平 | 同步电平信号,适用于任何时钟域的传输。 | 输入信号必须保持两个接受时钟周期宽度,每一次同步后,输入信号必须恢复到无效状态。 | 边沿检测 | 电平或脉冲 | 脉冲 | 检测输入信号的上升沿和下降沿,适用于低频时钟域向高频时钟域传输。 | 输入信号必须保持两个接受时钟周期宽度。 | 脉冲检测 | 脉冲 | 脉冲 | 同步单周期脉冲信号,适用于高频时钟域向低频时钟域传输。 | 输入的脉冲时间的距离必须保持两个接收时钟周期以上。 |
结绳法
适合任何时钟域的过度。采用锁存信号,在时钟域 1 锁存住输入,相当于脉冲展宽。 将快时钟域信号的脉冲周期延长,等到慢时钟同步采样后再“解绳”,还原为原来的脉冲周 期宽度。 具体细节可参考:硬件加速设计方法
|