一般来说,同步系统,需要异步复位。
因为同步复位,会更加浪费电路资源。
if(!sys_rst_n)
q <= 1'b0 ;
else
q <= d ;
endmodule
if(!sys_rst_n)
q <= 1'b0 ;
else
q <= d ;
endmodule
(
input sys_clk ,
input sys_rst_n ,
output q
);
reg a;
reg b;
always@(posedge sys_clk or negedge sys_rst_n)//异步复位,同步释放
if(!sys_rst_n) begin
a <= 1'b0 ;
b <= 1'b0 ;//异步复位
end
else begin
a <= 1'b1 ;
b <= a ;//同步释放
end
assign q = b ;
endmodule
复位信号到来的时候,不受时钟信号的同步。 而是在时钟信号释放的时候受时钟同步。
由于异步复位信号与时钟无必然联系,两者都是独立的,所以复位信号的释放将有一定的概率导致电路出现亚稳态。
在rst_n信号为低时,立刻进行复位。 而rst_n信号由低到高释放时,为了防止亚稳态的出现,将rst_n信号用DFF向后延一周期,达到与时钟clk边沿同步的目的。
异步复位,同步释放的优点
-
避免复位信号释放的时候造成亚稳态问题
-
只要复位信号一有效,电路就处于复位状态,与时钟沿无关
-
有效捕捉复位,即使是短脉冲复位也不会丢失
-
有明确的复位撤销行为。复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间