The Spartan-3A device can be configured from the XCFxxP devices in SelectMAP mode. This configuration method uses the BPI mode pin setting for the Spartan-3A device.
When the PROM is loaded with an ".mcs" file from iMPACT, configuration fails, and the GHIGH bit in the Status Register reads out in iMPACT after a configuration attempt is 0.
The problem is that the Spartan-3A configuration interface will ignore the first 38 data bytes read into the device when in BPI mode. This is due to a timing limitation of BPI Flash devices where the first few bytes read out of the device are not valid data.
This design consideration for the BPI Flash devices causes a problem when loading from a Platform Flash where data is presented as soon as CCLK arrives at the PROM.
In this scenario, the configuration fails because the first 38 bytes read into the FPGA are not registered into the configuration logic and the device misses the sync word. At this point, the Spartan-3A device will not see the rest of the bitstream and configuration will fail.
The failure can be diagnosed in iMPACT by reading the Status Register of the FPGA after the configuration has been attempted. If this is the problem, the GHIGH bit in the FPGA will still be 0, as well as DONE, GTS, and GWE (components in the start up sequence).
To work around this problem, the PROM data file and ".mcs" file need to be padded with FFs to ensure the devices do not see the sync work until data inputs are being registered. There will need to be a minimum of 76 "F" characters added to the file.
To do this in the tools, change the ".mcs" file to a hex file, manually add 100 Fs to the beginning of the hex file, and translate this file back to the ".mcs" file format. 100 Fs can be added as extra padding.
Translation from MCS to HEX:
promgen -p hex -r input.mcs -o out.hex
Translation from HEX to MCS:
promgen -p mcs -r out.hex -o out_mod.mcs