我无法编译 .sv 文件 (SystemVerilog)

I can't compile a .sv file (SystemVerilog)

我正在为大学学习 SystemVerilog。我在 Visual Studio 语法高亮代码中安装了扩展:SystemVerilog,Verilog-HDL/SystemVerilog/Bluespec SystemVerilog(扩展名)。 我安装了编译器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);

至:

(a, b, c_in, sum, c_out);

你没有在列表中声明a,你在代码中使用了as 不在代码中。

更改之后,您的代码是合法的 SystemVerilog 语法,并且可以在 edaplayground 上的多个模拟器上正确编译。

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

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

endmodule: adder

至:

endmodule

关于文件扩展名(.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

在端口声明中使用 logic 是可选的,您可以将 result 声明为 wire.