verilog 巨集編譯語句使用

2021-09-25 21:29:34 字數 1378 閱讀 9354

一般情況下,verilog hdl源程式中所有的行都參加編譯。但是有時候希望對其中的一部份內容只有在條件滿足的時候才進行編譯,也就是對一部分內容指定編譯的條件,這就是「條件編譯」。有時,希望當滿足條件時對一組語句進行編譯,當條件不滿足時則對另外一組語句進行編譯。

條件編譯命令的幾種形式:

(1)`ifdef巨集名(識別符號)

程式段1

`else

程式段2

`endif

它的作用是當巨集名已經被定義過(此處需要採用`define命令定義),則對程式段1進行編譯,程式段2將被忽略;否則編譯程式段2,程式段1將被忽落。其中`else部分可以沒有,即:

(2)`ifdef巨集名(識別符號)

程式段1

`endif

這裡的「巨集名」是乙個verilog hdl 的識別符號,「程式段」可以是verilog hdl語句組,也可以是命令列。這些命令可以出現在源程式的任何地方。

注意:被忽略掉不進行編譯的程式段部分也要符合verilog hdl程式的語言規則。

通常在verilog hdl程式中用到ifdef、else、`endif編譯命令的情況有以下幾種:

(1)選擇乙個模板的不同代表部分。

(2)選擇不同的時許或結構資訊。

(3)對不同的eda工具,選擇不同的激勵。

最常用的情況是:verilog hdl**中的一部分可能適用於某個編譯環境,但不使用於另乙個環境,如果設計者不想為兩個環境建立兩個不同版本的verilog 設計,還有一種方法就是所謂的條件編譯,即設計者在**中指定其中某一部分只有在設定了特定的標誌後,這一段**才能被編譯,即設計者在**中指定其中某一部分只有在設定了特定的標識後,這一段**才能編譯。

設計者也可能希望在程式的執行中,只有當設定了某個標誌後,才能執行verilog 設計的某些部分,這就是所謂的條件執行。

條件編譯可以用編譯指令ifdef、else、elsif和endif實現。

ifdef和ifndef指令可以出現在設計的任何地方。設計者可以有條件地編譯語句、模組、語句塊、宣告和其他編譯指令。else指令時可選的。乙個else指令最多可以匹配乙個ifdef或者ifndef。乙個ifdef或者ifndef可以匹配任意數量的elsif命令。ifdef或ifndef總是用相應的endif來結束。

verilog檔案中,條件編譯標誌可以用define語句設定。如果沒有設定條件編譯標誌,那麼verilog編譯器會簡單地跳過該部分。ifdef語句中不允許使用布林表帶式,例如使用test && add_b2來表示編譯條件是不允許的。

數字IC之 Verilog編譯器指示語句

可以利用hdl描述中的一些特定的注釋語句來控制綜合工具的工作,從而彌補 環境和綜合環境之間的差異,這些注釋語句稱為編譯器指示語句。verilog編譯器指示語句 1.translate off translate on 這組語句用來指示dc停止翻譯 synopsys.translate off 之後的...

巨集定義和巨集編譯

以下是巨集定義的一些用法11.4.2 if defined else endif 此編譯指令為 ifdef else endif的等價編譯指令。其語法格式如下 if defined 常量表示式 段1 else 段2 endif 或 if defined 常量表示式 段1 else 段2 endif ...

Verilog中幾種賦值語句

在verilog中有兩種型別的賦值語句 連續賦值和過程賦值 賦值表示式由三個部分組成 左 值賦值運算子 或 和右值右值可以是任何型別的資料報括net型和register型但對連續 賦值 左值必須是net型別的資料 而過程賦值 左值必須是register型別的資料 下面將作詳細描 述1連續賦值 在in...