关于异步复位同步释放

228 阅读1分钟

关于异步复位同步释放

一 概念:

异步置位和复位与时钟无关,可以解释为不需要等到时钟沿到来,也能进行置位和复位。
事件控制语法:
@(<沿关键词 时钟信号> or<沿关键词 复位信号> or <沿关键词 置位信号> )


同步置位和复位是指只有在时钟的有效跳变沿时刻置位和复位。
事件控制语法:
1.正沿触发:
@(posedge clk)
2.负沿触发:
@(negedge clk)


二.
异步:

always @(posedge clk or negedge rst_n )

          if(!rst_n)

在这里插入图片描述
这种方式占用的逻辑资源较小,但是容易产生竞争


同步:always @(posege clk or posedge rst_n)

            If(!rst_n)

在这里插入图片描述
这种方式占用的逻辑资源较多,但是不容易产生竞争

三:采用波形图进行原理解释

在这里插入图片描述
如图第一黄色圆圈:与时钟无关;标记为异步复位效果,只要有复位信号就进行复位。
第二个黄色圆圈:同步释放的效果,当复位按键释放之后,复位信号不是立即消失,而是要等到时钟上升沿到来时才进行复位。
以上为异步复位同步释放,好处:防止复位信号撤除时产生亚稳态事件。


module Sys_Rst(
    input       clk,
    input       rst,
    output      sys_rst
);

reg     rst_r0;
reg     rst_r1;

always @(posedge clk or posedge rst)begin  //异步复位与时钟无关,则无需等时钟沿的到来
    if(rst)begin          //复位低电平有效
        rst_r0 <= 1'b1;
        rst_r1 <= 1'b1;
    end
    else begin      //rst=0时,不复位:释放         
        rst_r0 <= 1'b0;     //与时钟同步的逻辑,为了实现同步释放
        rst_r1 <= rst_r0;
    end
end

assign  sys_rst = rst_r1;

endmodule