5553 - Why in LCMXO2 part I got the following error message: ERROR - Failed in Function VERIFY_SRAM_DONE_BIT ?

5553 - Why in LCMXO2 part I got the following error message: ERROR - Failed in Function VERIFY_SRAM_DONE_BIT ?

The "Failed in Function VERIFY_SRAM_DONE_BIT" means that, the Diamond Programmer is unable to determine the statue of the DONE bit in the device's Status Register. This could have happened due to following reasons:
The DONE bit is NOT SET due to the Configuration Failure. The Configuration can fail due to any of the following reasons:
a. Configuration flash data is corrupted.
b. Config Flash CRC does not match.
c. Config Flash is erased or if the Config flash is incomplete.

Recommended Suggestion:

- After Writing into the Flash, try reading back the configuration data from the flash and compare it with the source .jed file, and check if they match.
- Most of the times, signal integrity is the cause of such errors. Reducing the TCK Clock frequency will solve such issues.
- Make sure that the configuration flash is written correctly, and there are no interruptions during the programming.

The DONE bit is NOT SET because the device is still in the Configuration mode for the time greater than the predefined Programmer - Wait time:

One of the reason could be, if the user has enabled SDM port in his design, i.e. the PROGRAMn, INITn and DONE pins are configured to work as dedicated configuration pins even in the user mode. In such cases, if any of these pins are pulled and kept LOW by an external source for a time greater than the Diamond Programmer's Wait time, then the configuration process will be stalled until the external driver releases the control (Drive HIGH) on PROGRAMn/INITn/DONE pins.

Recommended Suggestion:

- Make sure, that the PROGRAMn/INITn/DONE config pins are not pulled LOW by an external driver.
- You can also try "Flash Background Erase, Program, Verify" option in the programmer. Background programming option will not check for SRAM DONE bit.

The DONE bit is SET, but in the status register, if either BUSY or FAIL bit is asserted then the programming would fail saying "Failed in Function VERIFY_SRAM_DONE_BIT". If the FAIL bit is set then, it indicated some programming failure. Need to identify the cause of the issue and debug further by reading the Status Register. If the BUSY bit is set then, it indicates the device is still performing previous operation. There are chances that Busy and the Fail flag could have been set inappropriately, may be due to insufficient delay between the operations performed.

Recommended Suggestion:

- Slowing down the TCK frequency is one option.
- Another option is to use SVF file programming method, using SVF debugger.


The DONE bit is SET, and the device is up and running, but the Diamond Programmer is unable to read the Status Register:
This can happen if the configuration port though which the device is getting programmed is itself DISABLED in the user logic mode. In such cases, the error can be ignored.


Recommended Suggestion:

- Make sure configuration port is not disabled, in the jed file.
- If the 'Disabling the Programming port' is intentional and required, then they can ignore the error message, since the device is up and running.
- You can also try "Flash Background Erase, Program, Verify" option in the programmer. Background programming option will not check for SRAM DONE bit.