前言:从接触IC开始主动被动地与跨时钟域(CDC)打了不少交道,所以对我目前所了解的与CDC相关的知识进行小结,便于自己复习总结。
相关知识:
(1)同步电路与异步电路
同步电路:由时钟驱动存储元件的电路,即存储元件的状态只在时钟沿到来时才发生变化。
异步电路:存储元件所存状态跟随输入信号的变化立即发生变化,信号之间的传递通常通过握手完成,不受时钟约束。
(2)建立时间(setup time)、保持时间(hold time)以及亚稳态(metastability)
建立时间:时钟沿到来之前输入信号必须保持稳定的最小时间。
保持时间:时钟沿到来之后输入信号必须保持稳定的最小时间。
亚稳态:当输入信号D无法满足建立时间或保持时间,称之产生了setup time/hold time violation,此时Q的输出无法确定是“0”或“1”,需要一定时间后才可以稳定。可以说,当Q端在clk-to-q time(输入信号满足setup time/hold time要求,从时钟沿到来时刻到输出端Q变化至稳定的时间)之后才稳定的话,我们说这个触发器产生了亚稳态。
(3)D触发器以及D触发器为什么有setup time与hold time的要求
D触发器(data flip-flop或delay flip-flop)内部是一个主从锁存器,锁存器能够存储住状态靠的是背靠背的反相器,而这个背靠背的反相器能够锁住状态是需要时间的。
G1~G4与非门是维持阻塞电路,G5~G6组成RS触发器。时钟直接作用于G2/G3门上,时钟为低时,通道关闭,为高时通道打开并进行数据的采样传输。
数据传输到G2/G3门之前,会经过G4/G1与非门,将引入时间延迟。即引入建立时间的概念就是为了补偿数据在G4/G1门上的延迟,时钟到来之前,G2/G3端的输入数据需要准备好,以便数据被正确采样。
数据被时钟采样完毕后,传输到RS触发器进行锁存之前,需经过G2/G3门,也会引入延迟。保持时间就是为了补偿数据在G2/G3门上的延迟。即时钟到来之后,要保证数据能够正确传输到G5/G6与非门输入端。
数据在传输中不满足建立时间与保持时间,会处于亚稳态,导致传输出错。
(4)约束条件
Tskew:时钟偏移;
Tcomb:data path中的组合逻辑延迟;
Tcq:寄存器clock端到Q端的延迟;
Tsu:建立时间;
Thd:保持时间;
Tclk:时钟周期。
①建立时间约束条件
Tcq + Tcomb +Tsu <= Tclk + Tskew
数据传输时间小于时钟达到时间,即数据路径比时钟路径更快。
理论上电路承载的最小时钟周期与最快时钟频率分别是:
最小时钟周期 = Tcq + Tcomb +Tsu - Tskew
最快时钟频率 = 1/最小时钟周期
②保持时间约束条件
Tcq +Tcomb >= Thd + Tskew
前一级的数据延迟时间大于触发器的保持时间。
(5)建立时间与保持时间违例
建立时间违例:不满足时钟沿到来之前数据保持稳定的时间。
解决方法:增大Tclk,降低时钟频率;增大Tskew,在时钟路径上加上缓冲器,让时钟晚到来;减小Tcq,更换具有延时小的触发器;减小Tcomb,组合逻辑优化,如将串行的组合逻辑优化为并行逻辑,或其中插入触发器。
保持时间违例:不满足时钟沿到来之后数据保持稳定的时间。
解决方法:增加Tcq,更换具有更大器件延时的触发器;增大Tcomb,增加组合逻辑运算时间;减少Tskew,优化时钟路径,让时钟更早到来。