我无法编译 .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
,你在代码中使用了a
。 s
不在代码中。
更改之后,您的代码是合法的 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
.
我正在为大学学习 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
,你在代码中使用了a
。 s
不在代码中。
更改之后,您的代码是合法的 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
.