Я реализую сдвиговый регистр, используя четыре 4-1 мультиплексора и четыре D-flip flops, и ему был дан этот модуль для использования в качестве дебютатора (который выводится на часы сдвигового регистра). Я знаю, как работает 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 циклов? и если какое-либо значение q равно нулю для D_out, то он всегда будет выводить ноль? @Qiu –
@RayanAoun: 9 циклов, опечатка. Да, если любое значение q равно нулю - выход тоже будет равен нулю. Но так работает debouncer -> вы ищете ситуацию, где сигнал был стабильным (и высоким) в течение 9 циклов подряд. Но MSB ('q [9]') должен быть '0', или вы можете получить« постоянный »' 1'. – Qiu