一、基本原理
1、时钟信号只在上升沿起作用,异步信号输入时会有个亚稳态(抖动)的过程。
2、时钟信号采样会出现两种情况:异步信号1和异步信号2。对于异步信号1,时钟能够采样到稳定信号,没有任何影响;但是,我们不能确定每次都是刚好采样到稳定时候,例如异步信号2。
3、因此要对异步信号进行处理,通常的做法是:将异步信号连接2级寄存器q和q1,进行两个周期的时延,以获得稳定信号。
4、2级寄存器的输出是个稳定的值(可能是0或1)。
二、对FPGA(八)中key_in进行优化。
与(八)中的边沿检测,代码相同,意义不同。
//通过2级寄存器,消除异步信号的亚稳态
always@(posedge Clk or negedge Rst_n)
if(!Rst_n)begin
key_in_a0 <= 1’b0;
key_in_a1 <= 1’b0;
end
else begin
key_in_a0 <= key_in;
key_in_a1 <= key_in_a0;
end
注意:
1、由于用key_in_a0 和key_in_a1 进行表示,因此在RTL viewer中不能明显看出2级寄存器。改成key_in_s