我设计了四个键位,分别对应复位、暂停、置分、置秒。其复位、暂停功能都正常,但置分、置秒不会是加1,而是乱码。为什么呢?
希望高手指点一下。
module SECLOCK(clk,sclk,rundir,key);
input clk,sclk;//clk为系统时钟,sclk为百分秒时钟
input rundir;//计时方向
input[3:0] key;//四个键位
reg[32:0] j;//当前统计百分秒数,以生成分、秒、百分秒
reg[3:0] key0;
reg run;//暂停标志
reg keyclk;
always @(posedge clk)//扫描四个键位值,key0=key,且当key!=0时,keyclk置高电平
begin
key0<=key;
if(key!=0) keyclk<=1;
else keyclk<=0;
end
always @(posedge keyclk or posedge sclk)
begin
if(keyclk)
begin
case(key0)
4'b0001://复位键
begin
j<=0;
run<=0;
end
4'b0010://暂停键
begin
run<=~run;
end
4'b0100://设置分+1
begin
j<=j+33'd100;
end
4'b1000://设置秒+1
begin
j<=j+33'd6000;
end
4'b0000:
begin
j<=j;
end
default:j<=j;
endcase
end
else
begin
if(run==1 && rundir==1 ) //正向计时
j<=j+1;
else if(run==1 && rundir==0 && j>0) //反向计时
j<=j-1;
end
end
endmodule |