繁体   English   中英

何时在 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编译您的model,您需要以两种方式之一提供包含相关代码的所有文件:

  1. 命令行中的文件列表
  2. 使用`包括

方法 #1 假定一定的编译顺序(从前到后)。 但是,编译设计元素(模块、原语等)的顺序并不重要。 编译器总是可以定位在实例化它的代码之前或之后编译的模块。

某些 verilog 元素需要特定的编译顺序。 在经典的 verilog 中,这些是宏定义(`define)。 系统verilog在全局scope中增加了包和定义。 如果您的文件包含这些元素,则必须在使用它们的代码之前列出它们。

另一种情况,主要与系统前的 verilog 世界相关,是使用 `include 在模块范围内插入公共参数定义。 这样,语句就会出现在模块内部。 在系统 verilog 中,这可以用包和导入语句替换。

对于顺序相关的编译元素,您可以将它们放在使用它们的代码之前的编译列表中。 然而,有时该命令可能难以执行。 `包括在这种情况下的帮助。 它们允许您保证编译顺序并将相关文件组合在一起。

Verilog 允许您`包含任何代码,它只是不在乎。 但是,根据我的经验,包含设计元素(模块)的代码会导致代码管理问题,并且在某些情况下会导致编译问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM