优点
缺点
优点
缺点
将控制信号或数据从一个时钟域同步到另一个时钟域
跨时钟域时,原本满足触发器建立和保持条件的信号在新的时钟域中变为异步,可能违背建立和保持条件。在新时钟域中直接对信号采样时,可能采样到非0非1的不稳定状态,使得电路出现错误,因此需要对跨时钟域信号进行同步处理
触发器采样失败的时间间隔,可以用来描述触发器进入亚稳态的时间,公式描述如下
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
电路工作频率越高,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.57∗190years
所以当第一次采到上升沿时,会出现亚稳态,但第二次采样亚稳态时,亚稳态出现的概率基本可以忽略不计
当异步输入信号的宽度 <= 1个新时钟域时钟周期的时候,可能存在采样不到异步输入信号的情况,一般异步输入信号的宽度 >= 1.5个新时钟域时钟周期的时候,新时钟域可以对其进行至少一次采样。
而对于同步后的信号,因为边沿对齐,不存在亚稳态的情况,1个时钟周期的信号至少可以被采样一次
慢 -> 快:输入的异步信号宽度大于1个新时钟域周期,保证其在新时钟域至少被采样一次
特点
异步输入信号的电平间隔是否要大于1个新时钟域周期?
我认为黄框中CLKB并没有采样到稳定的0,所以黄色箭头位置的亚稳态再次取样时应该是1,但如果和第一个电平一样,虽然没有采样到稳定的0,但再次采样会为0,那么黄色箭头的地方就是0,时间间隔的限制就不存在了,如下图所示
从波形上看,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
将异步信号展宽到 > 1个新时钟域时钟周期,一般展宽到1.5-2个新时钟域时钟周期
新时钟域接收到信号后反馈给原时钟域
如果用同样的方法对OUT1的触发器进行复位,就可以得到一个周期长的OUT
缺陷
详见后面
此时电平间隔限制与上面的相反,如果亚稳态被采样成1时,是不存在电平间隔限制的,反之,采样后的两个pulse连在了一起,成了一个长pulse,最稳妥的做法还是令*level interval of OUT0 > 1 cycle of CLKB*,给一个缓冲
此时电平间隔限制与上面的相同,如果亚稳态被采样成1时,是不存在脉冲间隔限制的,反之,采样后的两个pulse连在了一起,成了一个长pulse,最稳妥的做法还是令*level interval of OUT0 > 1 cycle of CLKB*,给一个缓冲,上图只给了亚稳态被采样成0时的情况,被采样为1时和右下角的图相同,会区分出两个pulse
《Crossing the abyss: asynchronous signals in a synchronous world》写的很详细了
多bit信号,各个bit间可能有时延或者skew,造成数据同步错误,可用异步双口ram或者fifo进行同步。
比如写的频率是80MHz,读的频率是50MHz,突发长度为120,在突发传输过程中,数据都是连续读写的,用一个depth 为45的fifo,可以满足在低速下的异步数据同步。参见FIFO深度计算
高速时可用格雷码,格雷码每次只有1bit翻转,将写地址转换成格雷码,打两拍,在读时钟域解码,相当于单bit。
在线绘图
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