异步复位与同步释放

本文引用经典书籍《数字IC设计入门》(作者:白栎旸)中2.25节有关异步复位,同步释放的内容,博主重新总结并作记录。

异步复位与同步释放的概念

异步复位:寄存器随时可以复位。
同步释放:寄存器的复位信号从复位态回到释放状态的时机,必须与该寄存器的时钟信号保持同步。

原因

为什么不要求复位同步?

(同步的目的是避免亚稳态,难道不怕发生亚稳态时,寄存器的值不是期望的复位值?)

答案:寄存器的reset_n端为低电平时,触发器的复位晶体管一定会被触发,输出端一定会因为CMOS的强驱动置为期望的复位值,总之,寄存器的复位是通过晶体管级别的强制操作完成的,无论何时拉低reset_n都会准确进入复位状态。

为什么要求同步释放?

答案:因为若复位信号释放后出现亚稳态,寄存器的值就进入了不确定的值(正常的亚稳态现象),而且一旦发生就无法纠正。

同步释放时序要求

关注两点:
①复位信号低电平的脉宽。——Recovery检查
②解复位信号与时钟的关系。——Removel检查

参数Recovery和Removel分别规定了解复位信号传输延迟的上限和下限
同步释放的时序要求

RTL

POC(Power of reset)信号是数字电路上电时,给出的复位信号,低电平有效。
为使其在clk时钟域下满足同步释放要求的处理模块如下,该模块不仅输出满足同步释放的复位信号,同时延迟了输出信号,使电压和时钟进一步稳定。

/*
synchrnize and delay POR(Power on reset) in clk domain for synchronous release reset.
*/
module reset_n_sync
(
    input       clk     ,
    input       POR     ,
    output  reg reset_n   
);
//-------------------------------------------------------------
reg [1:0]   rstn_sync   ;
wire        rstn_pre    ;
reg [15:0]  por_cnt     ;

//-------------------------------------------------------------
always @(posedge clk or negedge POR)
begin
    if(!POR)
        rstn_sync <= 2'b00;
    else 
        rstn_sync <= {rstn_sync[0],1'b1};
end

// rstn_sync meets the requirment of synchronous release
assign  rstn_pre = rstn_sync[1];

// delay the reset before synchronous release
always @(posedge clk or negedge rstn_pre)
begin
    if(!rstn_pre)
        por_cnt <= {16{1'b0}};
    else if(por_cnt != 16'hffff)
        por_cnt <= por_cnt + 16'd1;
end

// reset_n
always @(posedge clk or negedge rstn_pre)
begin
    if(!rstn_pre)
        reset_n <= 1'b0;
    else if(por_cnt == 16'hffff)
        reset_n <= 1'b1;
    else 
        reset_n <= 1'b0;
end

endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值