同步复位与异步复位

简介

在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个触发器都需要进行复位。复位的基本目的是使器件进入到可以稳定工作的确定状态,这避免了器件在上电后进入到随机状态导致跑飞了。在实际设计过程中,设计者必须选择最适合于设计本身的复位方式;

同步复位

同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。同步复位RTL代码:

综合后的RTL图如下:

异步复位

异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。异步复位RTL代码:

综合后的RTL图如下:

对比两者综合后的RTL视图,发现同步复位会多使用一些逻辑单元,这是因为一般的触发器都带有异步复位端;

同步复位与异步复位的优缺点

同步复位的优点

  • 一般能够确保电路是百分之百同步的
  • 确保复位只发生在有效时钟沿,可以作为过滤掉毛刺的手段

同步复位的缺点

  • 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素;
  • 由于大多数的厂商目标库内的触发器都只有异步复位端口,采用同步复位的话,就会耗费较多的逻辑资源

异步复位优点

  • 异步复位信号识别方便,而且可以很方便的使用全局复位
  • 由于大多数的厂商目标库内的触发器都有异步复位端口,可以节约逻辑资源

异步复位缺点

  • 复位信号容易受到毛刺的影响
  • 复位结束时刻恰在亚稳态窗口内时,无法决定现在的复位状态是1还是0,会导致亚稳态

异步复位同步释放 

使用异步复位同步释放就可以消除上述缺点。所谓异步复位,同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。异步复位同步释放的原理图和代码如下:

也就是将复位信号经过两级同步器与输入信号同步,代码如下:

//Synchronized Asynchronous Reset
module sync_async_reset (
        input    clock,
        input    reset_n,
        input    data_a,
        input    data_b,
        output   out_a,
        output   out_b);
        
        reg     reg1, reg2;
        reg     reg3, reg4;
        
        always @ (posedge clock, negedge reset_n) begin
            if (!reset_n) begin
                reg3 <= 1'b0;
                reg4 <= 1'b0;
            end
            else begin
                reg3 <= 1'b1;
                reg4 <= reg3;
            end
        end
        wire rst_n;
        assign  rst_n = reg4;//同步复位信号
        always @ (posedge clock, negedge rst_n) begin
            if (!rst_n) begin
                reg1 <= 1'b0;
                reg2 <= 1'b0;
            end
            else begin
                reg1 <= data_a;
                reg2 <= data_b;
            end
        end
        assign  out_a = reg1;//输出
        assign  out_b = reg2;
        
endmodule  // sync_async_reset

异步复位:显而易见,rst_n异步复位后,rst_n将拉低,即实现异步复位;

同步释放:这个是关键,看如何实现同步释放,即当复位信号rst_n撤除时,由于双缓冲电路的作用,rst_n复位信号不会随着rst_n的撤除而撤除;

假设rst_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件。但是加上此电路以后,假设第一级D触发器clk上升沿时rst_n正好撤除,则D1触发器输出高电平“1”,此时第二级触发器也会更新输出,但是输出值为前一级触发器次clk来之前时的Q1输出状态。显然Q1之前为低电平,顾第二级触发器输出保持复位低电平,直到下一个clk来之后,才随着变为高电平,即同步释放;

  • 恢复和去除时间(Recovery and Removal Time)

对于一个异步复位寄存器来说,同样异步复位信号同样需要和时钟满足recovery time和removal time 才能有效进行复位操作和复位释放操作,防止输出亚稳态

recovery time:恢复时间

撤销复位时,恢复到非复位状态的电平必须在时钟有效沿来临之的一段时间到来并保持,才能保证时钟能有效恢复到非复位状态,此段时间为recovery time,类似于同步时钟的setup time,也就是说在时钟上升沿到来之前rst_n必须保持为1的时间;

如图所示,rst_n为0表示复位,clk上升沿触发,rst_n从0到1的上升沿与时钟上升沿必须不小于recovery time才能保证寄存器恢复到正常状态;

removal time :去除时间

 复位时,在时钟有效沿来临之后复位信号还需要保持为0的时间为去除时间removal time(去除时间),类似同步时钟hold time

 如图所示,rst_n为0表示复位有效,clk为上升沿触发,rst_n保持为0经过clk上升沿后仍需要保持一段时间,才能保证寄存器有效复位,防止亚稳态;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值