I'm using a Cyclone V SoCkit board and programming the processor through a preloader loaded on the FPGA, and then booting the bare metal application from a custom partition on an SD card (though I found the same problem with using the FAT partition on the card).
I initialized the FPGA2SDRAM bridge and I'm reading values from the controller through the FPGA. This all works fine with a 256-bit bridge and a VHDL Avalon-MM master. I have the binary for the bare metal application compiled from a makefile that is based around the example posted here: www.altera.com/literature/an/cv_boot_guide.zip (http://www.altera.com/literature/an/cv_boot_guide.zip) I think there's probably some microprocessor functionality that I don't quite understand, but here's the problem: I'm reading the bare metal application memory space (0x100000-~0x10F000) through the FPGA, and I'm finding that the binary that I loaded onto the SD card (looking at it in a hex editor on a desktop) doesn't match what the FPGA reads. The differences are near the end of the binary, but it's more than just one word changing, so not a simple flag or CRC. There are several words changing at various places, and then remaining constant after. The length of the file also doesn't change, and the last few dozen words still match the expected results. Are instructions changed when the MPU pulls it from the SD card, and why? If not then, what else could cause this? I can provide any relevant information if there's something important I left out.