说明:
在大多数 Verilog 编译器(如 VCS、ModelSim/Questa、Verilator)中,使用 +incdir+
选项指定头文件的路径后,仍然需要在 filelist
文件中列出每一个 Verilog 源文件。+incdir+
选项仅告诉编译器在特定目录中查找头文件(例如 .vh
/ .inc 文件),而不会自动包含这些目录中的 Verilog 源文件。你需要明确地列出每一个 Verilog 源文件,以便编译器知道要编译哪些文件。
举个栗子:
filelist
文件示例
假设你的项目结构如下:
project/
├── includes/
│ ├── common_defines.vh
│ └── custom_defines.vh
├── src/
│ ├── module1.v
│ ├── module2.v
│ └── top.v
└── filelist.f
你应该在 filelist.f
文件中这样写:
+incdir+./includes
./src/module1.v
./src/module2.v
./src/top.v
但是这里有一点需要注意:
在 Verilog 源文件中使用 `include "common_defines.vh"指令来引用包含文件。编译器会根据
+incdir+` 选项找到这些文件,(不需要完整的文件路径!)
对这两个命令做一下详细的说明:
+incdir+
选项
- 作用:指定包含文件(如
.vh
文件)所在的目录路径。 - 用途:告诉编译器在这些目录中查找
\
include` 指令中引用的文件。 - 示例:
+incdir+src/include/
让编译器在src/include/
目录中查找包含文件。
` include指令
- 作用:在 Verilog 源文件中插入另一个文件的内容。
- 用途:实际上将包含文件的内容插入到使用
\
include` 指令的文件中。 - 示例:
\
include "definitions.vh"将
definitions.vh` 文件的内容插入到当前文件中。
为什么需要 \
include` 指令:
尽管 +incdir+
选项告诉编译器在哪里查找包含文件,但它不会自动将这些文件包含到你的 Verilog 源文件中。你仍然需要使用 ` include 指令在需要的地方显式地包含这些文件。
但是有时候你会发现,没有在verilog 源文件开头使用include 指令,竟然也能编译成功,这是为什么?
推荐做法:
尽管有些工具可能能够自动处理包含路径并成功编译,但为了确保代码的可移植性和可维护性,推荐使用显式的 \
include` 指令来包含必要的文件。这有助于避免在不同工具或环境下的行为差异。
结论:
如果你的项目能够在不使用 \
include指令的情况下成功编译,这可能是由于你使用的工具具有自动包含文件的特性。然而,为了确保代码在各种环境下的一致性和可维护性,建议显式地使用
`include` 指令来包含必要的文件。这样可以避免由于工具行为差异导致的潜在问题。