|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于按键消抖的问题请教大神?
+ r5 e4 H7 z$ f1 x) j, k
8 s, l) I* p+ |; y8 M1 Sreg[2:0] key_rst;. W1 r+ f, F3 R+ B8 B
$ Q) l" f' m' m( U5 s
always @(posedge clk or negedge rst_n)
5 G1 h3 Y; I6 I" x( R S if (!rst_n) key_rst <= 3'b111;
( o9 t) |' d4 x else key_rst <= {sw3_n,sw2_n,sw1_n};
: F9 }' d; r: I9 |" y5 _6 S \ u1 @
reg[2:0] key_rst_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中2 p) i; `2 v w( [) W& |
. G) c+ i7 I' p# ?always @( posedge clk or negedge rst_n)9 T7 ^) q5 n0 A7 b
if (!rst_n) key_rst_r <= 3'b111;- _. J9 Z. u4 C6 L, j0 i
else key_rst_r <= key_rst;
- U5 U! b: ~% j# x% B& M . V! k! p" E. R4 \' V; v
//当寄存器key_rst由1变为0时,led_an的值变为高,维持一个时钟周期 ! e; l1 g9 R' ^" r% k
wire[2:0] key_an = key_rst_r & ( ~key_rst);
+ z' B K9 e' Q/ t# b+ \$ p( h4 V8 x7 c" c* F. W
由于相差一个时钟周期最终key_an变为1,但是两个always之间是并行的啊,怎么会相差一个时钟周期呢?
2 m* o$ q! u7 \. i请教大神,非常干感谢! |
|