时序设计中的“打拍”

“打拍”:在数字系统和时序设计中,打拍(Double Flopping / Two-Stage Registering)是指通过两个级联的寄存器(flip-flops)将输入信号同步到系统时钟域内的过程,常用于解决跨时钟域信号的亚稳态问题。

为什么要打拍?

① 防止亚稳态:当信号从一个时钟域传输到另一个时钟域时,信号的变化可能与接收时钟的边沿非常接近,导致接收寄存器进入亚稳态(亚稳态可能导致不可预测的行为和系统错误);

② 同步异步信号:在一些情况下,外部信号(如按钮输入或外部设备信号)是异步的,需要将其同步到系统时钟域内才能安全地使用;

③ 提高稳定性:通过增加寄存器级数,信号在跨越时钟域时有更多的时间稳定下来,降低亚稳态发生的概率。

“打一拍”和“打两拍”

打一拍”适用于:

① 低速信号:输入信号变化速率较低,不易引起亚稳态;

② 已知稳定的异步信号:信号已在其他电路中经过处理,稳定性较高;

③ 无亚稳态风险:系统设计能够容忍一定的亚稳态风险。

//打一拍:单个D触发器(FF)实现
module single_flop_sync (
    input wire  clk,
    input wire  rst_n,
    input wire  async_in,   //异步输入信号
    output reg  sync_out    //同步输出信号 
);

always @(posedge clk or negedge rst) 
begin
    if(!rst_n)
    begin
        sync_out <= 0;
    end
    else
    begin
        sync_out <= async_in;
    end
end
    
endmodule

打两拍”适用于:

① 高速信号:输入信号变化速率较高,容易引起亚稳态;

② 跨时钟域信号:信号从一个时钟域传输到另一个时钟域,存在较大的亚稳态风险;

③ 关键控制信号:系统中非常重要的信号,需要确保绝对稳定性。

//打两拍:两个级联的D触发器实现
module double_flop_sync (
    input wire  clk,
    input wire  rst_n,
    input wire  async_in,
    output reg  sync_out
);

reg sync_stage1;

always @(posedge clk or negedge rst_n) 
begin
    if(!rst_n)
    begin
        sync_stage1 <= 0;
        sync_out <= 0;
    end
    else
    begin
        sync_stage1 <= async_in;
        sync_out <= sync_stage1;
    end
end

endmodule

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值