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!

Showing results for 
Search instead for 
Did you mean: 
Registered: ‎08-23-2017

Updatemem and .smi files

I'm  having issues with the updatemem utility. The only way in which the updatemem utility works for us is if we specify a single memory block in the memory specification file (.smi) that is large enough to contain the contents extracted from the ELF file.


I have a microblaze executable that is larger than a single BRAM, however, Vivado has provided 8 identical BRAMs that are ganged together to provide one large BRAM space to hold the executable. All I have been able to do so far is modify the SMI file that VIVADO creates to combine the BRAM definitions together to make the updatemem think that the BRAM size is larger than it really is for a single BRAM. Then I have to manually break the generated MEM file up into multiple MEM files to populate the actual number of physical BRAMs being used.




So here’s our process:

  1. Define project in Vivado, adding microblaze and several small BRAM blocks that it can access intended to hold the program code. However, one single BRAM is not large enough to contain all of the program code and so multiple blocks are needed.
  2. Compile the firmware using SDK and create an ELF file
  3. Associate the ELF file to the microblaze
  4. Export_simulation


The export_simulation generates a SMI file AND it automatically runs something underneath to create MEM files that are needed for the simulation. HOWEVER, the export_simulation reports an ERROR saying that the BRAM block is too small to hold the program code!!! This means that export_simulation is running something similar to updatemem underneath and running into the same issues as I’ve already seen


So additional steps that we do to get the MEM files are:

  1. Edit the autogenerated SMI file from the export_simulation and resize the first BRAM block size so that it is large enough to hold the program code and delete all the other BRAM block definitions.
  2. Run the updatemem utility using the modified SMI file.
  3. Manually edit the MEM file that is generated and break it up into multiple files that represent the smaller BRAM blocks that were utilized in the design.


Should we be doing the extra steps?.or is there a step that I'm missing?

0 Kudos
2 Replies
Registered: ‎09-12-2007

Re: Updatemem and .smi files

Can you post the smi, and the elf/mem file. Also, can you post the updatemem command you are using?

0 Kudos
Registered: ‎08-23-2017

Re: Updatemem and .smi files



Here are the commands


updatemem -meminfo working.smi -data sim.elf -proc fpga_top_i/emm_hier/microblaze_0

updatemem -meminfo fails.smi -data sim.elf - proc fpga_top_i/emm_hier/microblaze_0


I will send the files . I am unable to upload it here. 



0 Kudos