006 跨时钟域(Clock Domain Crossing)

006 跨时钟域(Clock Domain Crossing)_第1张图片

组合电路、时序电路

组合电路

  • 任意时刻的输出仅仅取决于该时刻的输入

时序电路

  • 任意时刻的输出不仅取决于当前时刻的输入,而且还取决于数字电路原来的状态
同步时序电路
  • 利用统一时钟脉冲使其子系统同步运作,在时钟有效沿触发动作

优点

  • 设计简单

缺点

  • 时钟信号必须要分布到电路上的每一个触发器,功耗高
  • 最高频率由最慢路径(关键路径)决定,限制了工作频率
异步时序电路
  • 电路中除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件
  • 电路中没有统一的时钟
  • 电路状态的改变由外部输入的变化直接引起

优点

  • 无时钟歪斜抖动(skew,jitter)问题
  • 平均能耗低,可复用性好

缺点

  • 无统一时钟,状态变化易受影响,抗干扰能力差
  • 容易出现冒险竞争

建立时间(setup time)、保持时间(hold time)

在这里插入图片描述

  • 建立时间(setup time):触发器有效沿到来之前,数据需要保持稳定的最小时间
  • 保持时间(hold time):触发器有效沿到来之后,数据需要保持稳定的最小时间

跨时钟域中的亚稳态(metastable)问题

跨时钟域

将控制信号或数据从一个时钟域同步到另一个时钟域

亚稳态(Metastable)

跨时钟域时,原本满足触发器建立和保持条件的信号在新的时钟域中变为异步,可能违背建立和保持条件。在新时钟域中直接对信号采样时,可能采样到非0非1的不稳定状态,使得电路出现错误,因此需要对跨时钟域信号进行同步处理
006 跨时钟域(Clock Domain Crossing)_第2张图片
006 跨时钟域(Clock Domain Crossing)_第3张图片

MTBF(Mean Time Between Failures)

触发器采样失败的时间间隔,可以用来描述触发器进入亚稳态的时间,公式描述如下
M T B F = e t r / T T 0 f t n f c l o c k MTBF={e^{t_r/T} \over T_0f_{tn}f_{clock}} MTBF=T0ftnfclocketr/T

  • t r t_r tr:亚稳态分辨时间,输出保持亚稳态但不引起同步器错误的最长时间
  • T 、 T 0 T、T_0 TT0:常数,依赖于触发器的电学特性、工艺及内部设计
  • f t n f_{tn} ftn异步输入频率
  • f c l o c k f_{clock} fclock采样时钟频率

电路工作频率越高,MTBF越小,触发器采样失败的时间间隔越小,越容易发生错误。
引用参考资料中的数据:
一个触发器采样失败的MTBF
t r = 2.3 n s , T = 0.31 n s , T 0 = 9.6 a s , f t h = 100 M H z , f c l o c k = 10 M H z , M T B F = 2.01 d a y s t_r = 2.3 ns, T = 0.31 ns, T_0 = 9.6 as, f_{th}=100 MHz, f_{clock} = 10MHz, MTBF = 2.01 days tr=2.3ns,T=0.31ns,T0=9.6as,fth=100MHz,fclock=10MHz,MTBF=2.01days
信号经过两个触发器任然采样失败的MTBF
M T B F 2 = M T B F × M T B F = 9.57 ∗ 190 y e a r s MTBF_2=MTBF \times MTBF=9.57*190years MTBF2=MTBF×MTBF=9.57190years
所以当第一次采到上升沿时,会出现亚稳态,但第二次采样亚稳态时,亚稳态出现的概率基本可以忽略不计

异步信号在新时钟域中的采样

006 跨时钟域(Clock Domain Crossing)_第4张图片
当异步输入信号的宽度 <= 1个新时钟域时钟周期的时候,可能存在采样不到异步输入信号的情况,一般异步输入信号的宽度 >= 1.5个新时钟域时钟周期的时候,新时钟域可以对其进行至少一次采样。
而对于同步后的信号,因为边沿对齐,不存在亚稳态的情况,1个时钟周期的信号至少可以被采样一次

跨时钟域处理

单bit电平同步器(Level Synchronizer)(慢 -> 快)

慢 -> 快:输入的异步信号宽度大于1个新时钟域周期,保证其在新时钟域至少被采样一次
006 跨时钟域(Clock Domain Crossing)_第5张图片
006 跨时钟域(Clock Domain Crossing)_第6张图片

特点

  • 0/1 level width of OUT0 > 1 cycle of CLKB
  • level interval of OUT0 > 1 cycle of CLKB(存疑)
  • No combination login in output of CLKA and input of CLKB(因为会引入组合延迟)
  • 1 cycle of CLKB < Delay of signal after sync in CLKB <= 2 cycles of CLKB

异步输入信号的电平间隔是否要大于1个新时钟域周期?
我认为黄框中CLKB并没有采样到稳定的0,所以黄色箭头位置的亚稳态再次取样时应该是1,但如果和第一个电平一样,虽然没有采样到稳定的0,但再次采样会为0,那么黄色箭头的地方就是0,时间间隔的限制就不存在了,如下图所示
006 跨时钟域(Clock Domain Crossing)_第7张图片
从波形上看,OUT0两个1中间的0被同步过来了,但我认为这是错误的,因为,OUT0的0的level width < 1 cycle of CLKB,是不应该被同步过来的,所以我倾向于时间间隔显示是存在的,如果要同步两个level,它们之间的 电平间隔 >1 cycle of CLKB

实现

module SYNC_2P(
    output  OUT,
    
    input   CLKA,
    input   CLKB,
    input   IN
);

reg OUT0, OUT1, OUT2;

always@(posedge CLKA) begin
    OUT0 <= IN;
end

always@(posedge CLKB) begin
    {OUT2, OUT1} <= {OUT1, OUT0};
end

wire OUT = OUT2;

endmodule

单bit电平同步器(Level Synchronizer)(快 -> 慢)

展宽异步信号(开环)

将异步信号展宽到 > 1个新时钟域时钟周期,一般展宽到1.5-2个新时钟域时钟周期

反馈(闭环)

新时钟域接收到信号后反馈给原时钟域

复位反馈

006 跨时钟域(Clock Domain Crossing)_第8张图片
006 跨时钟域(Clock Domain Crossing)_第9张图片
如果用同样的方法对OUT1的触发器进行复位,就可以得到一个周期长的OUT
缺陷

  • 将信号作为时钟,会消耗额外的时钟资源
  • 信号的毛刺会导致不可预知的错误
  • 不推荐
握手

详见后面

单bit边沿检测同步器(Edge-detecting Synchronizer)

006 跨时钟域(Clock Domain Crossing)_第10张图片
在这里插入图片描述
特点

  • 0/1 level width of OUT0 > 1 cycle of CLKB
  • level interval of OUT0 > 1 cycle of CLKB(存疑)
  • No combination login in output of CLKA and input of CLKB(因为会引入组合延迟)
  • 1 cycle of CLKB < Delay of signal after sync in CLKB <= 2 cycles of CLKB

此时电平间隔限制与上面的相反,如果亚稳态被采样成1时,是不存在电平间隔限制的,反之,采样后的两个pulse连在了一起,成了一个长pulse,最稳妥的做法还是令*level interval of OUT0 > 1 cycle of CLKB*,给一个缓冲

单bit脉冲检测同步器(Pulse Synchronizer)

006 跨时钟域(Clock Domain Crossing)_第11张图片
006 跨时钟域(Clock Domain Crossing)_第12张图片
特点

  • 0/1pulse width of IN = 1 cycle of CLKA
  • pulse interval of IN > 1 cycle of CLKB(存疑)
  • No combination login in output of CLKA and input of CLKB(因为会引入组合延迟)
  • 1 cycle of CLKB < Delay of signal after sync in CLKB <= 2 cycles of CLKB

此时电平间隔限制与上面的相同,如果亚稳态被采样成1时,是不存在脉冲间隔限制的,反之,采样后的两个pulse连在了一起,成了一个长pulse,最稳妥的做法还是令*level interval of OUT0 > 1 cycle of CLKB*,给一个缓冲,上图只给了亚稳态被采样成0时的情况,被采样为1时和右下角的图相同,会区分出两个pulse

电平、边沿、脉冲对比

006 跨时钟域(Clock Domain Crossing)_第13张图片

握手(慢 <-> 快,单|多比特)

《Crossing the abyss: asynchronous signals in a synchronous world》写的很详细了

全握手(Full Hanshake)

006 跨时钟域(Clock Domain Crossing)_第14张图片
006 跨时钟域(Clock Domain Crossing)_第15张图片
握手信号要求

  • 数据在发送时钟域内稳定至少2个时钟上升沿
  • xreq的宽度超过2个时钟上升沿,否则从高速向低速时钟域传递可能无法捕获
    缺点
  • 传输单bit数据延迟比FIFO大的多
部分握手1(Partial Handshake 1)

006 跨时钟域(Clock Domain Crossing)_第16张图片

部分握手2(Partial Handshake 2)

006 跨时钟域(Clock Domain Crossing)_第17张图片

握手对比

006 跨时钟域(Clock Domain Crossing)_第18张图片

FIFO+格雷码多bit同步

多bit信号,各个bit间可能有时延或者skew,造成数据同步错误,可用异步双口ram或者fifo进行同步。
比如写的频率是80MHz,读的频率是50MHz,突发长度为120,在突发传输过程中,数据都是连续读写的,用一个depth 为45的fifo,可以满足在低速下的异步数据同步。参见FIFO深度计算
006 跨时钟域(Clock Domain Crossing)_第19张图片
高速时可用格雷码,格雷码每次只有1bit翻转,将写地址转换成格雷码,打两拍,在读时钟域解码,相当于单bit。

006 跨时钟域(Clock Domain Crossing)_第20张图片

在线绘图
Wavedrom Editor
同步时序逻辑电路
异步时序电路
FPGA之组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念
静态时序分析
Crossing the abyss: asynchronous signals in a synchronous world
Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog
Advanced Logic Design and Switching Theory: Metastability

你可能感兴趣的:(数字电路,跨时钟域,IC)