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

时间:2019-04-13 19:41:49

标签: reset digital register-transfer-level

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

来自Asic-world的Vererilog代码:

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

1 个答案:

答案 0 :(得分:0)

异步复位意味着无论何时复位信号有效,电路都应复位。自然,它应该包括在敏感度列表中,因为这样的语法使它被视为异步重置。请注意,将触发器带到默认(复位)状态不需要激活时钟,并且进入复位状态时,您不应该担心任何亚稳性问题。这里需要始终处理的第一块(检查复位输入状态),并且您需要遵循这种编码风格。最重要的一点是,尽管在 Reset Assertion 期间可以忽略时钟和重置之间的相对时序,但是 Reset Release 必须与时钟同步,因为它确实会导致亚稳定问题。有一些已知的电路可用于异步复位释放过程(这些电路有点特定,但在ASIC领域中广泛使用,因此您应该能够通过Google浏览器找到参考资料)。