这两者有区别吗? 在项目的某些代码中,我刚刚从if(rdy)更改为if(rdy == 1),突然输出的行为完全不同。
假设rdy是verilog中的1位reg数据类型。
答案 0 :(得分:1)
reg rdy;
if (rdy) <---> if (rdy!=1'b0)
if (rdy==1) <---> if (rdy==1'b1)
对于综合,它们可能会起作用。但请注意rdy
是否超过1位:
reg[7:0] rdy;
if (rdy) <---> if (rdy!=8'b00000000)
if (rdy==1) <---> if (rdy==8'b00000001)
第一个可能使用8输入OR
门进行合成,而第二个将需要7输入NOR
门和2输入AND
门。
答案 1 :(得分:0)
两者之间没有区别。
reg
为4状态:0、1,x,z。只有rdy
为1时,if
条件才为真;否则,它是错误的。
module tb;
reg rdy;
always @(rdy) begin
if (rdy) begin
$display($time, " rdy=%b if (rdy) TRUE", rdy);
end else begin
$display($time, " rdy=%b if (rdy) FALSE", rdy);
end
if (rdy==1) begin
$display($time, " rdy=%b if (rdy==1) TRUE", rdy);
end else begin
$display($time, " rdy=%b if (rdy==1) FALSE", rdy);
end
$display;
end
initial begin
#5 rdy = 1'b1;
#5 rdy = 1'bx;
#5 rdy = 1'bz;
#5 rdy = 1'b0;
end
endmodule
输出:
5 rdy=1 if (rdy) TRUE
5 rdy=1 if (rdy==1) TRUE
10 rdy=x if (rdy) FALSE
10 rdy=x if (rdy==1) FALSE
15 rdy=z if (rdy) FALSE
15 rdy=z if (rdy==1) FALSE
20 rdy=0 if (rdy) FALSE
20 rdy=0 if (rdy==1) FALSE