1

すべての verilog ファイルのマクロを 1 つの verilog ファイル (FabScalarParam.v など) で定義し、最初に FabScalarParam.v を system.do ファイルでコンパイルしてから、他の verilog ファイルをコンパイルします。

しかし、「do 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 オプション --> マクロ。

私はモデルシム 6.5、ザイリンクス edk 12.4 を使用しています。

4

5 に答える 5

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 *
 *************/
于 2013-01-08T23:54:55.660 に答える
1

私は、modelsim のコンパイル リストにグローバル ファイルを設定するのに役立つものをインターネット上で見つけることができません。したがって、問題を解決するために、各ファイルに手動で `include ... を追加するだけです。ばかげていますが、うまくいきます。

誰かがモデルシムのコンパイル リストにグローバル ファイルを設定する方法を知っている場合は、それを更新してください。:-) ありがとう。

于 2012-12-25T11:09:30.753 に答える
1

プロジェクトをスクリプトでコンパイルしたときに、同じ問題が発生しました。
最後に、マクロ ファイルと Verilog ファイルを異なるスコープでコンパイルできないことがわかりました。
元:

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

必ず:

vlog -work work macro.v project.v

それらを 1 つの vlog コマンドでコンパイルすると、問題を解決できます。

于 2014-12-21T00:18:51.167 に答える