在头文件中声明 Verilog 函数
Declaration of a Verilog function in a header file
当我尝试编译包含头文件的测试平台时,该头文件包含函数声明 Icarus Verilog(v10.0 稳定版)中止并出现以下错误:
mpeg.vh:133: error: function declarations must be contained within a module.
这个错误很明显。但是,头文件实际上包含在模块(测试平台)的内部。由于 include 指令应该只被相应头文件中的文本替换,函数声明实际上包含在一个模块中(与错误消息所声称的相反)。
我之前在 Xilinx ISE (fuse/isim) 中使用过这个头文件,它按预期工作。甚至没有警告。
是否允许在头文件中声明函数(以便稍后包含在模块的内部)?
我无法在 Verilog LRM(IEEE 1364-2001,第 10 章)中找到此问题的答案。
示例:
test.vh:
function integer foo;
input integer a;
begin
foo = a;
end
endfunction
test.v:
module bar;
`include "test.vh"
endmodule
调用 iverilog:iverilog -o test.o -Wall test.v test.vh
在旧的 Verilog 标准中,module/endmodule
对的范围之外是不允许的。编译器指令(以`开头的东西)是一个例外,因为它们在任何其他语法之前被预处理。
SystemVerilog 添加了 compilation unit, which allows code to exist outside the scope a module. But it also added packages that can be imported instead of `included 的概念,以解决当您使用其中一个函数时多次定义函数的问题。
当我尝试编译包含头文件的测试平台时,该头文件包含函数声明 Icarus Verilog(v10.0 稳定版)中止并出现以下错误:
mpeg.vh:133: error: function declarations must be contained within a module.
这个错误很明显。但是,头文件实际上包含在模块(测试平台)的内部。由于 include 指令应该只被相应头文件中的文本替换,函数声明实际上包含在一个模块中(与错误消息所声称的相反)。 我之前在 Xilinx ISE (fuse/isim) 中使用过这个头文件,它按预期工作。甚至没有警告。
是否允许在头文件中声明函数(以便稍后包含在模块的内部)?
我无法在 Verilog LRM(IEEE 1364-2001,第 10 章)中找到此问题的答案。
示例:
test.vh:
function integer foo;
input integer a;
begin
foo = a;
end
endfunction
test.v:
module bar;
`include "test.vh"
endmodule
调用 iverilog:iverilog -o test.o -Wall test.v test.vh
在旧的 Verilog 标准中,module/endmodule
对的范围之外是不允许的。编译器指令(以`开头的东西)是一个例外,因为它们在任何其他语法之前被预处理。
SystemVerilog 添加了 compilation unit, which allows code to exist outside the scope a module. But it also added packages that can be imported instead of `included 的概念,以解决当您使用其中一个函数时多次定义函数的问题。