簡體   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