Programming the SPI Flash Using Fabric User Logic

When the system controller’s SPI is enabled and configured as master, the system controller hands over the control of the SPI to the fabric (after device power-up). The JTAG controller that starts programming the SPI flash, or any system service request from the fabric user logic, can take over the control of SPI from the fabric.

The fabric user logic gets the programming images from an external memory source, as shown in the following figure. The fabric user logic accesses the external SPI flash using the CoreSPIcontroller and PF_SPI macro provided in Libero Catalog. The external SPI flash is programmed using SPI master SCK frequency. The SCK frequency can be configured in user logic.

System controller ​can only access dedicated SPI ​I/Os (SPI Interface pins). System Controller cannot access the fabric IOs. As a result, all the services from the system controller using SPI (that is, ​programming) can only use the ​dedicated SPI I/Os. The user can use PF_SPI, a macro provided in the Libero Catalog to ​get access to the dedicated ​SPI I/Os from the fabric ​(that is, once the system controller releases them) to ​access the SPI flash memory.​

Note: To fetch the programming images and write to the external SPI flash, both the device families must be preprogrammed with a design. For more information, see AC466: PolarFire FPGA Auto Update and In-Application Programming Application Note.
Figure 1. SPI Flash Programming Using Fabric User Logic