if(rdy)和if(rdy==1)的区别?

问题描述 投票:0回答:1

两者之间有区别吗?

我刚刚从 if(rdy)if(rdy == 1) 在项目的一些代码中,突然间输出的行为完全不同。

假设 rdy 是一个1位 reg Verilog中的数据类型。

syntax verilog hdl
1个回答
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 门。


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
© www.soinside.com 2019 - 2024. All rights reserved.