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!

Page Bookmarked

AR# 59259

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


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.


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]


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;




The mem file contains the following:





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:


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 03/26/2015
Status Archive
Type Known Issues
  • Vivado Design Suite
  • EDK