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# 59259

2013.4 - Vivado IPI - write_bmm Support with non-processor Based Designs

Description

When attempting to back-annotate a .bmm file for a BRAM design, the placement information does not seem to appear in the .bmm file.

After a run, I open the implemented design, and enter the following in the TCL console:
set_property BMM_INFO_DESIGN {top_level.bmm} [current_design]

write_bmm top_level_bm.bmm

I then receive the following warnings and errors:
 

CRITICAL WARNING: [Memdata 28-127] data2mem failed because the ADDRESS_SPACE specification is incorrect or empty. Check the bmm file or the bmm_info_* properties. The design BRAM initialization strings have not been updated.

ERROR: [Common 17-69] Command failed: Failed to create a merged bmm file.

Solution

Non processor based designs are not supported by the current code.  

This is something, however, that is on the roadmap for a future release.

For now, if you are using the BMG you will have to manually create the BMM file using the below steps:

1) Open the BMG XCI file and look at the summary:


 Here you can see that the BRAM resources are 4 x RAMB36s.

If you open the implemented design and do a Ctrl+F you can find your BRAMs:

 

Here you can see the BRAM instances, with the LOC seen:





In the example above, this BMM file would look like:

ADDRESS_BLOCK U0 RAMB36 [0x00000000:0x000047FF]

BUS_BLOCK

U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[0].ram.r/v6_noinit.ram [31:24] PLACED = X0Y31;

U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[1].ram.r/v6_noinit.ram [23:16] PLACED = X0Y30;

U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[2].ram.r/v6_noinit.ram [15:8] PLACED = X0Y32;

U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[3].ram.r/v6_noinit.ram [7:0] PLACED = X0Y33;

END_BUS_BLOCK;

END_ADDRESS_BLOCK;

 

The mem file contains the following:

@00000000

1DEAD

2ABBA

 

To verify this you can generate the bitstream, using the commands below:

data2mem -bm test.bmm -bd test.mem -bt test.bit -o b updated.bit
data2mem -bm test.bmm -bt updated.bit -d > dump_mem.txt

 

If you open the dump_mem.txt file you can see that the memory is populated. 

For example:




Since we are using the RAMB36, this uses the parity bits. 


To figure out the parity bits:

@00000000

0001 1101 1110 1010 1101

0010 1010 1011 1011 1010


The first two bits are discarded. 

The second two bits are the parity bits seen below:


 


AR# 59259
Date Created 01/28/2014
Last Updated 03/26/2015
Status Active
Type Known Issues
Tools
  • Vivado Design Suite
  • EDK