在数字电路设计过程中 ,难免会遇到某个信号需要跨越不同时钟域的情况。 如果对跨时钟域的信号不做妥善的处理,跨越时钟域后,信号可能发生亚稳态,传播亚稳态,导致电路工作异常。并且,由跨时钟域处理不当引发的问题可能是偶现的,通常很难复现和定位问题。综上,CDC(Clock Domain Crossing,跨时钟域)处理,是数字设计中基本而又重要的一个课题。
亚稳态
信号输入触发器时,如果在时钟的触发沿(Tsetup+Thold)时间窗口内发现了变化,会导致触发器采集到逻辑0与1之间的中间电平,采集到的值处于不确定状态,触发器的输出也会处于振荡状态,电路无法正常工作,如下图所示。
图 1 亚稳态电路时序图
2.单bit信号CDC
2.1长信号
对于图1中的情况,单bit长信号CDC的基本方法是,采用 2 位同步器(俗称打拍),降低亚稳态发生的概率,如果电路时序允许,可以做多位同步器, 通常情况下采用 2 位同步器(保险起见,可多打一拍).图2中,F2的输出B有较大概率发送振荡,经过一个时钟周期后,在下一个时钟的上升沿,F3采集B时,B 仍然振荡的概率已经大为降低,有较大可能性已经处于一个稳定的状态(0或者1)。 如果再多打一拍,则F4采集到F3输出C振荡的概率已经微乎其微了。
图 2 采用2位同步器电路