首页 > 解决方案 > 关于异步复位如何在复位边缘工作的问题

问题描述

我正在查看“asic-world”中的一些 Verilog 内容,并且对异步重置有疑问。不太确定当复位处于上升沿时它是如何工作的。如果只考虑reset的上升沿,下面的Verilog代码检查reset是否等于1进行reset。如果复位为 1,则输出复位为零。但是由于它发生在reset的上升沿,reset处于亚稳态,既不是0也不是1。所以,在reset的上升沿检查reset的值对我来说并没有什么意义。谁能解释一下?

来自 Asic-world 的 Verilog 代码:

module  asyn_reset(clk,reset,a,c);
    input clk;
    input reset;
    input a;
    output c;    

    wire clk;
    wire reset;   
    wire a;    
    reg c;  

    always @ (posedge clk or posedge reset)
    if ( reset == 1'b1) begin
        c <= 0;
    end else begin
        c <= a;
    end
    endmodule

标签: verilogresetdigitalregister-transfer-level

解决方案


异步复位意味着只要复位信号处于活动状态“与时钟无关”,您的电路就应该复位。自然,这应该包含在敏感度列表中,因为这种语法使其被视为异步重置。请注意,将触发器带入默认(复位)状态不需要活动时钟,进入复位状态时您不应担心任何亚稳态问题。这里需要始终处理的第一个块(检查重置输入状态),您需要遵守这种编码风格。最重要的一点是在Reset Assertion期间可以忽略时钟和复位之间的相对时序。重置版本必须与时钟同步,因为它确实会导致亚稳态问题。有一些已知的电路可用于异步复位释放过程(这些电路有点具体,但在 ASIC 世界中广泛使用,因此您应该能够通过谷歌浏览器找到参考资料)。


推荐阅读