我想創建一個全局常量,它可以被所有模塊看到。我嘗試過不同的方法來在頂層模塊中聲明一個變量。但其他模塊不能識別它。Verilog中的全局常量
在我最模塊我有以下幾點:
`define MODELSIM 0
當我在賽靈思的時候,我將設置MODELSIM爲0。當我在我的ModelSim,我將其設置爲1
在其他文件等模塊,我有以下幾點:
if(MODELSIM)
,使不同的事情將取決於我是否在的ModelSim或賽靈思是發生。
我想創建一個全局常量,它可以被所有模塊看到。我嘗試過不同的方法來在頂層模塊中聲明一個變量。但其他模塊不能識別它。Verilog中的全局常量
在我最模塊我有以下幾點:
`define MODELSIM 0
當我在賽靈思的時候,我將設置MODELSIM爲0。當我在我的ModelSim,我將其設置爲1
在其他文件等模塊,我有以下幾點:
if(MODELSIM)
,使不同的事情將取決於我是否在的ModelSim或賽靈思是發生。
只需以頂級模塊的名稱作爲前綴即可。
module top;
integer myglobalvar;
endmodule
module any;
initial $display(top.myglobalvar);
endmodule
這適用於modelsim,但不適用於Xilinx。 – neuromancer 2011-05-15 12:08:54
然後賽靈思不支持標準的Verilog。如果您詢問Xilinx,那麼您應該在問題中提到這一點。 – mark4o 2011-05-15 14:16:42
模塊外引用通常是不可合成的。 – Marty 2011-05-15 15:22:15
有幾件事要注意。獲取簡單的一出的第一方式,用Verilog到預處理宏引用必須用反引號爲前綴,即:
if (`MODELSIM)
Verilog的標準規定,蜱定義具有全局作用域,這意味着如果你定義MODELSIM
在編譯的第一個文件中,該定義將應用於所有後續文件。但是,我相信Modelsim會將每個文件編譯到單獨的編譯單元中,因此最安全的做法是在每個verilog文件中創建一個包含宏定義的頭文件mydesign.vh
和`include
。 `define
適用於源文本的級別。 `define
與特定模塊之間沒有關聯,也無法按範圍訪問`define
。
一些文體筆記:
如果你正試圖使仿真和綜合之間的區別,它是標準的使用SYNTHESIS
宏這一點。許多綜合工具將自動定義它。謹慎處理合成條件。由於它有意讓您的模擬與您的綜合結果有所不同,因此這是一種在腳中拍攝自己的簡單方法。
對於簡單的標誌,最好使用1/undef而不是1/0的值。如果您稍後編寫`ifdef MACRO
,將事情定義爲零可能會導致問題。
你準備怎麼做?如果它是一個常量,那麼可以考慮使用'define statement – Marty 2011-05-15 13:50:41
我試圖設置一個常量,因爲有部分代碼在Modelsim中可用,但在Xilinx中不可用。我希望能夠使用全局常量,以便可以控制這些部分並根據我是在Modelsim還是Xilinx中來設置常量。 – neuromancer 2011-05-15 20:41:03
這聽起來像你想'定義 – 2011-05-15 20:47:18