为什么在 SystemVerilog 中使用三元运算符和函数调用时会出现语法错误?

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

我正在 SystemVerilog 中编写代码,并且尝试使用三元运算符在两个函数调用之间做出决定。这是我的代码:

module tb;
  int a = 1, b = 4;
  initial begin
    b > a ? $display("%0d", b) : $display("Value: %0d", a); // Syntax error
    $display("%0d", b > a ? b : a); // This works correctly
  end
endmodule

b > a ? print(b) : print(a);
行中,我收到语法错误,但
print(b > a ? b : a);
行运行良好。我不明白为什么直接在函数调用中使用三元运算符会导致语法错误。

有人可以解释为什么会发生这种情况以及如何解决它吗?

提前致谢!

syntax verilog system-verilog conditional-operator function-call
1个回答
0
投票

函数调用不是语法错误的原因。 问题是

?:
构造只是一个 operator;它本身并不是一个完整的陈述。 例如,使用以下代码您仍然会遇到语法错误:

b > a ? b : a;

该行中没有函数调用。 使用任何运算符都会出现相同的语法错误,例如:

a || b;

要根据条件调用函数,您应该使用

if/else
过程代码:

module tb;
  int a = 1, b = 4;
  initial begin
    if (b > a)
        $display("%0d", b);
    else
        $display("Value: %0d", a);
  end
endmodule
© www.soinside.com 2019 - 2024. All rights reserved.