![](/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.