Есть ли разница между ними?
Я только что изменил if(rdy)
на if(rdy == 1)
в каком-то коде для проекта, и внезапно вывод ведет себя совершенно по-другому.
Предполагается, что rdy
является 1-битным типом данных reg
в Verilog.
Есть ли разница между ними?
Я только что изменил if(rdy)
на if(rdy == 1)
в каком-то коде для проекта, и внезапно вывод ведет себя совершенно по-другому.
Предполагается, что rdy
является 1-битным типом данных reg
в Verilog.
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)
Первый, вероятно, будет синтезирован с использованием вентиля OR
с 8 входами, а для второго потребуется вентиль NOR
с 7 входами и вентиль AND
с 2 входами.
Между ними нет никакой разницы.
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
reg
может быть только 1 или 0? - person user3079006   schedule 08.12.2013