2017-07-07 7 views
1

「ルートスコープ宣言がのverilog 95/2Kモードでは使用できません」:Vivadoシムエラー:私はザイリンクスVivado 2016.4で私のトップレベルのモジュールをシミュレートするために行くとき、私は奇妙なエラーが表示

ERROR: [VRFC 10-1342] root scope declaration is not allowed in verilog 95/2K mode [<...>/header.vh] 

IをVivado SimulatorとVerilog 2001が指定されています。マイheader.vhは、次のようになります。

`ifndef _header_vh_ 
`define _header_vh_ 

    function integer clog2; 
     input integer value; 
     begin 
      value = value - 1; 
      for (clog2 = 0; value > 0; clog2 = clog2 + 1) 
       value = value >> 1; 
     end 
    endfunction 

`endif 

答えて

2

このエラーは、関数のスコープとして生じるclog2、(それは、モジュール内で宣言されていないとして)効果的にルートに設定されています。このスコープ宣言はVerilog 2001では許可されていませんが、それ以降のバージョン(SystemVerilogなど)で使用されています。 SystemVerilogに切り替えると問題は解決しますが(推奨されません)、関数のモジュールラッパーを導入すれば十分です。

`ifndef _header_vh_ 
`define _header_vh_ 

module header(); 
    function integer clog2; 
     input integer value; 
     begin 
      value = value - 1; 
      for (clog2 = 0; value > 0; clog2 = clog2 + 1) 
       value = value >> 1; 
     end 
    endfunction 
endmodule 

`endif 
+2

ルートのスコープ内で関数やその他のものを宣言すると、異なるパーツとips間で名前の衝突が起こる可能性があるため、プロジェクトで問題が発生します。だから、やってはいけません。常にモジュールやシステムのVerilogパッケージでラップしてください。 – Serge

関連する問題