边沿检测电路
要实现边沿检测,最直接的想法是用两级寄存器,第二级寄存器锁存住某个时钟上升沿到来时的输入电平,第一级寄存器锁存住下一个时钟沿到来时的输入电平,如果这两个寄存器锁存住的电平信号不同,就说明检测到了边沿,具体是上升沿还是下降沿可以通过组合逻辑来实现。如下图所示:
Verilog HDL 代码如下:
module edge_detect
(
input i_clk,
input i_rst,
input i_pulse,
output o_posedge_detect,
output o_negedge_detect
);
reg s_pulse_d1;
reg s_pulse_d2;
always@(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
s_pulse_d1 <= 1'b0;
s_pulse_d2 <= 1'b0;
end
else
begin
s_pulse_d1 <= i_pulse ;
s_pulse_d2 <= s_pulse_d1;
end
end
assign o_posedge_detect= (s_pulse_d1 && ~s_pulse_d2 ) ? 1 : 0;
assign o_negedge_detect= (s_pulse_d2 && ~s_pulse_d1 ) ? 1 : 0;
endmodule
乍一看,这个电路似乎很简单地实现了边沿检测的功能,但是仔细分析就可以发现这种方法存在一个潜在的风险:当待测信号pulse是一个异步信号时,输出可能是亚稳态,如果pulse信号的变化刚好发生在clk时钟的建立时间和保持时间之内,那么第一级寄存器的输出 pulse_r1 就会进入亚稳态,而pulse_r1的亚稳态会立即传递给pos_edge和neg_edge信号,从而使得整个电路的输出进入亚稳态,进而影响下一级电路的正常工作,甚至导致整个系统崩溃!
因此,在进行异步信号边沿提取时,不能直接使用上面的这种电路,而应该先将异步信号同步化,一般采用多加一级寄存器的方法来减小亚稳态的发生概率,如下图所示:
Verilog HDL 代码如下:
module edge_detect
(
input i_clk,
input i_rst,
input i_pulse,
output o_posedge_detect,
output o_negedge_detect
);
reg s_pulse_d1;
reg s_pulse_d2;
reg s_pulse_d3;
always@(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
s_pulse_d1 <= 1'b0;
s_pulse_d2 <= 1'b0;
s_pulse_d3 <= 1'b0;
end
else
begin
s_pulse_d1 <= i_pulse ;
s_pulse_d2 <= s_pulse_d1;
s_pulse_d3 <= s_pulse_d2;
end
end
assign o_posedge_detect= (s_pulse_d2 && ~s_pulse_d3 ) ? 1 : 0;
assign o_negedge_detect= (s_pulse_d3 && ~s_pulse_d2 ) ? 1 : 0;
endmodule
仿真图如下:
经过这样的同步处理后, 可以大大减小电路进入亚稳态的概率,如果第一级寄存器进入了亚稳态,一般也会在一个clk周期内稳定下来(可能稳定为0也可能稳定为1),如下图所示:
图中pulse信号的改变刚好发生在 clk 的建立时间和保持时间之内,因而第一级寄存器的输出pulse_r1可能会进入亚稳态,图中Tco为第一级寄存器pulse_r1的状态建立时间(即clock to output),一般情况下,亚稳态的决断时间(即从进入亚稳态到稳定下来的时间)不会超过一个时钟周期,因此在下一个clk上升沿到来之前,pulse_r1已经稳定下来(可能稳定到0也可能稳定到1),这样第二级寄存器就会采集到一个稳定的状态,从而把亚稳态限制在第二级寄存器之前,保证了整个电路输出的稳定性。
综上所述,在异步信号边沿检测电路中,至少需要采用三级寄存器来实现,在对系统稳定性要求较高的数字系统中,可以采用更多级的寄存器来减小亚稳态发生概率,提高系统稳定性。
参考文章:
[1]《边沿检测电路小结》2014-12 MioTech https://www.cnblogs.com/xiaoxie2014/p/4157835.html
[2]《【Verilog HDL 训练】第 06 天(边沿检测) 》Reborn Lee 2019-04 https://blog.csdn.net/Reborn_Lee/article/details/89669193