2012-12-23 36 views
0

我已經在一個verilog文件中定義了所有verilog文件的宏,比如FabScalarParam.v ,然後我首先在system.do文件中編譯FabScalarParam.v,然後編譯其他的verilog文件。在verilog文件中定義的宏,但是錯誤在modelsim中顯示了未分配的宏im

但是當我運行「做system.do」編譯設計,它讓我看到這樣的錯誤,

# ** Error: I:/programming/EDK/project_4/pcores/instruction_side_v1_00_a/hdl/verilog/StallUnit.v(6): (vlog-2163) Macro `MAX_STALL_CYCLES_LOG is undefined. 

它說,一些宏沒有定義。是否有任何方法可以在modelsim的編譯列表中選擇FabScalarParam.v作爲全局文件?由於宏數量龐大,我無法使用以下方法指定所有宏:編譯 - >編譯選項 - > verilog &系統verilog - >其他verilog選項 - >宏。

我使用的ModelSim 6.5,賽靈思EDK 12.4

回答

0

我找不到任何在互聯網上有用的設置全局文件中的ModelSim編譯列表。所以,我只是在每個文件中手動添加include ...來解決問題。雖然它很愚蠢,但它工作正常。

如果有人知道如何在modelsim的編譯列表中設置全局文件,請更新它。 :-) 謝謝。

2

這與編譯順序有關。編譯器指令(包括宏)由編譯器線性處理。有關更多詳細信息,請參閱IEEE1364-2001第19節或IEEE1800-2009第22節。確保宏文件是編譯的第一個文件。

手動添加`include也有效,但是您的編譯器可能會給出宏定義的警告。建議將宏定義封裝在ifdef/ifndef中。這樣做可以解決宏定義的警告。如果多個文件引用相同的`include',那麼宏封裝也可以提高編譯器的性能。看下面的例子。

macros.vh:

`ifndef macros_vh 
// NOTE: for Verilog 1995 `ifndef is not supported use `ifdef macros_vh `else 
`define macros_vh 
/************** 
* your macros * 
* `define ... * 
***************/ 
`endif 

然後在您的Verilog文件(* .V/* .sv)

`include "macro.vh" 
/************* 
* your code * 
*************/ 
0

我有同樣的問題,當我整理我的腳本工程。
最後,我發現你不能在不同的範圍內編譯你的宏和verilog文件。
EX:

vlog -work work macro.v 
vlog -work work project.v 

你必須:

vlog -work work macro.v project.v 

於一體的VLOG命令編譯他們可以解決問題。

0

你可以編譯的Verilog文件,並定義將通過增加下列選項應用於該文件的VLOG預編譯宏:

+define+<macro_name>[=<macro_text>] 

其同編譯器指令:`定義MACRO_NAME macro_text

例如:

vlog +define+macro_name -work work project.v