UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 50171

PlanAhead - CRITICAL WARNING: [Designutils-31] Unrecognized symbol [0].usub" given for submodule created with generate statement

Description

When a sub module is generated using the "generate" statement in my HDL code, PlanAhead constraint parsing does not recognize the generated sub modules.

In the example below I have generated three cores:

     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] )
          ) ;



The example code produces three modules with the names:

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

 

However, these modules do not seem to be recognized by PlanAhead when applying constraints.

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]


If "*" is added before the instance name, it is recognized at first.

Initial UCF:

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


Modified UCF:

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

However, after opening the implemented design, PlanAhead does not recognize the block again.

Additionally, any primitive under the blocks which were synthesized with the "generate" statement do not appear on "Device" windows although import implements placement.

 

 

Solution

This happens because the instance name starts with a "[".

You can get the instances properly assigned to the AREA_GROUPs by doing an assign through the GUI (or Tcl):
 

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


However, if you open/reopen any view this link gets lost again and the Tcl console issues:
 

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


You can work around this issue by adding a "generate_block_name" to the generate statement:
 

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

This will name the instances "test[0].usub", "test[1].usub", and "test[2].usub".
AR# 50171
Date Created 11/06/2012
Last Updated 08/29/2014
Status Active
Type Known Issues
Tools
  • PlanAhead