synopsys的VC Spyglass 可以用来检查cdc和rdc问题,即跨时钟域,和跨异步域问题。
1.CDC与亚稳态
Clock Domain Crossing (CDC) : 跨时钟域设计中,信号adat从aclk domain传播到bclk domain;aclk与bclk之间的频率,相位没有固定关系,为asynchronous异步关系的时钟。
Metastability: 当adat在bclk采样点附近变化时,不满足后级flip-flop的setup/hold time,D端无法完成正确的锁存,Q端的输出在较长一段时间内处于不确定的振荡值,出现亚稳态的现象。
亚稳态传播给后级组合逻辑时,后仿中的不确定的X态会传播出去,影响电路功能。
- Synchronous clock domains 在时钟约束和时钟树正确的情况下,不属于CDC这类情况,不会产生亚稳态;
- qasi synchronous: 时钟同源,由同一个分频器产生,频率为整数倍关系,相位差固定,为准同步时钟关系。时钟的抖动和偏移的不确定性存在一定关系。此时也可以当作同步电路处理。
- 相比于sequential logic,combinatorial logic的特性导致其更容易传播亚稳态和产生glitch。
1.1 Synchronizer
常见的单bit 或者采用格雷码的CDC处理方式为使用two-flip-flop作为同步器,第一级dff的Q端出现亚稳态,第二级相同clock的dff采样时,Q端一般为稳定的电平强度。
Note:
- MTBF-mean time before failure 公式评估亚稳态发生的概率(发生两次失效的时间间隔)。时钟频率越高,数据变化频率越高,越容易出现亚稳态。**
- 满足setup/hold time,Q端的输出需要在clock-to-qdelay时间内稳定。在两级同步的策略中,参数S为第2级dff处理亚稳态的时间,Tdelay为第1级dff的clock-to-qdelay + wire delay,Tsetuphold为第2级dff的setuphold time。 对于超高速设计,参数S不够充裕,则可以采用3级dff进行同步处理。
- 跨时钟域的信号,应该在source domain寄存一拍,再经过destination domain的2级同步处理。因为如果是source domain的组合逻辑直接输出,容易出现glitch,增加亚稳态发生的概率。而同步电路由于时钟约束,若是single cycle path,上级dff的q端经过组合逻辑到达下级dff的d端预期为1个cycle,在这1个cycle中,出现的glitch一般不会影响下级dff的d端采样锁存信号。
- 2级dff同步存在cycle uncertainty的问题;当第2级dff采样第1级dff Q端输出的亚稳态,若采样到1,则latency为1个cycle;采样到0,则latency为2个cycle。至于是N还是N+1,并不确定。
- CDC中传播的信号一般分为event类型和level类型。event如pulse类型信号,level如static类型信号。这两种类型的处理方式不同,下文具体讲解。
- VC Spyglass CDC将CDC path分为ctrl path和data path两种。 VC Spyglass
- CDC分为structural verification和 functional verification 两种。
1.2 亚稳态问题
1.2.1 Metastability due to Missing Synchronizer
1.2.2 Re-Convergence of Synced Signals
Multi-bit signals 分别经过2-dff同步,然后通过组合逻辑成为一个有效信号,驱动后级组合逻辑。经过逻辑组合后的信号可能会出现一个cycle的非预期值被误采样,影响功能逻辑。原因可总结为两点:
F1 到 F2的path delay和 F6 到 F7的 path delay不同,skew的存在导致clk_B采样存在先后顺序。
就算布线保证skew几乎不存在,Multi-bit signals 在同一时刻发生变化。但是因为2-dff同步存在cycle uncertainty的问题,也会出现一个cycle的不确定值。
2级同步会导致一个clock cycle的uncertainty;metastability可能会导致data-coherency和re-covergence的问题;
Reconvergence(correlation):一些reconvergence信号会带来的glitch以及sample single出错;
(multi-bit uncertainty)会导致在receiving domain中有一到两个cycle的latency或者cycle uncertainty;可以通过gray encoding的方式来避免;当采用了格雷编码或者下级电路对data coherency有一定容忍度,不会影响逻辑功能
通过verify signals肯定不会在destination clock cycle进行toggle,从而waive掉这个path。
1.2.3 Glitch introduced at RTL
上述source domain的组合逻辑输出 ,容易出现glitch,导致亚稳态的发生。
1.3 function problem
1.3.1 DATA LOSS
从快时钟域到慢时钟域,信号保持时间过短,慢时钟域采样不到,data loss.
1.3.2 Data hold problem(data loss)
Fast to slow clock以及data enable sequencing场景;
EN使能时,data hold而不是data change。
可以通过implement pulse extenders(脉冲展宽)的方式来避免:
1.2.5 Reset Synchronization
ASIC中一般采用异步复位,同步释放的策略。同步处理的reset信号,后端工具会自动识别,调整路径上的buffer,保证reset信号满足dff的removal time recovery time。未作同步处理的reset信号,在后仿时若removal/recovery违例,出现X态。
reset synchronizer的结构如下:低电平有效的复位,rstn_d1的D端一直为高电平1。
reset release流程如下:
rstn_s assert时,rstn_d2维持为0,保持后级电路的复位状态。
rstn_s release时,若rstn_d1的removal/recovery违例,Q端出现亚稳态。rstn_d2在1~2个cycle latency后输出为1。
rstn_s release时,若rstn_d1的removal/recovery没有违例,rstn_d2在1个cycle latency后输出为1。