PolarFire® SoC Applications - FPGA Design, Creating and Programming

Last modified by Microchip on 2026/03/26 12:56

PolarFire SoC Applications: FPGA Design, Creating, and Programming

Here, we will create a Libero® project, run through Design Flow, and program the Field-Programmable Gate Array (FPGA). Design Flow is a sequence of steps that must be completed before programming the design into the FPGA. These steps convert the design components into a gate-level netlist, map the netlist to FPGA physical resources, and generate a programming image for the FPGA. This topic shows how to pass through Design Flow for the PolarFire® System on Chip (SoC) Discovery Kit, but using this guide, you will understand how to pass flow for any PolarFire SoC. 

Contents

Libero SoC Design Flow

Creating a Libero Project

Creating a Project

Open Libero SoC, and navigate to Project > New Project or press Ctrl + N. It should open the New Project wizard.

New Project wizard


Configure Project Name

Specify your project name in the Project name field and specify the folder where you want to create the project. Then click Next.

New Project wizard


Configure Project SoC

In this tab, you need to find your SoC.

Device Selection

Search MPFS095T-1FCSG325E for the Discovery Kit.

Device Selection

Select the part and click Finish.

Importing MSS Component and Creating SmartDesign®

Import the MSS Component to the Project

To import MSS, go to the Design Flow tab and double-click on the first option, Import MSS

Design Flow

Select the CXZ file that was generated from the MSS configurator.

Log


Creating SmartDesign

In the Design Flow tab, double-click on the Create SmartDesign option.

Design Flow tab

You will see the following window.

 Name Window

Name your design "DesignTop" and click OK.


Setting Root Component

Move to the Design Hierarchy tab and right-click on the DesignTop, then choose the Set as Root option.

Design Hierarchy

Now, you will see the message Top Module (root): DesignTop.

Top Module (root): DesignTop message


Importing MSS to the Smart Design

Now, in the Design Hierarchy tab, you will see SmartDesign and MSS. Drag and drop the MSS component into the SmartDesign.

Design Hierarchy

Now, in SmartDesign, you have the visual representation of the MSS component.

Visual representation of the MSS component

Clock Conditioning Circuitry (CCC) Installation

Clock conditioning circuitry is required in our design because CCC helps:

  • Reduce jitter and noise: Ensures stable, reliable clock signals for accurate timing
  • Generate multiple frequencies: Allows creation of different clock domains from one source
  • Manage phase and skew: Aligns clock signals for synchronous operation

To add the CCC component, switch to the IP Catalog tab, search for Clock Conditioning Circuitry (CCC), and confirm the creation of the component with the default name.

IP Catalog

Drag and drop the core to SmartDesign. Core configurator will open.

Core configurator

Open Clock Options PLL tab and change Input Frequency to 160 MHz.

Clock Options PLL

Switch to the Output Clocks tab, and change Requested Frequency to 125 MHz, then click OK. Confirm warning and info messages.


PolarFire RC Oscillator Installation

The RC OSC can be used to generate a startup clock or low-frequency reference clock, but for jitter considerations and accuracy, an external oscillator should be used to provide a reference clock for fabric logic. To add the RC OSC to our design in the Catalog tab, search for PolarFire RC Oscillators, drop it on SmartDesign, and confirm the creation of the component with the default name.

PolarFire RC Oscillators Configurator

Copy the configuration and click OK. Confirm warning and info messages.


PolarFireSoC Initialization Monitor Installation

In the Catalog tab, search for PolarFireSoC Initialization Monitor and drop it on SmartDesign. Confirm the created component with the default name.

PolarFireSoC Initialization Monitor Configurator

Copy the configuration and click OK. Confirm warning and info messages.


CoreReset_PF Installation

In the Catalog tab, search for CoreReset_PF and drop it on SmartDesign. Confirm the created component with the default name. There is nothing to configure, so just click OK and confirm the warning and information messages.


SmartDesign Connection

To create a connection between instances, download the TCL file, and in Libero SoC, press Ctrl + U. You should see the window in the accompanying image. Click on the ellipsis button (...) and choose the downloaded TCL file, and click Run to execute the script. 

connection dialog

You should see this message after execution. Click Close to close the window. Now in SmartDesign press Ctrl+S to save file.

Execute Script command succeeded message

Your SmartDesign layout should look like this:

SmartDesign layout

Generating Component and Building Hierarchy

In the Design Hierarchy, right-click on the DesignTop and choose the Generate Component option.

Generate Component option

Click on the Build Hierarchy button, and the ⚠️ icon should disappear.

 

Timing and Synthesis

Timing Constraints Management

To open Constraints Manager, navigate to the Design Flow tab and double-click on the Manage Constraints option.

  Manage Constraints option

Now navigate to the Timing tab in the Constraints Manager tab.

Timing tab

Now, click on the Edit drop-down and select the Edit Synthesis Constraints option. The constraint editor will open. Double-click on the first option to create a new constraint.

Edit Synthesis Constraints option

Copy the parameter as shown and click on the ellipsis (...) button.

... button

Search for REFCLK* pattern.

REFCLK* pattern

Select REFCLK and click on the Add button, then click OK. Click OK again, then press Ctrl + S to save and close the window.

Select REFCLK

You'll have this view. Now, click the Derive Constraints button and in the message popup, click Yes. Now enable all checkboxes for Place and Route and Timing Verification to have this view.

Checkboxes for Place and Route and Timing Verification

Save the changes by clicking on the Save button in the top right corner.

Save button

Synthesis 

To run the Synthesis tool, navigate to the Design Flow tab and double-click on Synthesize.

Synthesize tool

You should now have this view.

Synthesis view

I/O Configuration and Place and Route

I/O Editor Management

Again, open the Constraints Manager, but now navigate to the I/O Attributes tab.

I/O Attributes tab

Open the Edit option drop-down menu and click on Edit with I/O Editor. The I/O editor will open.

I/O Editor

Here we see that we have five unconnected pins. Four of them relate to SPI and one to reset.

  1. EXT_RST_N
  2. SPI0_CLK
  3. SPI0_MISO
  4. SPI0_MOSI
  5. SPI0_SS

MOSI is pin A18, MISO is E11, CS is C16, and CLK is E17, so let's enter that information into the pin number section.

I/O Editor

Connect the EXT_RST_N to the T19 pin, which is the push button on the board. By clicking on it, you'll reset the board.

Finally, save your changes by pressing Ctrl + S. That's all you need to do; you can now close the window and return to the Design Flow tab.

 

Place and Route

Place and Route

Navigate to the Design Flow tab and double-click on the Place and Route tool. You will see this in the Design Flow tab:

Design Flow tab

Back to Top

Timing and Power Analysis

Timing Verification

To run the Timing verification tool, run the Verify Timing from the Design Flow tab.

Design Flow tab

If your design has the correct configurations and constraints, you should see this in your Design Flow tab.

Design Flow tab

Power Verification

To run the Power verification tool, run the Verify Power tool from the Design Flow tab.

Design Flow tab

If your design has the right configurations and constraints, you should see this in your Design Flow tab.

Design Flow tab

Back to Top

Program Design

Generate FPGA Array Data

Now, we need to generate FPGA array data to continue. To generate it, double-click on the Generate FPGA Array Data button in the Design Flow tab.

Design Flow tab

If everything is correct, you will see this in your Design Flow tab.

Design Flow tab

Generate Design Initialization Data

Now, we need to generate design initialization data to continue. To generate it, double-click on the Generate Design Initialization Data button in the Design Flow tab.

Design Flow tab

If everything is correct, you should see this in your Design Flow tab.

Design Flow tab

Generate Bitstream

Now we need to generate a bitstream to continue. To generate it, double-click on the Generate Bitstream button in the Design Flow tab.

Design Flow tab

You should see this in your Design Flow tab:

Design Flow tab

Run PROGRAM Action

Finally, let's program the SoC. To program the SoC, double-click on the Run PROGRAM Action button in the Design Flow tab. It opens the warning pop-up.

Design Flow tab

Warning message:

Warning message

You've successfully programmed the device with your own Fabric and MSS configurations.

Design Flow tab successful

Back to Top