PolarFire SoC

Important

This documentation is not recommended for new RISC-V projects. New RISC-V projects should reference the newest version of the documentation. Users targeting Arm devices can still use this documentation as their reference.

The newest version of the documentation can be found here: https://mi-v-ecosystem.github.io/SoftConsole-Documentation/

PolarFire SoC boot mode programming support in SoftConsole

Required tools

  • SoftConsole v2021.3

  • Libero SoC v2021.3 or Programming and Debug Tools v2021.3

PolarFire SoC Boot Modes

PolarFire SoC supports four boot modes which determine what happens when the device is powered on/reset. In particular, what exactly the RISC-V multi-core CPU Core Complex part of PolarFire SoC’s Microcontroller Subsystem (MSS) does out of reset:

  • Boot mode 0 “idle boot”: boots and simply waits for a debugger connection.

  • Boot mode 1 “non-secure boot”: boots and executes a program stored in eNVM which has been linked for storage in and execution from eNVM.

  • Boot mode 2 “user secure boot”: boots, checks the integrity of an encrypted and/or authenticated program stored in sNVM and, if it is correct, copies it to LIM (Loosely Integrated Memory) RAM and starts executing it from there. The program executed may be a secure boot loader implemented by the user. The program is linked for execution from LIM.

  • Boot mode 3 “factory secure boot”: boots, verifies a program image stored in eNVM using an Elliptic Curve Digital Signature Algorithm (ECDSA) and, if correct, starts executing the program from eNVM. The program is linked for storage in and execution from eNVM.

Refer to the PolarFire SoC documentation for more detailed information about these boot modes.

https://www.microsemi.com/product-directory/soc-fpgas/5498-polarfire-soc-fpga#documentation

fpgenprog

fpgenprog is the tool provided by Libero SoC and Programming and Debug Tools for programming PolarFire SoC boot modes and storing the associated programs in NVM (eNVM or sNVM). fpgenprog calls other programming file generation and programming tools (for example FlashPro Express) in order to perform boot mode programming. fpgenprog and related tools are NOT bundled with SoftConsole so Libero SoC or Programming and Debug Tools must be installed in order to make them available to SoftConsole.

Refer to the website for more information about these tools:

Libero SoC: https://www.microsemi.com/product-directory/design-resources/1750-libero-soc

Programming and Debug Tools: https://www.microsemi.com/product-directory/dev-tools/5592-programming-and-debug#downloads

By default Libero SoC v2021.3 and Programming and Debug tools v2021.3 install into the following locations:

  • Windows

    • C:\Microsemi\Libero_SoC_v2021.3

    • C:\Microsemi\Program_Debug_v2021.3

  • Linux

    • /usr/local/microsemi/Libero_SoC_v2021.3

    • /usr/local/microsemi/Program_Debug_v2021.3

These locations will be tested trying to find the fpgenprog binary when the FPGENPROG is not explicitly set:

  • Windows

    • C:\Microsemi\Libero_SoC_v2021.3\Designer\bin64\fpgenprog.exe

    • C:\Microsemi\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe

  • Linux

    • /usr/local/microsemi/Libero_SoC_v2021.3/Designer/bin64/fpgenprog

    • /usr/local/microsemi/Program_Debug_v2021.3/Program_Debug_Tool/bin64/fpgenprog

Note

These are the default locations and the actual location will differ if a non-default install location is specified at install time.

Note

If the Libero v2021.3 or Program and Debug v2021.3 are installed in the default path and FPGENPROG is not set, then they should be automatically detected by the mpfsBootmodeProgrammer.jar. When autodetection works well then it’s best to not have FPGENPROG environment variable set. Set the FPGENPROG only if the autodetection fails. When setting the FPGENPROG environment variable, then make sure to set it to the full path including the binary itself. For example: D:\Libero_SoC_v2021.3\Designer\bin64\fpgenprog.exe

mpfsBootmodeProgrammer

In order to simplify boot mode programming, SoftConsole bundles the mpfsBootmodeProgrammer Java program utility:

<softconsole-install-dir>/extras/mpfs/mpfsBootmodeProgrammer.jar

mpfsBootmodeProgrammer takes care of the details of converting a program executable ELF file for use with the selected boot mode and calling fpgenprog to program target with the relevant boot mode data and store the boot program image in NVM (eNVM or sNVM).

Full sources for mpfsBootmodeProgrammer and instructions on how to build it are also bundled with SoftConsole (in the same folder as the JAR file).

Note

The mpfsBootmodeProgrammer.jar is tested and developed against the SoftConsole’s bundled Java JRE environment. If the mpfsBootmodeProgrammer.jar is used outside SoftConsole then for the best results always use the SoftConsole’s Java JRE.

Boot mode programming external launch configurations

The SoftConsole workspace comes preconfigured with four external tool launch configurations, one for each of the four boot modes, which are accessible from the External Tools toolbar button or Main Menu > External Tools.

  • PolarFire SoC program idle boot mode 0

  • PolarFire SoC program non-secure boot mode 1

  • PolarFire SoC program user secure boot mode 2

  • PolarFire SoC program factory secure boot mode 3

Each of these external tool launch configurations passes a default set of command line options to the mpfsBootmodeProgrammer utility for the relevant boot mode. These command line options can be adjusted if needed. See below for the mpfsBootmodeProgrammer usage/help text which describes all options.

By default, with the exception of boot mode 0, these external tool launch use, as their working directory, the selected project’s active build configuration directory and attempts to process the ELF file found there.

The project to be used for boot mode programming must be selected in the Project Explorer and the relevant build configuration must be built and the ELF file exist in order for the boot mode 1, 2 and 3 external tool launch configurations to work.

Boot mode 0 does not require a project to be selected/built and, by default, works in the <SoftConsole-install-dir>/extras/mpfs/bootmode0 directory.

A project can be selected in the Project Explorer by clicking on any folder in the project hierarchy. If no project is selected then a message of the following form will be displayed:

Problem Occurred
'Launching PolarFire SoC program ... boot mode ...' has encountered a problem.
Variable references empty selection '${project_loc}'

The active build configuration can be selected in SoftConsole in different ways including by using the “Hammer” build toolbar button dropdown list of available build configurations or by:

digraph {
         graph [rankdir="LR", ranksep=.01, bgcolor=transparent];
         node [fontname="Verdana", fontsize="9", shape="rectangle", width=.1, height=.2, margin=".04,.01", style=filled, fillcolor=white];
         edge [arrowsize=.7];
         "Right click on <your_project> in the Project Explorer" -> "Build Configurations" -> "Set Active" -> "<build-configuration>"
     }

If the selected build configuration’s directory does not exist then a message of the following form will be displayed:

Problem Occurred
'Launching PolarFire SoC program ... boot mode ...' has encountered a problem.
The working directory ... does not exist for the external tool named PolarFire SoC program ... boot mode ...

If no ELF file exists or other validation checks fail then the mpfsBootmodeProgrammer utility will emit an appropriate warning or error message to the output log.

mpfsBootmodeProgrammer always generated a <workdir>/bootmode<n>/debugLog.txt log file which contains detailed information about the tasks carried out.

Generated artifacts

mpfsBootmodeProgrammer works in the specified workdir and generates artifacts into a bootmodeN (0 <= N <= 3) directory below this.

By default, the preconfigured boot mode 0 external tool launch configuration works in <SoftConsole-install-dir>/extras/mpfs and generates aretefacts into the bootmode0 directory below this.

By default, the preconfigured boot mode 1-3 external tool launch configurations use the selected project’s active build configuration directory as the workdir and generates artifacts into a bootmodeN (1 <= N <= 3) directory below this.

mpfsBootmodeProgrammer generates a <workdir>/bootmodeN/debugLog.txt (0 <= N <= 3) log file which can be useful for checking what operations were carried out especially in the case of a programming failure.

For boot modes 1-3 mpfsBootmodeProgrammer generates the boot mode program image Intel Hex file that can be used in Libero:

digraph {
         graph [rankdir="LR", ranksep=.01, bgcolor=transparent];
         node [fontname="Verdana", fontsize="9", shape="rectangle", width=.1, height=.2, margin=".04,.01", style=filled, fillcolor=white];
         edge [arrowsize=.7];
         "Design Flow" -> "Program Design" -> "Configure Design Initialization Data and Memories" -> "eNVM/sNVM configurators"
     }

The name of this file includes

  1. the ELF file basename - for example “mpfs-blinky” for “mpfs-blinky.elf”

  2. “bmN” (1 <= N <= 3) indicating the boot mode

  3. “pM” (where M is an NVM page number) indicating the NVM (eNVM or sNVM) page at which the boot mode program image (including prepended “header” data) is stored.

For boot mode 2 the filename also contains ap or ac indicating whether the boot program is stored in authenticated plaintext or authenticated ciphertext sNVM pages respectively.

Examples of boot mode program image Intel Hex file names include:

  • Boot mode 1: mpfs-blinky-bm1-p0.hex

  • Boot mode 2: mpfs-blinky-bm2-ap-p20.hex (authenticated plaintext)

  • Boot mode 2: mpfs-blinky-bm2-ac-p32.hex (authenticated encrypted ciphertext)

  • Boot mode 3: mpfs-blinky-bm3-p0.hex

For boot mode 2 the USK (User sNVM/Secret Key) used is stored in <elf-file-basename>-bm2-usk.txt. This or another USK is required when configuring the boot mode 2 program image sNVM client in Libero.

For boot mode 3 the ECC (Elliptic Curve Cryptography) public key x and y values are stored in <elf-file-basename>-bm3-public-key-xy.txt and these details are required when configuring the boot mode 3 program image eNVM client in Libero.

Boot mode 3 Elliptic Curve Cryptography

The ECC keys can be either generated on demand by the tool or read from external files (X.509 used for public key files and PKCS#8 for private key files)

Either specifying explicitly to generate the keys as shown in the snippet below:

--bootmode 3 --workdir <PROJECT_PATH> --keys GENERATE

Or using the default behavior and not specifying the --keys GENERATE at all:

--bootmode 3 --workdir <PROJECT_PATH>

Argument --keys SEPARATED has to be used, SEPARATED because private and public files are each in separated files. Keys have to the use elliptical curve NIST P-384 algorithm (secp384r1 in Java/OpenSSL).

--bootmode 3 --workdir <PROJECT_PATH> --keys SEPARATED <PATH_TO_PRIVATE_PEM_FILE> <PATH_TO_PUBLIC_PEM_FILE>

If the user wants to generate his own set of keys, then openssl can be used, on Linux it’s usually part of any decent distribution installation and on Windows the following project can be used:

https://slproweb.com/products/Win32OpenSSL.html

Invoking these following commands will produce private.pem and public.pem files:

openssl ecparam -name secp384r1 -genkey -noout -out combined.ec.key
openssl pkcs8 -topk8 -nocrypt -in combined.ec.key -out private.pem
openssl ec -in private.pem -pubout -out public.pem

Then these files can be used as arguments:

--bootmode 3 --workdir <PROJECT_PATH> --keys SEPARATED private.pem public.pem

Note

Password-protected private keys are not currently supported.

Note

After the mpfsBootmodeProgrammer is run with boot mode 3, then the ECC (Elliptic Curve Cryptography) X and Y values of the public key will be stored in <elf-file-basename>-bm3-public-key-xy.txt file. The X and Y values are required when configuring the boot mode 3 program image eNVM client in Libero.

mpfsBootmodeProgrammer usage/help

13:36:43 INFO  - mpfsBootmodeProgrammer v3.6 started.
Usage: java -jar mpfsBootmodeProgrammer.jar [--workdir directory] [--die device-die] [--package device-package] [--bootmode mode] [--snvm_page page] [--usk key] [--encrypt] [--keys] [--dryrun] [--verify] [--help] [elf-file]

Note: The goal of this Java wrapper is to make fpgenprog easier to use.
Some errors produced with fpgenprog are just passed through as they are.
Users having issues with some of the errors need to contact Libero support
directly.

  --workdir directory
    Description:
      Working directory
    Default if not specified:
      Current working directory

  --die device-die
    Description:
      device-die is the target device die designator
    Allowed values:
      MPFS025T
      MPFS095T
      MPFS160T
      MPFS250T
      MPFS460T
      MPFS025T_ES
      MPFS095T_ES
      MPFS160T_ES
      MPFS250T_ES
      MPFS460T_ES
    Default if not specified:
      MPFS250T_ES

  --package device-package
    Description:
      device-package is the target device package designator
    Allowed values:
      FCG1152
      FCSG325
      FCSG536
      FCVG484
      FCVG784
    Default if not specified:
      FCVG484

  --bootmode mode
    Description:
      mode is the boot mode to be programmed
      0 = idle boot
      1 = non-secure boot from eNVM
      2 = user secure boot from sNVM
      3 = factory secure boot from eNVM
    Allowed values:
      0 to 3
    Default if not specified:
      0 = idle boot

  --snvm_page page
    Description:
      For boot mode 2 only, page is the sNVM page number starting from which the program image will be stored
    Allowed values:
      0 to 211
    Default if not specified:
      0

  --usk key
    Description:
      For boot mode 2 only, key is the User sNVM Key specified as a 12 byte hex string; if 0 then a random USK is generated and used
    Allowed values:
      any 12 byte hex string or 0, for example: 0x39ef4ad4d7d5f178f64e49d0 or 39ef4ad4d7d5f178f64e49d0 or 0
    Default if not specified:
      0

  --encrypt
    Description:
      For boot mode 2 only, use sNVM encryption to store the image as authenticated ciphertext rather than as authenticated plaintext

  --dryrun
    Description:
      Perform all tasks except target programming/verification

  --verify
    Description:
      Verify the target after programming

  --help
    Description:
      Print this help

  --keys key_mode
    Description:
      When bootmode 3 is selected, then private and public keys are required. following options are possible:
      GENERATE  - No key files are needed, both private and public keys will be generated (default mode if none is selected).
      SEPARATED - 1st argument is private key file and 2nd argument is the public key file.

      Keys have to use elliptical curve NIST P-384 algorithm (secp384r1 in Java/OpenSSL).
      The private key needs to be in PKCS#8 format with '-----BEGIN PRIVATE KEY-----' identifier.
      Currently, encrypted private keys with passwords are not supported.
      The public key needs to be X.509 format with '----BEGIN PUBLIC KEY-----' identifier.
      Using OpenSSL, the keys can be generated with the following commands:
        openssl ecparam -name secp384r1 -genkey -noout -out combined.ec.key
        openssl pkcs8 -topk8 -nocrypt -in combined.ec.key -out private.pem
        openssl ec -in private.pem -pubout -out public.pem

  elf-file
    Description:
      Boot program ELF file
    Allowed values:
      Any valid ELF filename matching the selected boot mode linkage requirements. The filename must be relative
      to the 'workdir', absolute paths are not supported.
    Default if not specified:
      If not specified then the working directory is searched for an ELF file

Security

The mpfsBootmodeProgrammer doesn’t use the log4j package because the logging capabilities are implemented from scratch. Therefore mpfsBootmodeProgrammer is not affected by the CVE-2021-44228 vulnerability.

Boot mode programmer troubleshooting

If boot mode programming fails then the Console log should indicate the nature of the problem. If necessary also check the debugLog.txt log file that mpfsBootmodeProgrammer generates for more details.

If mpfsBootmodeProgrammer cannot find fpgenprog or the required RISC-V GCC/binutils tools then check that the FPGENPROG and SC_INSTALL_DIR environment variables are configured correctly. Both environment variables are set from the softconsole.{cmd|sh} start script but the FPGENPROG variable may require adjustment depending on where Libero SoC or Programming and Debug Tools are installed. This can be set by configuring the variable in the OS environment, by editing the softconsole.{cmd|sh} script itself or in the Environment tab of the boot mode programming external tool launch configurations.

If boot mode programming succeeds but the program does not execute as expected from reset then check that the program itself executes correctly under debug from RAM (LIM) with the same optimization and debug options.

If boot mode 2 is programmed from Libero, necessitating the enabling of security options including debug locking, then debugging and boot mode programming from SoftConsole will not be possible. Boot mode programming will fail with messages similar to those below. Debugging and boot mode programming will only be possible by erasing the device and reprogramming it with security disabled.

Note

The boot mode 2 can be programmed from SoftConsole only with security disabled and only from Libero with security enabled.

Programmer '1C21ED74' : JTAG TCK frequency = 4 MHz
Error: Failed to read data from eFP6 USB buffer. Err = -1
Error: Failed to send data to eFP6. Err = -1
Error: eFP6 connection failed.
Error: programmer '1C21ED74' : device 'MPFS250T_ES' : Executing action PROGRAM FAILED.
Error: Failed to send data to eFP6. Err = -1
Error: programmer '1C21ED74' : Error: eFP6 connection failed.
Error: Failed to send data to eFP6. Err = -1
Error: programmer '1C21ED74' : Error: Failed to disable eFP6 programmer
Error: programmer '1C21ED74' : Chain programming FAILED.
Chain Programming Finished: Mon Mar 1 10:49:54 2021 (Elapsed time 00:00:06)
Error: Failed to run Action.
Exported log file D:\sandbox\icicle-kit\MPFS_ICICLE_eMMC\designer\MPFS_ICICLE_eMMC\MPFS_ICICLE_eMMC_fp\MPFS_ICICLE_eMMC.log.
Error: The command 'run_selected_actions' failed.
Error: Failure when executing Tcl script. [ Line 5 ]
Error: The Execute Script command failed.

Known issues/limitations

The following known issues and limitations will be addressed in a future release.

There is no facility to select a specific FlashPro programmer when there is more than one connected. For best results ensure that only one FlashPro programmer is connected.

Boot mode 0 overwrites page 0 of eNVM because the boot mode cannot be changed without at least one NVM (eNVM or sNVM) client being specified at the moment.

mpfsBootmodeProgrammer does not initialize or reset the SMK (sNVM Master Key) and assumes that this has been previously configured appropriately. If this is not the case (for example, for a new device) then an attempt to program boot mode 2 from SoftConsole will result in messages similar to the following and the SMK will need to be configured/initialized from Libero by programming an appropriate design that causes the SMK to be (re)generated:

programmer 'S201QVSUE' : device 'target' : EXPORT BITS component bitstream digest[256] = 25295f0d1d592a90b333e26e85149708208e9f8e8bc18f6c77bd62f8ad7a6866
programmer 'S201QVSUE' : device 'target' : Programming Error.
programmer 'S201QVSUE' : device 'target' : Bitstream or data is corrupted or noisy.
programmer 'S201QVSUE' : device 'target' : componentNo: 3
programmer 'S201QVSUE' : device 'target' : blockNo: 155
programmer 'S201QVSUE' : device 'target' : EXPORT DATA_STATUS_RESULT: [64] = 0002000900008407
programmer 'S201QVSUE' : device 'target' : EXPORT READ_DEBUG_INFO[752] = >  0000000000030003017f00000080040001000000000000000000000000000000001a0000001e000000db000003000002000900008400fc5e52012dd402010000000000000000000000000084071309c709c709c700280028002824000000
programmer 'S201QVSUE' : device 'target' : EXPORT ERROR_CODE[16] = 801f
programmer 'S201QVSUE' : device 'target' : ===================================================================================
programmer 'S201QVSUE' : device 'target' : EXPORT DSN[128] = 4883b6958cf34738ba77807d1bb91b7f
programmer 'S201QVSUE' : device 'target' : ===================================================================================
programmer 'S201QVSUE' : device 'target' : Finished: Sat Mar 20 01:45:56 2021 (Elapsed time 00:00:01)
Error: [80609294]:  programmer 'S201QVSUE' : device 'target' : Executing action PROGRAM FAILED, EXIT -22, refer to FlashPro online help for details.
@@ACTIVITY 101
Error:  programmer 'S201QVSUE' : Chain programming FAILED.

Elliptic Curve Cryptography private and public keys for boot mode 3 are automatically generated and there is no facility to pass an external key file yet.

Note

Support for “advanced” options such as U_MSS_BOOTCFG:U_MSS_REVOCATION_ENABLE, SBIC:OPTIONS[7:0], SBIC:VERSION and SBIC:DSN is not yet available.

Warning

Boot mode programming assumes that the full capacity of eNVM and sNVM is available for storing the boot loader program and does not have any knowledge of any eNVM/sNVM clients configured via other tools (e.g. PolarFire SoC MSS Configurator, Libero SoC etc.). It is important, especially for boot mode 2, to check that only unused/available NVM is used from SoftConsole when programming boot modes.

mpfsBootmodeProgrammer assumes that the base address of the program image is identical to the program start address (_start) which is true when using the PolarFire SoC HAL example linker scripts but may not be so in the general case.

fpgenprog fails to program the board

Sometimes user can experience program failures even when running PolarFire SoC program idle boot mode 0 external launcher:

Warning:  Unable to find file: 'C:\Microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\target.pdb'.
Warning: [80609481]:  Using local backup copy: 'C:\Microchip\SoftConsole-v2021.3.1\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\projectData\target.pdb'.
PDB file 'C:\Microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\projectData\target.pdb' has been loaded successfully.
DESIGN : TOP;  CHECKSUM : 0000;  PDB_VERSION : 1.9
===============================================================
Programmer: Embedded FP6 '082D3559' : Version = EF9B
===============================================================
programmer '082D3559' : Embedded FlashPro6
Opened 'C:\Microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\proj_fp.pro'
The 'open_project' command succeeded.
Info:  Programming is already enabled for device 'target'.
The 'enable_device' command succeeded.
PPD file 'C:/Microchip/SoftConsole-v2021.3/extras/mpfs/bootmode0/fpgenprogProject/proj_fp/target.ppd' has been loaded successfully.
DESIGN : TOP;  CHECKSUM : 0000;  PDB_VERSION : 1.0
The 'set_programming_file' command succeeded.
The 'set_programming_action' command succeeded.
programmer '082D3559' : Scan Chain...
programmer '082D3559' : Check Chain...
programmer '082D3559' : Scan and Check Chain PASSED.
@@ACTIVITY 1
programmer '082D3559' : device 'target' : Executing action PROGRAM
Performing FPGA action. Please wait...
eFP6 acceleration mode enabled with PPD file. Please wait...
@@ACTIVITY 2
 
16:45:46 ERROR - Running the fpgenprog.exe PROGRAM action failed.

To see more verbose errors it’s good to run the last fpgenprog invocation again from the command line. To see the log file, for example for boot mode 0 it’s in the <SC_INSTALL_DIR>/extras/mpfs/bootmode0/debugLog.txt. The last fpgenprog invocation should look similar like to:

c:\microchip\libero\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe run_action --location c:/microchip/SoftConsole-v2021.3/extras\mpfs/bootmode0/fpgenprogProject --action PROGRAM
17:03:29 INFO  - Selected boot mode "0 - idle boot" and working in directory "D:\work\microchip\SoftConsole-v2021.3\extras\mpfs".
17:03:29 DEBUG - Workdir=D:\work\microchip\SoftConsole-v2021.3\extras\mpfs die=MPFS250T_ES diePackage=FCVG484 bm=0 - idle boot verify=false elf=null
17:03:29 DEBUG - Invoking command: "D:\work\microchip\libero\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe new_project --location D:\work\microchip\SoftConsole-v2021.3\extras\mpfs/bootmode0/fpgenprogProject --target_die MPFS250T_ES --target_package FCVG484".
17:03:30 DEBUG - Finished with exit code: "0".
17:03:30 INFO  - Preparing for bitstream generation...
17:03:30 DEBUG - Invoking command: "D:\work\microchip\libero\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe mss_boot_info --location D:\work\microchip\SoftConsole-v2021.3\extras\mpfs/bootmode0/fpgenprogProject --u_mss_bootmode 0".
17:03:30 DEBUG - Finished with exit code: "0".
17:03:30 DEBUG - Invoking command: "D:\work\microchip\libero\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe envm_client --location D:\work\microchip\SoftConsole-v2021.3\extras\mpfs/bootmode0/fpgenprogProject --number_of_bytes 1 --content_file_format intel-hex --content_file D:\work\microchip\SoftConsole-v2021.3\extras\mpfs/bootmode0/bootmode0.hex --start_page 0 --client_name bootmode0_0".
17:03:30 DEBUG - Finished with exit code: "0".
17:03:30 INFO  - Generating bitstream...
17:03:30 DEBUG - Invoking command: "D:\work\microchip\libero\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe generate_bitstream --location D:\work\microchipSoftConsole-v2021.3\extras\mpfs/bootmode0/fpgenprogProject".
17:03:43 DEBUG - Finished with exit code: "0".
17:03:43 INFO  - Programming the target...
17:03:43 DEBUG - Invoking command: "D:\work\microchip\libero\Program_Debug_v2021.3\Program_Debug_Tool\bin64\fpgenprog.exe run_action --location D:\work\microchip\SoftConsole-v2021.3\extras\mpfs/bootmode0/fpgenprogProject --action PROGRAM".
17:03:46 DEBUG - Finished with exit code: "1".
17:03:46 INFO  - Console Mode = Software Version: v2021.3
Warning:  Unable to find file: 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\target.pdb'.
Warning: [80609481]:  Using local backup copy: 'D:\work\microchip\SoftConsole-v2021.3.1\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\projectData\target.pdb'.
PDB file 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\projectData\target.pdb' has been loaded successfully.
DESIGN : TOP;  CHECKSUM : 0000;  PDB_VERSION : 1.9
Opened 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\proj_fp.pro'
The 'open_project' command succeeded.
Info:  Programming is already enabled for device 'target'.
The 'enable_device' command succeeded.
PPD file 'D:/work/microchip/SoftConsole-v2021.3/extras/mpfs/bootmode0/fpgenprogProject/proj_fp/target.ppd' has been loaded successfully.
DESIGN : TOP;  CHECKSUM : 0000;  PDB_VERSION : 1.0
The 'set_programming_file' command succeeded.
The 'set_programming_action' command succeeded.
Error:  No programmers found. Please check the programmer connection to the computer and ensure the drivers are properly installed.
Error:  Failed to run Action.
Exported log file D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\proj_fp.log.
Error:  The command 'run_selected_actions' failed.
Error:  Failure when executing Tcl script. [ Line 5 ]
Error:  The Execute Script command failed.
Exported log file D:\work\microchip\SoftConsole-v2021.3\extras\mpfs/bootmode0/fpgenprogProject\proj_fp\proj_fp.log.
Software Version: v2021.3
Warning: Unable to find file: 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\target.pdb'.
Warning: Using local backup copy: 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\projectData\target.pdb'.
PDB file 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\projectData\target.pdb' has been loaded successfully.
DESIGN : TOP;  CHECKSUM : 0000;  PDB_VERSION : 1.9
Opened 'D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\proj_fp.pro'
The 'open_project' command succeeded.
Info: Programming is already enabled for device 'target'.
The 'enable_device' command succeeded.
PPD file 'D:/work/microchip/SoftConsole-v2021.3/extras/mpfs/bootmode0/fpgenprogProject/proj_fp/target.ppd' has been loaded successfully.
DESIGN : TOP;  CHECKSUM : 0000;  PDB_VERSION : 1.0
The 'set_programming_file' command succeeded.
The 'set_programming_action' command succeeded.
Error: No programmers found. Please check the programmer connection to the computer and ensure the drivers are properly installed.
Error: Failed to run Action.
Exported log file D:\work\microchip\SoftConsole-v2021.3\extras\mpfs\bootmode0\fpgenprogProject\proj_fp\proj_fp.log.
Error: The command 'run_selected_actions' failed.
Error: Failure when executing Tcl script. [ Line 5 ]
Error: The Execute Script command failed.

17:03:46 ERROR - Running the fpgenprog.exe PROGRAM action failed.

If invoking the fpgenprog from command line shows the following error: Error: Failed to run action. Return code = -1073741819. Then contact support for Libero or Program and Debug as this issue is outside SoftConsole’s scope.

Linux fpgenprog invokes 32-bit binaries

Linux fpgenprog run from the Libero or from Program and Debug will invoke 32-bit binaries, which means the 64-bit Linux will have to have extra 32-bit libraries installed. If they are not, then the following error might be observed:

INFO  - Generating bitstream...
ERROR - /usr/local/microsemi/Program_Debug_v2021.3/Program_Debug_Tool/binfp/fpbitgen_bin: not found
ERROR - Error: Failed to generate fp.pro. Return code = 32512

To solve this issue read the ‘Libero’ or ‘Program and Debug’ documentation, or contact the support team for ‘Libero’ or ‘Program and Debug’ as this issue is outside SoftConsole’s scope. However, Ubuntu and Debian users might solve it just by running the following commands:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libstdc++6:i386 libz-dev:i386