|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于按键消抖的问题请教大神?
; [; H+ e) A V" @& ?2 D! W8 L! ?! r% i- g; K8 w
reg[2:0] key_rst;9 |2 s6 M! G1 R* C: n* ]7 [/ L
N3 B/ m$ h4 j1 K( b# M
always @(posedge clk or negedge rst_n)
3 g! e; ~! W" _4 d if (!rst_n) key_rst <= 3'b111; \, U$ n8 @5 m: W
else key_rst <= {sw3_n,sw2_n,sw1_n};
' j( x; h0 \) W+ ^9 M8 n" R
# J3 l5 T4 Y8 Yreg[2:0] key_rst_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中
1 E' O* r6 |0 @, W+ R5 Q( T3 X! A0 P- N
always @( posedge clk or negedge rst_n)
7 V* D2 l% u. j$ W6 W( K( z if (!rst_n) key_rst_r <= 3'b111;
% b4 E4 J5 q. g! k; _ else key_rst_r <= key_rst;* e' n7 a& \+ I9 q
- l4 G; S) F6 k9 }8 }! `% C
//当寄存器key_rst由1变为0时,led_an的值变为高,维持一个时钟周期 8 K% s- ?1 z5 L3 a) W
wire[2:0] key_an = key_rst_r & ( ~key_rst);
, N. U/ ^7 o$ X+ Q: d9 q$ j o, x! l; E
由于相差一个时钟周期最终key_an变为1,但是两个always之间是并行的啊,怎么会相差一个时钟周期呢?( E" U# D# Y; [$ H
请教大神,非常干感谢! |
|