关于异步复位如何在复位边缘上工作的问题

问题描述 投票:0回答:1

我正在从'asic-world'看一些Verilog的东西,并对异步复位有疑问。当重置处于正边缘时,不太确定它是如何工作的。如果仅考虑复位的上升沿,则下面的Verilog代码检查复位是否等于1进行复位。如果reset为1,则输出重置为ZERO。但由于它发生在复位的上升沿,复位处于亚稳态,既不是0也不是1.因此,在复位的上升沿检查复位值对我来说并没有意义。有人可以解释一下吗?

来自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
verilog reset digital register-transfer-level
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.