其实异步复位的话,优点就是可以直接用触发器异步复位端,相对同步复位来说又简单又省逻辑资源,但其致命缺点就是复位结束也就是释放的时刻恰在时钟上升沿的建立时间和保持时间之间时无法决定现在的复位状态是1还是0,造成亚稳态。
因此最好全局复位信号送出之前做一个“异步复位,同步释放”的处理。
下面是常见一种方式:
module asy_reset( clk, rst_n, rst_nr
);
input clk;
input rst_n;
output rst_nr;
reg rst_nr;
reg rst_nr1;
always @ (posedge clk or negedge rst_n)
if(!rst_n)
rst_nr1<= 1'b0;
else
rst_nr1<= 1'b1;
always @ (posedge clk or negedge rst_n)
if(!rst_n)
rst_nr<= 1'b0;
else
rst_nr<= rst_nr1;
endmodule
下面就可以直接用用rst_nr作为复位信号使用,并且不会造成亚稳态。