iverilog 不编译多个端口声明,其中多个位写入一行

iverilog Not Compiling Multiple Port Declarations With Multiple Bits Written In One Line

我正在尝试通过 iverilog 11.0 的最新稳定版本使用测试台编译 verilog 代码,这是一个示例:

iverilog -o example example.v tb_example.v
// example.v

module example(
    input [1:0] input1, [1:0] input2, // problem is here
    output [1:0] output1
    );

// ...

endmodule
// tb_example.v

module tb_example(

    );

    reg [1:0] input1;
    reg [1:0] input2;
    wire [1:0] output1;
    
    example uut(input1, input2, output1);

// ...

endmodule

虽然在vivado中编译没有问题,但是上面的代码iverilog无法编译,出现语法错误:

example.v:2: syntax error
example.v:1: Errors in port declarations.

当我将 example.v 中的输入声明行更改为:

input [1:0] input1, input2, // still one line but second bit declaration removed

或对此:

input [1:0] input1, 
input [1:0] input2, // seperate lines

没有问题,可以iverilog编译,没有错误。

如果问题已经解决了,我为什么要问这个?因为首先,我不明白这可以在 vivado 而不是 iverilog 中编译,其次我需要控制这样写的多个文件(在一行中写多个端口和多个位)测试台,很难更改所有这些。那么,我是不是遗漏了什么或者 iverilog 不支持这个?

这在 Verilog 中是合法的,但似乎是 的错误。不是分行写,而是iverilog在任何类型声明之前都希望有一个端口方向。因此,您必须使用您的解决方法之一或以下方法:

input [1:0] input1, input [1:0] input2,