如何解决何时在 SystemVerilog 中使用 `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)。系统 verilog 在全局范围内添加包和定义。如果您的文件包含这些元素,它们必须在使用它们的代码之前列出。
另一种情况,主要与预系统 verilog 世界相关,是使用 `include 在模块范围内插入公共参数定义。这样语句就会出现在模块内部。在系统 verilog 中,这可以用包和导入语句替换。
对于依赖于顺序的编译元素,您可以将它们放在使用它们的代码之前的编译列表中。然而,有时该命令可能难以执行。 `包括在这种情况下的帮助。它们使您能够保证编译顺序并将相关文件组合在一起。
Verilog 允许你包含任何代码,它只是不在乎。但是,根据我的经验,`包含包含设计元素(模块)的代码可能会导致代码管理问题,并且在某些情况下可能会导致编译问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。