什么时候在 SystemVerilog 中使用`include
When to use `include in SystemVerilog
我想知道 `include 预处理器指令的用途是什么以及何时使用它。例如,我使用的是 Xilinx 的 Vivado,我试过这个:
module A ( //This is the top module
input logic x, y,
output logic z
);
B B1 (.a(x),
.b(y),
.c(z)
);
endmodule
我在另一个文件中写了这个
module B(
input logic a, b,
output logic c
);
assign c = a & b;
endmodule
该软件没有警告我任何事情,它合成正确。所以现在我有点困惑,我也看到有人在他们的顶级模块中包含每个文件,其他人只包含他们的参数和包。
为了让 verilog 编译您的模型,您需要通过以下两种方式之一提供包含相关代码的所有文件:
- 命令行文件列表
- 使用`include
方法#1 采用特定的编译顺序(从前到后)。然而,设计元素(模块、原语……)的编译顺序并不重要。编译器始终可以找到在实例化它的代码之前或之后编译的模块。
某些verilog 元素需要特定的编译顺序。在经典的 verilog 中,这些是宏定义 (`define)。 System verilog 在全局范围内添加包和定义。如果您的文件包含这些元素,则必须在使用它们的代码之前列出它们。
另一种情况,主要与前系统 verilog 世界相关,是使用 `include 在模块范围内插入公共参数定义。这样语句就会出现在模块内部。在系统 verilog 中,这可以替换为包和导入语句。
对于顺序相关的编译元素,您可以将它们放在编译列表中使用它们的代码之前。然而,有时该命令可能难以执行。 `包括在这种情况下的帮助。他们允许您保证编译顺序并将相关文件组合在一起。
Verilog 允许您`包含任何代码,它只是不关心。但是,根据我的经验,`include 包含设计元素(模块)的代码可能会导致代码管理问题,并且在某些情况下可能会导致编译问题。
我想知道 `include 预处理器指令的用途是什么以及何时使用它。例如,我使用的是 Xilinx 的 Vivado,我试过这个:
module A ( //This is the top module
input logic x, y,
output logic z
);
B B1 (.a(x),
.b(y),
.c(z)
);
endmodule
我在另一个文件中写了这个
module B(
input logic a, b,
output logic c
);
assign c = a & b;
endmodule
该软件没有警告我任何事情,它合成正确。所以现在我有点困惑,我也看到有人在他们的顶级模块中包含每个文件,其他人只包含他们的参数和包。
为了让 verilog 编译您的模型,您需要通过以下两种方式之一提供包含相关代码的所有文件:
- 命令行文件列表
- 使用`include
方法#1 采用特定的编译顺序(从前到后)。然而,设计元素(模块、原语……)的编译顺序并不重要。编译器始终可以找到在实例化它的代码之前或之后编译的模块。
某些verilog 元素需要特定的编译顺序。在经典的 verilog 中,这些是宏定义 (`define)。 System verilog 在全局范围内添加包和定义。如果您的文件包含这些元素,则必须在使用它们的代码之前列出它们。
另一种情况,主要与前系统 verilog 世界相关,是使用 `include 在模块范围内插入公共参数定义。这样语句就会出现在模块内部。在系统 verilog 中,这可以替换为包和导入语句。
对于顺序相关的编译元素,您可以将它们放在编译列表中使用它们的代码之前。然而,有时该命令可能难以执行。 `包括在这种情况下的帮助。他们允许您保证编译顺序并将相关文件组合在一起。
Verilog 允许您`包含任何代码,它只是不关心。但是,根据我的经验,`include 包含设计元素(模块)的代码可能会导致代码管理问题,并且在某些情况下可能会导致编译问题。