vc6 編譯前 巨集定義 手把手教你使用條件編譯

2021-10-12 07:56:13 字數 3531 閱讀 4741

verilog支援一些編譯器指令,這些指令實際上指導編譯器以某種方式處理**。例如,一部分**可能代表某個功能的實現,如果不使用該功能,應該有某種方式**包括在設計中。同理,在使用systemverilog編寫驗證環境時,同樣可以使用這種方式使一部分**不在環境中。

這可以通過條件編譯來解決,可以將**包裝在編譯器指令中,這些指令告訴編譯器在定義命名標誌時包括或不包括要編譯的**。

可以使用`ifdef`ifndef關鍵字來實現條件編譯。這些關鍵字可以出現在**的任何位置,並且可以巢狀在另乙個關鍵字中。

關鍵字`ifdef只是告訴編譯器在下乙個`else`endif之前,如果給定的名為flag的巨集是使用`define定義的,則要包含該**。

// style #1: only single `ifdef`ifdef   // statements`endif// style #2: `ifdef with `else part`ifdef   // statements`else  // statements`endif// style #3: `ifdef with additional ifdefs`ifdef   // statements`elsif   // statements`elsif   // statements`else  // statements`endif
關鍵字`ifndef只是告訴編譯器在下乙個`else`endif之前,如果未使用`define定義給定名為flag的巨集之前一直包含該**段。

module my_design (input clk, d,`ifdef include_rstn  input rstn,`endif  output reg q);    always @ (posedge clk) begin`ifdef include_rstn    if (!rstn) begin      q <= 0;    end else`endif    begin      q <= d;    end  endendmodule
請注意,在預設情況下,在設計的編譯過程中將不包括rstn,因此它不會出現在埠列表中。但是,如果屬於檔案編譯列表一部分任何檔案中定義了名為in_clude_rstn的巨集,或者通過編譯選項或者命令列傳遞給編譯器,則rstn將包含在編譯中。

以下示例在單獨的`ifdef作用域內有兩個顯示語句,他們沒有預設的`else部分。因此,這意味著預設情況下將不顯示任何內容。如果定義了巨集macro1macro2,則包括相應的顯示訊息,並將在**期間顯示。

可以編寫相同的**,`ifndef的結果恰好相反。

`ifdef可以彼此巢狀,以使用定義的巨集建立複雜的**包含和排除方式。

請注意,只要未定義父巨集,就不會編譯其內任何其他巢狀巨集的定義。例如,沒有定義巨集flag,即使定義巨集nest1_a或巨集white,也不會使編譯器選擇巢狀的**。

以上就是條件編譯語法和常規的使用方法。作為驗證工程師,經常可以在rtl**中看到條件編譯,例如使用條件編譯隔離前端**和fpga**的設計**,驗證人員在進行模組級驗證的時候也會使用條件編譯,比如top頂層例化dut的時候需要使用條件編譯把模組級的例化和系統整合時需要的介面連線隔離開,方便集**員在子系統整合時進行使用。當然還有其他情況會使用條件編譯。

uvm_root是什麼?

easier uvm編碼指南之 part1:詞法準則和命名約定

easier uvm編碼指南之 part2:通用**結構

easier uvm編碼指南之 part3:時鐘、時序、同步和介面

easier uvm編碼指南之 part4:transactions

easier uvm編碼指南之 part5:sequences

VC6 編譯選項問題

為了能將原始檔編譯成dll目標 以前總以為是要設定 mt,md mt d,md d.那麼在link命令列中有 1 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.li...

VC 6中的預編譯頭

vc 6中的預編譯頭 預編譯頭的概念 在很多程式中,每個原始檔都存在一些相同的部分。比如要包括相同的一些標頭檔案,而且這些標頭檔案可能很長,例如 window.h 如果用普通的方法編譯這些原始檔,對這些標頭檔案在每個原始檔中的出現都要重新編譯,作了很多重複工作。如果能將這些標頭檔案專門進行編譯,並且...

使用VC6編譯和使用Ogre引擎

開發網 ogre是開源的封裝了directx和opengl的3d引擎 官方主頁為 安裝 http www.mscto.com 首先解壓縮ogre.rar到你喜歡的目錄 我是放在e ogresdk 然後分別解壓ogrewin32dependencies 0.13.0.zip和dependenciess...