最近在做FPGA毕业设计。
我做了四个按键,每个按键触发,对应执行一段代码。
为了防止按键抖动产生的异常,我采取了扫描的办法。即在每个clk上升沿获取按键值,赋予key0,且如果当前按键值key!=0,置keyclk为高电平,触发下一个always,实现程序转移。
可是实验发现,我的扫描结果,即使按键key值发生了变化,寄存器key0也不会被赋值。这让我很不解。我没有仿真,用singletap看的。
我都快崩溃了,这种问题也能出。
input clk;
input [3:0] key;
reg [3:0] key0;
reg keyclk;
always @ (posedge clk)
begin
key0<=key;
if(key!=0) keyclk<=1;
else keyclk<=0;
end
always @ (posedge keyclk)
begin
case(key0)
4'b0001:
4'b0010:
4'b0100:
4'b1000:
default:
endcase
end |