See below steps to significantly improve the boot/configuration time from internal flash:
1.)
In your source project, generate a bitstream that contains the following:
* Set the FLASH_CLK_FREQ = 112.5MHz
* Set CONFIG_IOSLEW = FAST
2.)
*Launch the Deployment tool 2022.1SP1 version and select Function Type: External Memory, Output File Type: Ping-Pong Boot
*Select 2 MachXO5-NX bitstream files or .jed files, namely primary boot (CFG0) and secondary boot (CFG1).
If you are using only a single boot image (CFG0 only for example), then you can put it twice (it will not matter later on) as shown below.
*
Select the “SPI Flash Read Mode”: Quad I/O SPI Flash Read
Set the Starting Address for the Primary Pattern: 0x00010000 (CFG0)
Set the Starting Address for the Secondary Pattern: 0x00100000 (CFG1)
Set the First Boot Selection: Primary Patten or Secondary Pattern (as applicable)
Check the “Generate Jump Table Only” option - this will generate the header file only to be used later in Radiant Programmer
*Set the output of the Header .mcs name
*Click on Generate to produce the .mcs file (this .mcs file will be used to program the internal flash header)
*Program the Quad Read Mode header (.mcs file generated from the Deployment Tool) file as well as your configuration image (CFG0) in the internal flash memory
HW RESULTS:
*After successful programming of the internal flash, perform a power cycle and then measure download time. See below the waveform measurement that significantly reduces the configuration time via self-download mode to ~12ms from ~373ms.