我写了一个程序,但在处理按键的模块,就出现问题。发觉Verilog HDL,跟C语言很不同。有时问题,想不出原因。
下面是我的处理按键的模块的程序,我的目的是,按一按键,LED就亮或灭。
帮我看看,问题出在哪里。谢
我采用的普通C语言处理按键的方法。10MS检查一次,连续检查到两次,即认为按下一次
module KEY(led1,led2,odata,key,clk);
output led1;
output led2;
output[7:0] odata; ////数据输出到其他模块
input key;
input clk;
reg led1;
reg led2;
reg[24:0] clkcount;
reg keydowntag;
reg[2:0] readkey;
//reg[[7:0] adder;
reg[7:0] odata;
reg[7:0] dbuf;
reg[1:0] keystate;
always @(posedge clk)
begin
clkcount=clkcount+1'b1;
end
always @ (clkcount[23])
begin
if(key==0) // //当按键按下时
begin
if(readkey>=2) //当检测到2次按键信号时
begin
if(keystate==KEYUP)
begin
keystate=2;
dbuf=dbuf+1;
odata=dbuf;
led1=~led1;
led2=1;
readkey=0;
end
end
else
begin
readkey=readkey+1;
if(keystate==KEYDOWN)
begin
keystate=KEYHOLD;
readkey=0;
end
end
end
else
begin
readkey=0;
keystate=KEYUP;
end
end
endmodule
此帖出自
小平头技术问答
一周热门 更多>