数字IC常见面试题:寄存器两级同步
一.什么是亚稳态?亚稳态从哪而来?
要先看明确时序违例的定义:时序违例是指数字电路设计中因信号未能满足时序要求而引发的错误,主要分为建立时间违例(Setup Time Violation) 和 保持时间违例(Hold Time Violation) 两类。
具体来说:
建立时间:在时钟有效边沿到来前,输入数据需保持稳定的最短时间。若组合逻辑处理时间过长,导致数据到达触发器的时刻晚于建立时间要求,则触发建立时间违例。
保持时间:在时钟有效边沿到来后,输入数据需保持稳定的最短时间。若组合逻辑处理时间过短或时钟延迟过大,导致数据变化过早,则触发保持时间违例。
图1:Setup Time and Hold Time Violations(引用自参考文献[1])
如图1所示,在触发器中,其实建立时间和保持时间就是要保持数据在时钟边沿的前后都要稳定一段时间。需要建立时间根本原因是:触发器的内部电路需要足够时间将输入数据传输到锁存节点(这句话了解即可)。需要保持时间的根本原因是:触发器内部反馈路径需要有足够时间完成状态切换(这句话也是了解即可)。
亚稳态:上面解释了触发器的建立时间和保持时间,那么违反了建立时间和保持时间(即违例)之后,触发器会怎么样?触发器会在时序违例后进入的中间状态,表现为输出在逻辑0和1之间的中间电平、振荡或毛刺,且无法预测稳定时间和最终结果。
亚稳态的原因 为什么会有时序违例的情况?
首先,异步信号交互的原因:异步信号在同步之前,是绝对有可能产生时序违例的,因为两个异步时钟的相位不一样的情况下,从一个时钟域传过来的信号在另外一个时钟域是未知的,有可能在时钟上升沿前后的任何位置。
其次,物理因素制造工艺、温度、电压波动及电磁干扰等因素也会影响亚稳态发生的概率[2]。
亚稳态的后果首先是有可能引起逻辑误判,即导致功能错误。也可能导致级联传播,也就是我们仿真过程中看到的X态传播。
二. 寄存器两级同步
寄存器两级同步是什么?
两级同步的原理及结构图
寄存器两级同步是解决跨时钟域单比特信号亚稳态问题的有效方法。其核心原理是通过两级串联的触发器(寄存器)对异步信号进行同步化处理,从而降低亚稳态传播的概率[3]。
图2 寄存器两级同步
如图2所示,clk1时钟域信传播到clk2时钟域后,从clk2时钟域的两级寄存器后面输出。这就是寄存器两级同步
verilog代码示例(前仿&后仿)
首先是行为级仿真的代码:
module two_stage_sync (
input clk_dst, // 目标时钟域时钟
input rst_n, // 异步复位信号(低有效)
input signal_src, // 源时钟域信号
output signal_synced // 同步后信号
);
reg dff1, dff2; // 两级寄存器
always @(posedge clk_dst or negedge rst_n) begin
if (!rst_n) begin
dff1 <= 1'b0;
dff2 <= 1'b0;
end else begin
dff1 <= signal_src; // 第一级同步
dff2 <= dff1; // 第二级同步
end
end
assign signal_synced = dff2;
endmodule
其次是门级仿真中的代码:
// 门级网表代码(由综合工具生成)
module two_stage_sync_gate (
input clk_dst,
input rst_n,
input signal_src,
output signal_synced
);
// 实例化标准单元库中的触发器
DFF dff1 (.Q(d1), .D(signal_src), .CLK(clk_dst), .RSTN(rst_n)); // 第一级同步
DFF dff2 (.Q(signal_synced), .D(d1), .CLK(clk_dst), .RSTN(rst_n)); // 第二级同步
endmodule
寄存器两级同步为什么能消除亚稳态?
第一级触发器的作用
首先我们分析一下,时序违例的输入信号经过第一级之后,第一级寄存器内部大概率会出现亚稳态(中间电平、振荡或毛刺),亚稳态不会无限持续,其最终会通过寄存器的内部电路特性(如晶体管延迟、寄生电容等)随机收敛到0或1。这一收敛过程的时间称为 恢复时间(Resolution Time)。根据工艺和设计,恢复时间通常远小于一个时钟周期。
所以第一级触发器的作用是:
捕获亚稳态:第一级触发器直接接收异步信号,可能进入亚稳态。
提供恢复时间:第一级触发器在第一个时钟周期内有一定概率从亚稳态恢复为稳定状态(0或1),恢复时间由触发器自身特性决定。
第二级触发器的作用
隔离亚稳态:第二级触发器在第一级输出稳定后(下一个时钟周期)采样信号。此时第一级输出已大概率稳定,第二级输出亚稳态的概率显著降低。
概率衰减:若第一级未恢复,第二级仍有概率进入亚稳态,但两级串联后亚稳态传播到后续电路的概率为两级单独概率的乘积(指数级降低)
寄存器两级同步的应用场景是什么?
单bit信号的跨时钟域(CDC)
异步信号在不同时钟域间传递时,必须使用同步器。
复位信号同步
异步复位信号需同步后释放,避免复位撤消时的亚稳态。
参考文献
[1].Mentor Graphics Corporation. (2019). Tessent Scan and ATPG User’s Manual (atpg_gd March 2019). Wilsonville, OR: Mentor Graphics Corporation.
[2].Icer-newer. Metastability 亚稳态问题[EB/OL]. 博客园, 2023-02-13[2024-06-20]. https://www.cnblogs.com/Icer-newer/p/17118414.html
[3].sunday_893.SOC芯片门级仿真失败的原因分析及其解决办法[EB/OL]. CSDN博客, 2020-03-05[2025-03-05]. https://blog.csdn.net/sunday_893/article/details/104711419