05-13-2010 05:06 PM
- Spartan-3A DSP 1800 development board
- ISE 11.4
- MicroBlaze w/ 16kB local RAM
- 128MB external DDR2 RAM
- 16MB BPI flash
I'm trying to use the "Program Flash Memory" feature within SDK. My SREC file size is about 1MB and I'm putting it at a 2MB offset within the 16MB external parallel flash (so that it sits well above the FPGA bitstream that resides at the bottom). When I use the local RAM as a scratch space, the programming of the flash fails (for unknown reasons). When I read back what was programmed, only about 5kB or so is valid, then the rest is blank (i.e. all ones). When I use the external 128MB DDR2 as scratch, the programming works just fine.
I'm guessing this has to do with how much of the SREC is buffered before writing within the scratch space. With the DDR2, I'm guessing the entire thing is buffered. But with the 16kB local RAM, it obviously needs to be written in chunks. These chunks are likely what provide the percentage output within the XMD console because with the DDR2, it eventually says 100% done without any intermediary messages.
I'm guessing there is a bug somewhere either with the flashwriter.tcl script or the flash writing code that runs on the MicroBlaze, probably in the buffering logic. Is this true and is it something that's been fixed either in 11.5 or 12.1? Or am I alone in encountering this issue?
06-11-2010 09:15 AM
I'm not sure that it is 100% related to what I was seeing. When using the BRAM as the scratch, mine would always complete the programming process--steadily counting from 0% to 100% in like 3% increments or so in the XMD console. But when I did a raw read of the contents of the flash memory, only about 5kB or so was actually written--the rest was erased. This naturally caused the SREC boot loader to fail.
Either way, I have since implemented my own "image upload" process over a TCP/IP connection, so this no longer directly affects me.
Thanks for the answer though!