我正在 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);
行运行良好。我不明白为什么直接在函数调用中使用三元运算符会导致语法错误。
有人可以解释为什么会发生这种情况以及如何解决它吗?
函数调用不是语法错误的原因。 问题是
?:
构造只是一个 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