AR# 50171

PlanAhead - generate 文で作成したサブモジュールに対し「CRITICAL WARNING: [Designutils-31] Unrecognized symbol [0].usub」というメッセージが表示される

説明

HDL コードで generate 文を使用してサブモジュールを生成すると、PlanAhead の制約処理で生成されたサブモジュールが認識されません。

次の例では、3 つのコアを生成しました。

     generate genvar i ;
     for( i=0; i<INSNUM; i=i+1 ) begin

          dut_sub
          #(
          .BUSWIDTH( BUSWIDTH ) ,
          .REGNUM( 248 ),
          .CNTNUM( 160 )
          ) usub (
          .sub( SUB[i] ),
          .clk( CLK_320MHZ ),
          .RST( RST ),
          .din ( din ),
          .dout ( douw[i] )
          ) ;



このコード例では、次の名前のモジュールが 3 つ生成されます。

  • .\[1].usub#dut_sub
  • .\[2].usub#dut_sub
  • .\[0].usub#dut_sub  

 

しかし、制約の適用時に PlanAhead ではこれらのモジュールが認識されないようです。

CRITICAL WARNING: [Designutils-31] Unrecognized symbol [0].usub" [/proj/project_2/project_2.srcs/constrs_1/imports/scr_files/top.ucf:10]
CRITICAL WARNING: [Designutils-31] Unrecognized symbol [2].usub" [/proj/project_2/project_2.srcs/constrs_1/imports/scr_files/top.ucf:13]
CRITICAL WARNING: [Designutils-31] Unrecognized symbol [1].usub" [/proj/project_2/project_2.srcs/constrs_1/imports/scr_files/top.ucf:16]


アスタリスク (*) がインスタンス名の前に追加されていると、始めは認識されます。

最初の UCF :

INST "[2].usub" AREA_GROUP = "pblock_[2].usub";
AREA_GROUP "pblock_[2].usub" RANGE=SLICE_X0Y150:SLICE_X30Y199;


変更後の UCF :

INST "*[2].usub" AREA_GROUP = "pblock_[2].usub";
AREA_GROUP "pblock_[2].usub" RANGE=SLICE_X0Y150:SLICE_X30Y199;

しかし、インプリメントされたデザインを開くと、PlanAhead ではまたこのブロックが認識されなくなります。

また、インプリメント配置がインポートされたにもかかわらず、generate 文で合成されたブロックの下にあるプリミティブがすべて [Device] ビューに表示されません。

 

 

ソリューション

この問題は、インスタンス名が [ で始まっているために発生しています。

GUI (または Tcl) でこれらのインスタンスを正しく AREA_GROUP に割り当てることができます。

add_cells_to_pblock {pblock_[0].usub} [get_cells [list {[0].usub}]] -clear_locs
add_cells_to_pblock {pblock_[1].usub} [get_cells [list {[1].usub}]] -clear_locs
add_cells_to_pblock {pblock_[2].usub} [get_cells [list {[2].usub}]] -clear_locs


しかし、ビューを開いたり、開き直したりすると、このリンクが失われて Tcl コンソールに次のメッセージが表示されます。

CRITICAL WARNING: [Designutils-31] Unrecognized symbol [2].usub" [/proj/project_2/project_2.runs/impl_1_2/.constrs/dut_top.ucf:10]


generate 文に generate_block_name を追加するとこの問題を回避できます。

generate genvar i ;
for( i=0; i<INSNUM; i=i+1 ) begin: test

これでインスタンスに「test[0].usub」、「test[1].usub」、「test[2].usub」という名前が付けられます。
AR# 50171
日付 08/29/2014
ステータス アーカイブ
種類 既知の問題
ツール