同步复位是指只有当时钟有效边沿到来时,才能进行复位。如下,verilog描述为:
always@(posedge clk)begin
if(!rst_n)
...
end
使用限制:
异步复位是指无论是否时钟有效边沿到来,只要复位信号有效,就进行复位。如下,verilog描述为:
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
...
end
优点:
缺点:
为了避免异步复位出现亚稳态,同时发挥异步复位的优点,弥补它的缺点,一般采用异步复位、同步释放的方式。
解释上图:
verilog描述如下:
module asr_rstn(clk,rst_i);
input clk,rst_i;
reg rst_d1,rst_d2 ;
always @ (posedge clk or negedge rst_i) begin
if(!rst_i) {rst_d1,rst_d2} = 0;
else {rst_d2,rst_d1} <= {rst_n_1,1};
end
assign rst_o = rst_d2;
endmodule
Ps:给出一道例题:
(22届紫光秋招)假定时钟毛毛刺,异步复位可以不管时钟,只要复位满足就对电路复位。判断是否正确?如果不正确请给出理由?
不正确。影响异步复位信号能否安全复位的因素除了时钟产生的毛刺,另外一点很重要的原因就是:当异步复位信号在释放时,如果刚好发生在时钟有效边沿的附近,那么有可能会产生亚稳态,而导致电路复位失败。