practice.v(7) 文本附近的 Verilog HDL 语法错误 "or";期待“)”

Verilog HDL syntax error at practice.v(7) near text "or"; expecting ")"

我已将设置更改为与模块同名。存储此文件的文件夹中没有其他 Verilog 文件。不知道语法有什么问题

module test(A,B,F);
input A;
input [1:0]B;
output F;
reg F;
always @(*)
    if({A,B}==3'b001 or {A,B}==3'b010 or {A,B}==3'b100 or {A,B}==3'b101)
        F=1;
    else F=0;
endmodule 

Verilog 中的逻辑或运算符是 ||,而不是 or

or 是 Verilog 中的合法关键字,但不能在该上下文中使用。它可以用作内置的原始或门,或用于敏感列表。

您可能希望它表现为逻辑 OR 运算符,在这种情况下您可以使用 || 代替:

if({A,B}==3'b001 || {A,B}==3'b010 || {A,B}==3'b100 || {A,B}==3'b101)

或者,您可以在您的工具中启用 SystemVerilog 功能并使用集合成员 inside 运算符:

module test(A,B,F);
input A;
input [1:0]B;
output F;

assign F = ({A,B} inside {3'b001, 3'b010, 3'b100, 3'b101});

endmodule 

此代码更易于理解,并且扩展性更好,因为它更容易 add/remove 比较值。