1
我正在使用4个4-1多路复用器和4个D触发器来实现移位寄存器,并且该模块被用作去抖器(输出到移位寄存器的时钟)。我知道一个debouncer是如何工作的,以及为什么他们被使用,但有人可以解释这个代码是如何工作的?谢谢。Verilog Debouncing Module
module debounce(
input D_in,
input clk_in,
input reset,
output D_out
);
reg q9, q8, q7, q6, q5, q4, q3, q2, q1, q0;
always @ (posedge clk_in or posedge reset)
if (reset == 1'b1)
{q9, q8, q7, q6, q5, q4, q3, q2, q1, q0} <= 10'b0;
else begin
q9 <= q8; q8 <= q7; q7 <= q6; q6 <= q5; q5 <= q4;
q4 <= q3; q3 <= q2; q2 <= q1; q1 <= q0; q0 <= D_in;
end
assign D_out = !q9 & q8 & q7 & q6 & q5 &
q4 & q3 & q2 & q1 & q0;
endmodule
为什么8个周期?如果D_out的任何q值为零,它会不会总是输出一个零? @ Qiu – 2014-09-13 07:24:13
@RayanAoun:9个周期,错字。是的,如果任何q值为零 - 输出也将为零。但这就是去抖动的工作原理 - >您正在寻找一种情况,信号在连续9个周期内稳定(高)。但MSB('q [9]')需要为'0'或者你可以得到'常量''1'。 – Qiu 2014-09-13 07:56:19