verilog 的always里面if()中的判断条件没有进行判断!?急急急!!

reg [1:0] cnt_dis; //cnt_dis记录按键的次数
always @(key_value_r) //reg[9:0] key_value_r是消抖后的按键输出,初始为10'b11111_11111
if(key_value_r == 10'b11111_11111) cnt_dis <= 2'b00;
else if(cnt_dis == 2'b11) cnt_dis <= 2'b00;
else cnt_dis <= cnt_dis + 1'b1;

always @(cnt_dis)
if(cnt_dis==1'b10)
begin
if(key_value_r==10'b11111_11111) password[3:0] <=digital_;
else if(key_value_r==10'b00000_00001) password[3:0] <=digital0; //password是要输出的值
else if(key_value_r==10'b00000_00010) password[3:0] <=digital1; //digital是parameter
else if(key_value_r==10'b00000_00100) password[3:0] <=digital2;
else if(key_value_r==10'b00000_01000) password[3:0] <=digital3;
else if(key_value_r==10'b00000_10000) password[3:0] <=digital4;
else if(key_value_r==10'b00001_00000) password[3:0] <=digital5;
else if(key_value_r==10'b00010_00000) password[3:0] <=digital6;
else if(key_value_r==10'b00100_00000) password[3:0] <=digital7;
else if(key_value_r==10'b01000_00000) password[3:0] <=digital8;
else if(key_value_r==10'b10000_00000) password[3:0] <=digital9;
end
else password <= password;
下面接LED显示段程序。
我想问,为什么 if(cnt_dis==1'b10) 里面的判断语句没有执行啊,我把程序烧入板子里,无论按键几次,数码管显示的数字都在变化,而不是在cnt_dis==1‘b10的时候才变化。急急急啊!!

以下语句是错误的:
if(cnt_dis==1'b10)

因为1'b10实际上相当于1'b0。你应该改成2'b10追问

谢谢,不过我是在百度上写错了,实际我是这样写的2'b10;
很懊恼 刚刚我看了一下 IF里面的条件是判断了的 但是cnt_dis不能置0,除非我按下rst_n让key_value_r=10'b1111111111

追答

coding style也很有问题,符号“<=”用在时序电路中用于非阻塞赋值,作为D触发来说,控制信号只能是时钟信号和复位信号。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-05
放begin 里面吧,在always @()后面加一组begin end
相似回答