Tools used: EDK and ISE 6.2 on Win2000. I compiled the Memec HelloWorld project and successfully ran it on their Spartan IIELC reference design board.
With this working project, I changed its properties to a sub-module and exported it to Project Navigator project that had a schematic top level file. I created the library symbol for the sub-module, placed the sub-module and an counter on the schematic and I ran it all the way to Generate Programming File. When I downloaded the bit file, the counter worked, but the Microblaze did not. Even going back to Platform Studio and using the import function did not create a working bit file.
I found by extensive poking around that the Project Navigator does NOT automatically update the BMM file with the newly placed locations of BRAM that holds the Microblaze program. (The export from XPS did add a system.BMM, but that file did not have any placement info--the file just had the names of the BRAM instances and the memory bit positions.) Data2Mem needs the placement information to create a new download file. I found that I could use the FPGA editor in Project Navigator to find out where the last PAR operation put the BRAMs. I created a new BMM file from the system.BMM and included the placement info. Specifying this BMM file with the .ELF allowed Data2Mem to create a WORKING Microblaze sub-module bit file. You can manually run Data2Mem in the Project Navigator or use the dialog in XPS (which calls Data2Mem in the script) as long as you supply the correct BMM file.
A valid line in a BMM text file for Data2Mem is: bram_1mb/bram_1mb/ramb4_s2_s2_0 [31:30] PLACED = R3C0;
The BMM files exported to Project Navigator by XPS did not have the field starting with "PLACED.." After going from PAR to bit file creation, the BMM file still did not change, even though the subsequent Data2Mem procedure to combine the ELF data requires placement info in the BMM. It is quite reasonable not to supply any placement before PAR, because PAR is allowed to move things around, but the final placement info should be extracted and updated into the BMM file. In this example, I manually added the placement information.
I have seen a few posts regarding this problem. Is there a button or procedure in Project Navigator to automatically extract new BRAM locations and update the BMM file? Of course I already have a work-around, like forgetting about sub-modules and keeping the project exclusively in XPS !