0%

CDC

CDC

亚稳态 metastability

  • 亚稳态:由于不满足建立/保持时间,触发器在时钟边沿采样到变化中的信号,触发器输出信号在一段时间内不处于稳定的 0/1 状态,经过一段稳定时间 tMET 后恢复正常(可能是 0 也可能是 1 )。

    image-20230712104219852
  • 亚稳态不能完全避免。

  • 亚稳态会穿越后续电路,导致非法信号值传播到整个设计的其余部分。

    image-20230712104243496

同步器 Synchronizer

两种同步场景

  • 不需要采样每个值(允许漏采样),但是需要采样准确。(如 FIFO )
  • CDC 信号必须被正确地接收,然后 CDC 信号才能变化。

2 个触发器的同步器

  • 第一级触发器将异步输入信号采样到新的时钟域,并等待一个时钟周期,使第一级输出信号上的亚稳态衰减。
  • 第二级触发器采样,得到稳定有效的信号。
  • 对于更高速的设计,亚稳态经过一个时钟周期仍然无法恢复,需要增加触发器数量,在后续几级内应恢复正常。
image-20230712104308950

同步器的 MTBF

  • 理论上,当第二级触发器采样时,第一级触发器输出可能仍处于亚稳态,导致第二级输出信号仍为亚稳态。
  • MTBF 表示发生潜在故障之间的间隔时间。
  • MTBF 随时钟频率和数据变化频率增加而减少,即故障发生的频率更高。
image-20230712103600309

问题:在接收时钟域同步而不在发送时钟域同步?

将 CDC 信号在接收时钟域同步,是否就不需要在发送时钟域同步寄存?

  • 答案是否定的。这会导致更容易采样到变化中的信号,导致亚稳态。
image-20230712110632012

快/慢时钟域之间的信号传输

慢时钟 -> 快时钟

若快时钟的频率至少是慢时钟的 1.5 倍,则信号一定会被采样 1-2 次,不存在漏采样的问题。

快数据变化频率 -> 慢时钟域

  • 来自发送时钟域的信号在被采样之前可能会变化两次,或者可能太接近较慢时钟域的采样边缘。
  • 若不允许漏采样:
    • 开环方法:不需要 acknowledge 信号
    • 闭环方法:需要接收时钟域的 acknowledge 信号

三个边沿要求

  • 对于 2 触发器同步器,CDC 信号保持稳定的时间至少是接收时钟域的 3 个时钟沿。(CDC 信号必须宽于接收域时钟的周期宽度的1-1/2倍)

问题

1 传输窄脉冲

当发送时钟域频率高于接收时钟域,且 CDC 信号脉宽仅为发送时钟域的一个周期:

  • 可能漏采样。
image-20230713164052708

2 采样宽脉冲

当发送的脉冲宽度稍大于接收时钟周期:

  • 可能脉冲上升沿和下降沿与接收时钟边沿太接近,不满足第一个时钟沿的建立时间、第二个时钟沿的保持时间,导致不能形成预期的输出。
image-20230713164752423

解决方法

开环法

在超过采样时钟周期的一段时间内断言 CDC 信号,最小脉冲周期是采样时钟周期的 1.5 倍。

  • 优点:不需要 acknowledge 信号,快。
  • 缺点:设计要求变化时,需要重新分析。可用 SystemVerilog 断言检测输入脉冲是否未能超过“三个边沿”设计要求。
image-20230713172325392

闭环法

将使能控制信号同步到接收时钟周期,再将确认信号同步回发送时钟周期。未收到确认信号之前,发送信号不能改变。

  • 优点:安全。
  • 缺点:在允许控制信号改变之前,在两个方向上同步信号可能导致相当大的延时。
image-20230713172941684

多 bit CDC 信号传输

发送时钟域同步输出的多个信号会存在数据变化偏差(skew),可能导致接收时钟域不能同时采样到正确信号。

解决方法

  • 多位信号整合
  • 多周期路径
  • 用格雷码传输

多位信号整合

同时传递两个控制信号

两个控制信号存在小偏差,导致在接收时钟域的不同时钟沿被采样。

解决方法

en load 合并成 lden 信号。

image-20230714085740888

两个相移控制信号

接收时钟沿可能恰好在两个相移控制信号之间,导致在接收时钟域的使能控制信号链中形成单周期间隙。

image-20230714085939523

解决方法

合并控制信号,在接收时钟域内生成第二相移流水线使能信号。

image-20230714090427108

当必须要传输多 bit CDC 信号

1 多周期路径 MCP

发送不同步的数据同步的控制信号

  • 数据信号异步发送并保持稳定,在目标寄存器的输入上建立。
  • 控制信号翻转,经过两个周期的同步,再通过一个脉冲发生器,产生 1 个周期的控制脉冲。

优点:

  • 不需要计算发送信号最低要求的脉宽。
  • 控制信号只需要翻转,不需要返回初始值。
image-20230714101743531 image-20230714104222263 image-20230714102953630

1 带反馈的 MCP

确认反馈信号 b_ack 生成确认脉冲 aackaack 用作小型 READY-BUSY、1 状态 FSM 的输入,该模块生成就绪信号 aready 以指示现在可以安全地再次更改 adatain 数据和 asend 控制信号。

image-20230714111049773

2 带 acknowledge 反馈的 MCP

接收时钟域有一个 WAIT-READY、1 状态 FSM,当数据寄存器的输入上的数据有效时,它会向接收逻辑发送有效信号 bvalid 。在接收逻辑通过断言 bload 信号确认应加载数据之前,不会实际加载数据。在数据加载之前,不会向发送时钟域提供反馈。加载后才会将 b_ack 信号发送回。

image-20230714111018035

2 FIFO

计数器

对于计数器而言,跨时钟域传输时,通常不需要采样计数的每一个值(允许漏采样)。

格雷码 -> 二进制码
  • 原理:
image-20230714113840300
  • 简单赋值:
image-20230714113437356
  • for 循环:无法编译
image-20230714113548321
  • for 循环:可以编译
image-20230714114043250 image-20230714114123315
二进制码 -> 格雷码
  • 原理:
image-20230714114354144
  • 右移异或:
image-20230714114335407
二进制计数器

二进制计数器在计数时会发生多位同时变化,可能由于数据偏差导致错误采样。

格雷码计数器

格雷码每次计数仅有一位发生变化,消除了多 bit CDC 问题。

#1
image-20230714114610999 image-20230714114634272
#2
image-20230714114808238 image-20230714114822855

使用 2 个寄存器的 1 位深异步 FIFO

  • 计数器:1 位深的格雷码/二进制码计数器只不过是一个翻转寄存器。
  • 空/满标志:用翻转的 empty/full 表示 rrdy/wrdy 。
  • 写入 1 个数据/控制信号后,FIFO 变满。此时 wptr 指向 RAM 的第二个地址,即 wrdy 有效后 wptr 已经指向可以写的地址;读端也是一样。
  • 使用这种方法,我们能够从发送 MCP 中删除一个时钟周期,并从确认反馈路径中删除另一个时钟周期。(?)
image-20230714144447097

命名约定和设计分区

命名约定

  • 对于时钟信号及由其产生的信号,使用前缀字符来标识信号所处的时钟域。

设计分区

  • 每个模块仅允许一个时钟。
  • 设计时,将各模块划分为单时钟模块,便于 STA 分析。
  • 使用同步器模块进行跨时钟域信号传输。

静态时序分析 STA