System verilog 我能';t编译.sv文件(SystemVerilog)

System verilog 我能';t编译.sv文件(SystemVerilog),system-verilog,iverilog,System Verilog,Iverilog,我正在为大学学习SystemVerilog。我在visualstudio代码中安装了用于语法突出显示的扩展:SystemVerilog、veriloghdl/SystemVerilog/bluespecsystemverilog(扩展名)。 我安装了编译器Icarus Verilog,并在环境变量(PATH)中插入了地址 所以我复制了这个代码: module adder (s, b, c_in, sum, c_out); input logic [7:0] a; input lo

我正在为大学学习SystemVerilog。我在visualstudio代码中安装了用于语法突出显示的扩展:SystemVerilog、veriloghdl/SystemVerilog/bluespecsystemverilog(扩展名)。 我安装了编译器Icarus Verilog,并在环境变量(PATH)中插入了地址

所以我复制了这个代码:

module adder
(s, b, c_in, sum, c_out);
    input logic [7:0] a;
    input logic [7:0] b;
    input logic c_in;
    output logic [7:0] sum;
    output logic c_out;

    logic [8:0] result;

    assign result = a + b + c_in;
    assign sum = result [7:0];
    assign c_out = result[8];

endmodule: adder
并试图运行它,但它给了我以下错误:

Module end labels require SystemVerilog.
我甚至试着用同样的结果从cmd编译


我注意到的一点是,当我对
.v
文件(Verilog)执行相同的操作时,它会工作。

我在您的端口列表中得到一个编译错误。更改:

(s, b, c_in, sum, c_out);
endmodule: adder
致:

您没有在列表中声明
a
,而是在代码中使用
a
<代码>s不在代码中

更改后,您的代码将使用legal SystemVerilog语法,并且在EDA上的多个模拟器上编译时不会出错

我确实从你的Icarus Verilog 0.10.0上得到了不同的编译错误。也许您正在使用不同的版本进行编译。请记住,
iverilog
还不支持所有SV功能

如果模块标签仍然给您带来问题,您可以简单地删除它,因为它是可选的。更改:

(s, b, c_in, sum, c_out);
endmodule: adder
致:

关于文件扩展名(
.v
.sv
),当您使用
.sv
时,某些编译器将自动启用sv功能;也许有些人甚至需要
.sv
。由于代码使用SV关键字(
logic
),因此必须启用SV功能才能编译


以下是不依赖SV功能的代码版本:

module adder
(a, b, c_in, sum, c_out);
    input [7:0] a;
    input [7:0] b;
    input c_in;
    output [7:0] sum;
    output c_out;

    wire [8:0] result;

    assign result = a + b + c_in;
    assign sum = result [7:0];
    assign c_out = result[8];
endmodule
在端口声明中使用
逻辑
是可选的,您可以将
结果
声明为
连接