I have a contiguous address space consisting of multiple memory controllers, but upon inspection of the final "system_bd.dmm" file, the subsequent memories associated with the additional memory controllers do not have any location constraints attached to them.
You can work around this issue as follows:
1. Run the entire hardware flow in XPS (Tools -> Update Bitstream) or in ISE to generate an annotated BMM file.
2. Open a command prompt.
3. At the prompt, enter:
xdl -ncd2xdl system.ncd system_xdl.txt
4. Open the system_bd.bmm file and find the block RAM instances that do not have placement constraints.
5. Parse the system_xdl.txt (via sed, grep, awk, perl, etc) to extract the placement information.
NOTE: There will be two placement constraints. One is the map grid format; the other is the "old" format. You want the old format, which is associated with the RAMB name and not the BRAM name.
6. Modify the BMM file to put all the BRAM location constraints into the "system_bd.bmm" file.
7. Save the BMM file, and run Data2MEM in stand-alone mode as follows:
> data2mem -bm system_bd.bmm -bd executable.elf tag top_level_tag_name
> -bt system.bit -o b down.bit
Top_level_tag_name is the top address block instance name.
The "download.bit" file that is generated should have the entire bitstream initialized.
This problem has been fixed in the latest EDK 9.1i Service Pack, available at:
The first service pack containing the fix is EDK 9.1i Service Pack 1.