Verilog头文件怎么包含
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog头文件怎么包含相关的知识,希望对你有一定的参考价值。
参考技术A 方法如下:Set the include.v file as global included and set its file_type to "Verilog Header".
If file_type is not set to Verilog Header, the include file will be treated as an ordinary Verilog file which can be referred by the other Verilog files and this causes the error above.
set_property file_type "Verilog Header" [get_files ../source_inclu/include.v]
set_property is_global_include true [get_files ../source_inclu/include.v]
Verilog可以从五个层次对电路(系统)进行描述,包括:系统级、算法级、寄存器传输级(即RTL级)、门级、开关级。我们平时用的最多的为RTL级,故Verilog代码也经常被称为RTL代码。
在头文件中声明 Verilog 函数
【中文标题】在头文件中声明 Verilog 函数【英文标题】:Declaration of a Verilog function in a header file 【发布时间】:2016-02-20 11:13:08 【问题描述】:当我尝试编译包含头文件的测试台时,该头文件包含函数声明 Icarus Verilog (v10.0 stable) 中止并出现以下错误:
mpeg.vh:133: error: function declarations must be contained within a module.
这个错误很明显。然而,头文件实际上包含在一个模块(测试台)的内部中。由于包含指令应该只替换为相应头文件中的文本,因此函数声明实际上包含在模块中(与错误消息声称的相反)。 我之前曾在 Xilinx ISE (fuse/isim) 上使用过这个头文件,它按预期工作。甚至没有警告。
是否允许在头文件中声明函数(以便以后包含在模块的inside)?
我无法在 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
【问题讨论】:
似乎是工具问题。很多时候,我更喜欢将 clog2 功能保留在公共区域。你有更新版本的iverilog吗? 当仅使用iverilog -E -o test.o -Wall test.v test.vh
调用预处理器时,预处理后的输出显示头文件实际上被“包含”了两次,一次是在`include
指令所在的模块内,一次是在@987654327 之后@。所以我的错误似乎是在命令行中包含了 test.vh 。在调用iverilog 时从源文件列表中删除test.vh 会使错误消失。然而,关于函数声明的有效范围的原始问题仍然存在。
我想你想要iverilog -o test.o -Wall test.v
(没有test.vh)。 test.vh 文件包含在 `included 语句中
我猜,存在与 `include 相关的问题,因为这是整个行业遵循的正常做法(在其他文件中定义函数)
【参考方案1】:
在旧的 Verilog 标准中,不允许超出 module/endmodule
对的范围。编译器指令(以`开头的东西)是一个例外,因为它们在任何其他语法之前被预处理。
SystemVerilog 添加了compilation unit 的概念,它允许代码存在于模块范围之外。但它还添加了可以是 imported instead of `included 的包,以消除在您使用其中一个时定义函数的问题。
【讨论】:
您认为“旧”的 Verilog 标准是什么? SV 之前的一切? “旧”标准是已被其他标准淘汰的任何标准。 那么有几个“旧”标准 :-) 但我明白你的意思。以上是关于Verilog头文件怎么包含的主要内容,如果未能解决你的问题,请参考以下文章