数字IC手撕代码——同步复位,异步释放

本文介绍了如何使用Verilog语言设计一个异步复位、同步释放的电路,以防止D触发器在rst_n信号快速变化时产生亚稳态。通过异步复位确保0状态的稳定,同步释放则在rst_n为1时延迟两拍,确保与clk上升沿对齐,从而避免不确定的输出状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用verilog完成异步复位,同步释放电路的设计

原理

假如一个D类触发器的复位值为0,那么当rst_n=0的信号到来时,D触发器发生复位,当rst_n=1信号到来时,D触发器正常工作。

当rst_n信号重新回到1的时间和clk上升沿到来的信号非常接近时,D触发器可能会输出亚稳态,造成信号无法识别是1还是0。

解决办法

异步复位:对为0的复位信号不做处理,让其正常异步复位

同步释放:对为1的复位信号打两拍,使其拉高时对齐时钟边沿,避免亚稳态

时序图

代码

module rst_asy(
    input clk,
    input rst_n,
    output rst_out
);

    reg rst_r1;

    always@(posedge clk or negedge rst_n) begin // 异步复位
        if(rst_n == 1'b1) begin
            rst_out <= 1'b0;
            rst_r1  <= 1'b0;
        end
        else begin
            rst_r1  <= rst_n;  // 时序电路非阻塞赋值,当rst_n拉高时,先将rst_r1拉高
            rst_out <= rst_r1; // 等到下一拍采样时,rst_r1为1,再将rst_out拉高,实现延迟两拍
        end
    end

endmodule

当rst_n拉高之后,rst_out等了被寄存器存了两次才输出,避免亚稳态,生成电路如图

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值