![](/img/trans.png)
[英]When are `include directives not needed in Verilog and SystemVerilog?
[英]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编译您的model,您需要以两种方式之一提供包含相关代码的所有文件:
方法 #1 假定一定的编译顺序(从前到后)。 但是,编译设计元素(模块、原语等)的顺序并不重要。 编译器总是可以定位在实例化它的代码之前或之后编译的模块。
某些 verilog 元素需要特定的编译顺序。 在经典的 verilog 中,这些是宏定义(`define)。 系统verilog在全局scope中增加了包和定义。 如果您的文件包含这些元素,则必须在使用它们的代码之前列出它们。
另一种情况,主要与系统前的 verilog 世界相关,是使用 `include 在模块范围内插入公共参数定义。 这样,语句就会出现在模块内部。 在系统 verilog 中,这可以用包和导入语句替换。
对于顺序相关的编译元素,您可以将它们放在使用它们的代码之前的编译列表中。 然而,有时该命令可能难以执行。 `包括在这种情况下的帮助。 它们允许您保证编译顺序并将相关文件组合在一起。
Verilog 允许您`包含任何代码,它只是不在乎。 但是,根据我的经验,包含设计元素(模块)的代码会导致代码管理问题,并且在某些情况下会导致编译问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.