CDC跨时钟域处理

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态会传播出去,影响电路功能。
CDC跨时钟域处理_第1张图片

  1. Synchronous clock domains 在时钟约束和时钟树正确的情况下,不属于CDC这类情况,不会产生亚稳态;
  2. qasi synchronous: 时钟同源,由同一个分频器产生,频率为整数倍关系,相位差固定,为准同步时钟关系。时钟的抖动和偏移的不确定性存在一定关系。此时也可以当作同步电路处理。
  3. 相比于sequential logic,combinatorial logic的特性导致其更容易传播亚稳态和产生glitch。

1.1 Synchronizer

常见的单bit 或者采用格雷码的CDC处理方式为使用two-flip-flop作为同步器,第一级dff的Q端出现亚稳态,第二级相同clock的dff采样时,Q端一般为稳定的电平强度。
CDC跨时钟域处理_第2张图片
Note:

  1. MTBF-mean time before failure 公式评估亚稳态发生的概率(发生两次失效的时间间隔)。时钟频率越高,数据变化频率越高,越容易出现亚稳态。**
    CDC跨时钟域处理_第3张图片
  2. 满足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进行同步处理。
    CDC跨时钟域处理_第4张图片
  3. 跨时钟域的信号,应该在source domain寄存一拍,再经过destination domain的2级同步处理。因为如果是source domain的组合逻辑直接输出,容易出现glitch,增加亚稳态发生的概率。而同步电路由于时钟约束,若是single cycle path,上级dff的q端经过组合逻辑到达下级dff的d端预期为1个cycle,在这1个cycle中,出现的glitch一般不会影响下级dff的d端采样锁存信号。
    CDC跨时钟域处理_第5张图片
  4. 2级dff同步存在cycle uncertainty的问题;当第2级dff采样第1级dff Q端输出的亚稳态,若采样到1,则latency为1个cycle;采样到0,则latency为2个cycle。至于是N还是N+1,并不确定。
    CDC跨时钟域处理_第6张图片
  5. CDC中传播的信号一般分为event类型和level类型。event如pulse类型信号,level如static类型信号。这两种类型的处理方式不同,下文具体讲解。
  6. VC Spyglass CDC将CDC path分为ctrl path和data path两种。 VC Spyglass
  7. CDC分为structural verification和 functional verification 两种。

1.2 亚稳态问题

1.2.1 Metastability due to Missing Synchronizer

CDC跨时钟域处理_第7张图片
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的不确定值。
CDC跨时钟域处理_第8张图片
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

CDC跨时钟域处理_第9张图片
上述source domain的组合逻辑输出 ,容易出现glitch,导致亚稳态的发生。

1.3 function problem

1.3.1 DATA LOSS

CDC跨时钟域处理_第10张图片
从快时钟域到慢时钟域,信号保持时间过短,慢时钟域采样不到,data loss.

1.3.2 Data hold problem(data loss)

Fast to slow clock以及data enable sequencing场景;CDC跨时钟域处理_第11张图片
EN使能时,data hold而不是data change。
可以通过implement pulse extenders(脉冲展宽)的方式来避免:
CDC跨时钟域处理_第12张图片

1.2.5 Reset Synchronization

CDC跨时钟域处理_第13张图片
ASIC中一般采用异步复位,同步释放的策略。同步处理的reset信号,后端工具会自动识别,调整路径上的buffer,保证reset信号满足dff的removal time recovery time。未作同步处理的reset信号,在后仿时若removal/recovery违例,出现X态。
reset synchronizer的结构如下:低电平有效的复位,rstn_d1的D端一直为高电平1。
CDC跨时钟域处理_第14张图片
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。

你可能感兴趣的:(verilog,跨时钟域设计,verilog,硬件架构)