1. 同步策略

1.1. 同步

同步即确定事件的顺序,确保信号在不同时钟域或异步环境中可靠传输。

同步可以用于:

  • 使用时钟对异步输入进行采样
  • 跨时钟域处理。使用不同时钟对同步信号进行采样,若两时钟均为周期性信号, 则此问题较易解决;
  • 异步信号仲裁。共享资源的请求线路。

1.2. 同步失败

同步失败,或者说同步器进入亚稳态,指随着两个输入信号之间的时间差 减少,越来越难以判断哪个信号先来。由此进入了亚稳态。

当同步失败的时候就需要进行仲裁。通过仲裁结果确定事件顺序。

1.2.1. NAND 仲裁器

NAND SR 锁存器,其具有以下特性:

  • 如果 A 比 B 早到很多, A 优先会变低并锁定 B;
  • 如果 B 比 A 早到很多, B 优先会变低并锁定 A;

1.2.1.1. 动态分析

如果 AB 几乎同时升高,初始输出电压的差异与时间差成正比。

就是 AB 信号升高的时间差; 为一个比例常数。

当 AB 信号继续升高的时候,初始电压 成指数级放大,

为时间常数,表征电路对电压差的放大速度。

这样就能得到 NAND 仲裁器的动态稳定时间

1.2.2. 暴力 (等待) 同步器

使用 clk 信号对异步信号进行采样,通过触发器 FF1 后,信号可能进入亚稳态,在时间 后,亚稳态才会衰减。

如果 FF2 触发的时候,AW 仍然在亚稳态,这样的情况发生的概率有多大?

1.3. 故障概率

1.3.1. 进入亚稳态的概率

如果输入信号在触发器的孔径时间 aperture time (ta) 期间转换,则 FF1 可能会进入亚稳态。给定转换处于孔径时间内的概率, 即孔径时间所占的时间比例。

是时钟周期时间; 为工作频率; 为孔径时间。

1.3.2. 停留在亚稳态的概率

如果初始电压差太小,在等待期间无法呈指数放大,则仍处于亚稳态。以该电压开始的概率是总电压范围中 “ 过小 ” 部分所占的比例。

为一个等待时间; 为再生时间;

1.3.3. 故障概率与失败频率✨

错误概率为,

失败率 failure rate为,

等待同步器失败率

为输入信号频率; 为时钟频率; 为孔径时间; 为时钟周期; 为再生时间(时间常数)。

指向原始笔记的链接

同步失败之间的平均时间(MTBF)为

孔径时间

Flip-Flop 的孔径时间,

即孔径时间是 Flip-Flop 的建立时间和保持时间的和。

等待时间

如果继续增加级数,相当于增加了 ,即给亚稳态增加了衰减时间。

  • 第一级:决定系统进入亚稳态的初始概率
  • 后续级:通过延长衰减时间指数级降低失败概率。 所以总的等待时间

为级联触发器总级数; 为时钟周期; 为 FF 建立时间; 为触发器时钟到输出延迟。

1.4. 完成检测

无法限定同步器稳定所需的时间,然而, 确实有可能检测到同步器何时稳定下来。这只有在后续逻辑能够利用这个异步完成信号时才有用。

1.5. 同步层次结构✨

同步的难度取决于信号事件与时钟事件之间的关系。

  • 同步。信号事件总是发生在时钟禁止区域之外,例如相同时钟。
  • 等时同步。信号事件以相对于时钟固定但未知的相位发生。例如同频时钟;
  • 准同步。信号事件的相位随时间缓慢变化,例如略微不同的频率时钟;
  • 周期性。信号事件是周期性的,包括等时和准同步,信号同步至一些周期性时钟
  • 异步。信号事件随时可能发生。

同步层次摘要

类型频率相位
同步 Synchronous相同相同
等时同步 Mesochronous相同持续
准同步 Plesiochronous稍微不同缓慢变化
周期同步 Periodic不同周期变化
异步 Asynchronous随机任意的

2. 同步器设计

2.1. 等时同步器

信号与时钟之间的相位差恒定,典型例子是分发主时钟且存在一定时钟偏移的系统。由此只需要同步一次即可。在复位期间检查相位,如果正常, 则直接对信号持续采样;如果异常, 则在延迟后对信号持续采样。此相位检查是我们唯一采样的异步事件,可以很长时间才采样一次。

同步器之间的比较:

  • 同步延迟(除了所需的 );
  • 故障率。

2.1.1. 暴力同步器

同步延迟: 故障率:

等待同步器失败率

为输入信号频率; 为时钟频率; 为孔径时间; 为时钟周期; 为再生时间(时间常数)。

指向原始笔记的链接

2.1.2. 延迟线同步器

对于准时同步和准同步信号,根据需要来延迟信号, 以确保同步器时钟外的转换,我们如何设置延迟线? 这个同步器的延迟是多少?

2.1.3. 双寄存器同步器

延迟线同步器成本高昂, 我们需要为每个输入配备一条延迟线;我们延迟时钟而非数据,使用正常和延迟时钟对数据进行采样,选取 “ 安全 ” 输出。可以通过双寄存器解决。

要判断信号是否不安全, 观察它是否在禁止区域内发生变化,在禁区前后采样并查看结果是否不同。这些样本可能导致触发器进入亚稳态,需要等待此状态至衰减。如果是等时同步, 我们可以等待很久很久了, 因为我们只需要做这一次。

2.1.4. FIFO 同步器

可以使用先进先出 (FIFO) 缓冲将同步信息移出数据路径。在一个时钟域 (xclk) 中将数据同步到 FIFO;在另一个时钟域 (rclk) 中将数据从 FIFO 复用输出。同步信息移到了哪里?如何初始化指针?

2.2. 准同步同步器

采用准同步时序时, 一个时钟比另一个时钟运行得稍快。相同的基本同步器类型适用,例如暴力、延迟线、双寄存器、先进先出 ( FIFO )。准同步需要定期重新同步,并且需要流量控制。

2.2.1. 准同步 FIFO 同步器

使用发送时钟 (xclk) 插入数据;使用接收时钟 (rclk) 移除数据;通过将发送指针 (xp) 同步到接收时钟来定期更新接收指针 (rp)

  • 我们如何知道何时执行此操作?
  • 如果在更新接收指针 (rp) 时,rp 的值增加了2 或 0,我们该怎么办?

2.2.2. 时钟上的相位滑移检测指针

在跨时钟域同步(尤其是准同步系统,即Plesiochronous Systems)中,相位滑移(Phase Slip) 是指由于发送端和接收端时钟频率的微小差异(如±200ppm),导致数据指针(如FIFO的读写指针)逐渐偏移,最终发生跳变(Skip)或重复(Duplicate)的现象。

相位滑移检测指针是用于动态监控和修正这种偏移的机制,确保数据在跨时钟域传输时不丢失或重复。

(1) 指针的时钟比喻

  • 将发送指针(xpxp)和接收指针(rp)视为表盘上的两根指针:
    • xp:以发送时钟 xclk 移动(如“分针”)。
    • rp:以接收时钟 rclk 移动(如“时针”)。
  • 相位滑移:两根指针的相对位置随时间缓慢变化(因频率差异)。 (2) 检测方法
  • 动态相位窗口:
    接收端会定义一个安全相位窗口(如 rp与 xp 的允许最大偏移角度)。
    • 当 xp 和 rp 的相位差超出窗口时,触发滑移检测。
  • 指针更新策略:
    • 正常情况:rp 每次递增1(读取一个数据)。
    • 滑移时:
      • 频率较快:rp 可能跳过1个位置(如从2直接到4)。
      • 频率较慢:rp 可能重复1个位置(如两次读取位置3)。

2.3. 周期同步

发送和接收时钟是周期性的, 但频率不相关。在这种情况下,单次同步不会永远持续 (如同步的) 甚至不会维持很长时间 (如准同步的)

2.3.1. 周期性同步器

如果输入信号与某个周期性时钟同步, 我们就能预测其事件允许发生的时间任意远的未来。因此, 我们可以提前确定信号在给定时钟周期内采样是否安全,如果是的话, 我们只需对其进行采样;如果不是, 我们延迟信号 (或时钟) 以确保安全。

这使我们能够将等待时间 tw 移出关键路径之外。我们可以将其做得很长而不增加延迟

2.3.2. 时钟预测器电路

假设我们想知道输入 x 在未来的一个 rclk 周期 ( trcy ) 后的值,这只是 txcy– trcy 的一个相位偏移。

利用简单的定时循环很容易产生这种相移。注意, 我们同样可以轻松预测 xclk 几个 rclk 周期后的情况。

3. 异步器设计

大多数情况下, 我们仅将事件与时钟同步 —— 不论是在时钟 i 还是 i +1 上处理该事件都无关紧要。我们可以通过异步处理事件来避免这种不必要的同步,事件的到来会触发它的处理。

3.1. 异步协议

由于缺少全局时钟,握手协议用于同步:

  • 2 相
    • 边缘敏感
    • 捆绑数据编码
  • 4 相(归零)
    • 电平敏感
    • 双轨编码

3.2. 异步数据编码

由于缺乏全局时钟, 异步数据必须附带时序信息表示。

  • 捆绑数据 (单通道) 编码, 1 根线代表 1 位信息;
  • 双轨编码,用两根导线表示 1 位信息;