記事概要
- PolarFire SoC Discovery Kitの起動
- PolarFire SoC Discovery Kitのデモデザイン
- PolarFire SoC Discovery Kitの開発環境構築
開発対象
PolarFire SoC
Microchip社の中規模SoC FPGAです。PFSoCと呼称されることが多いようです。フラッシュタイプの不揮発性のFPGAなので、同社のSmartFusion2の次世代SoC FPGAでしょうか。
FPGA以外に64bit RISC-Vが5コア搭載されており、ベアメタルからリアルタイムOS、Linux OSまで様々な組み込みアプリケーションに対応可能だそうです。ちなみにMicroChip社のデバイスではFPGA部分をFabric、プロセッサ部分をMSSと呼称するようです。
評価キット
以下の3つの評価キットが公式から販売されていますが、今回は私費でしたので一番安いDiscovery kitを購入しています。早くから販売されていたIcicle kitが最も資料やサンプルデザインが充実していそうですが、値段的に断念です。
- Icicle kit
- Video kit
- Discovery kit
Discovery kitには以下のインタフェースがあり、おおよそ評価キットとしては十分なものと思います。
- microSD™ card
- DDR4
- SGMII
- USB-UART
- mikroBUS
- 40-pin Raspberry Pi 4 interface connector
資料
今回含めて今後の開発で利用する資料を以下にまとめています。(適宜更新予定)
Quickstart Guide
今回はまずQuickstart Guideに沿って起動・デモデザインを確認します。
起動
FlashProインストール
FlashProをインストールします。FlashProはMicroChip社のFPGAプログラミング用ツールであり、本ツールを用いてユーザが作成した回路情報等をPolarFire SoCに書き込みます。
Libero SoCと一緒にインストールできますので、リンク先を参考にしてください。
ジャンパ設定
以下の通りに開発キットのジャンパを設定します。本キットではUSB Type-Cと5V DCジャックの2種類の電源が選択できますが、今回はUSB Type-Cを選択しました。
ジャンパ | 設定 | |
---|---|---|
J45 | 1-2 closed | Bank1と5の電圧選択。今回は3.3V |
J46 | 1-2 closed | VDDAUX1の電圧選択。今回は3.3V |
J47 | 1-2 closed | 電源選択。今回はType-C |
J49 | 2-3 closed | 7セグLEDの電圧選択。今回は5V |
USB Type-C接続
まずは電源ONです。ホストPCと評価キットをUSB Type-Cケーブルで接続します。正しく起動されていると、3種類の電源供給LED(VDD, P1P8V, 5P0V)とLED1~8が点灯するはずです。
また、デバイスマネージャからFlashPro5のポートが認識されていることが確認できます。
デモデザイン
AN5156に沿ってデモデザインを試してみます。事前にリンク先からデモ実行用のファイルをDLしておきます。
デモ実行までの流れは以下の通りです。
- デザインの作成
- デザインの論理合成・配置配線・タイミング検証
- デザインの書き込み
- デモ実行
デザインの作成~デザインの論理合成・配置配線(省略可)
デモデザインではLibero SoCで実行する必要がある全ての処理を包含した自動化スクリプト(TCLスクリプト)が用意されています。スクラッチで作るのも面倒なので、今回はこのTCLスクリプトをそのまま利用したいところでしたが、TCLスクリプト内で利用されるIPのバージョンにLibero SoC v2024.1で利用可能なIPのバージョンが指定されている箇所がありましたので、この箇所のみ私が利用しているLibero SoCのバージョン(v2025.1)に合わせてTCLファイルを変更しました。
set PF_CCCver {2.2.220}
set COREUARTver {5.7.100}
- set PFSOC_INIT_MONITORver {1.0.307}
+ set PFSOC_INIT_MONITORver {1.0.309}
set PF_TPSRAMver {1.1.108}
set CORERESET_PFver {2.3.100}
set COREFIR_PFver {3.0.121}
- set COREFFTver {8.0.107}
+ set COREFFTver {8.1.100}
なお、利用するIPは事前にDLする必要がありますので、Libero SoCのCatalogタブからDownload them now!をクリックしてDLします。面倒なので利用可能なIPを一度にすべてのIPをDLしましたが、必要なIPのみDLすることができるはずです。
TCLが正常に実行できると各種ログが出力されます。リソース使用量やタイミング解析結果等が当然確認できるだけでなく、bittstreamのDigestというものも出力されています。この後、FlashProでジョブファイルを読み込むわけですが、その際に出力されるDigestを確認することで、意図通りのbitstreamであることを確かめることができます。
Successfully generated bitstream file and it has been added to the job container; file programs Fabric and sNVM.
Fabric component bitstream digest: 2337f5f55cd199e6fbace1b7f7bb86574bc48e6307b315320a0598efc1cfa493
sNVM component bitstream digest: fb8994bd7d2ab270956f3257e634f776578f7fa6a4139c6d87f5a04034ec4acc
Entire bitstream digest: f16426ae3728b44346f5fcb78a9bde26532399ba557bccafb4aaa8750a711f2e
Finished: Fri Sep 12 21:35:29 2025 (Elapsed time 00:00:23)
デザインの確認
作成されたデザインを確認してみます。
ブロック図
Design Hierarchyタブを開いて、[work > top]をダブルクリックするとブロック図が表示されます。
このうち今後の開発でも利用するであろうIPを整理しました。PFSoCの起動シーケンスについては今後の開発の中で詳細を確認できればと思っています。
IP | 説明 | 詳細 |
---|---|---|
PF_CCC_C0 | 外部クロックを利用して、最大4つまでの内部クロックを生成できるIP | リンク |
CORE_RESET_PF_C0 | リセット同期IP | リンク |
PFSOC_INIT_MONITOR_C0 | PFSoCの起動シーケンスを管理するIP | UG0725 |
クロック系統
外部オシレータから入力される50MHzクロックをglobalバッファ経由でPF_CCC_C0に入力して内部クロックを生成しています。ブロック図上でPF_CCC_C0をダブルクリックすると、200MHzと25MHzが生成されるように設定されていることがわかります。Fabric内では基本的に200MHzが利用されていますが、FFT処理のIPでは25MHzが利用されているようです。
リセット系統
以下3つのリセット信号をリセット同期化回路(CORE_RESET_PF_C0)を用いて内部クロック(200MHz)で同期化して、Fabric全体にばら撒きます。このうちswitch_iは基板上のスイッチ(SW1)に接続されており、ユーザが操作可能です。
- PLL_LOCK (PF_CCC_C0)
- FABRIC_POR_N (PFSOC_INIT_MONITOR_C0)
- switch_i (外部リセット)
ピン制約
[Design Flow > Constraints > Manage Constraints]を右クリックして、Constraints Managerを開きます。PDCファイルが一つだけ登録されているので、ダブルクリックで開いて現在のピン制約が確認できます。
ポート名 | ピン | 方向 |
---|---|---|
REF_CLK_0 | R18 | INPUT |
RX | W21 | INPUT |
TX | Y21 | OUTPUT |
switch_i | T19 | INPUT |
デザインの書き込み
前項で作成したプログラム用のジョブファイル(Libero Project/designer/top/export/top.job)を使ってデザインを書き込みます。前項を省略した場合はDLしたデモデザインのProgramming_Jobフォルダ内のジョブファイル(top.job)を利用できます。
- FlashPro Expressを起動して、[Project>New Job Project]を選択
- 表示されたウィンドウのImport FlashPro Express job fileで上記のジョブファイルを選択
- FlashPro Express job project locationで任意のフォルダを選択
- OKを押すとウィンドウが閉じて、接続されたプログラム対象のデバイス(今回はMPFS095T)が自動検出されます。
- RUNボタンをクリックしてプログラムする。成功したらPASSEDと表示されます。およそ1分くらいかかりました。
ログ確認
Created FlashPro Express Job Project.
programmer 'E2009OBEP5' : Scan Chain...
Programmer 'E2009OBEP5' : JTAG TCK / SPI SCK frequency = 1 MHz
programmer 'E2009OBEP5' : Check Chain...
programmer 'E2009OBEP5' : Scan and Check Chain PASSED.
programmer 'E2009OBEP5' : device 'MPFS095T' : Executing action PROGRAM
Programmer 'E2009OBEP5' : JTAG TCK / SPI SCK frequency = 4 MHz
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT Algo_version[16] = 0002
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT IDCODE[32] = 0f8181cf
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT ISC_ENABLE_RESULT[32] = 00000000
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT CRCERR[1] = 0
programmer 'E2009OBEP5' : device 'MPFS095T' : Programming Mode: JTAG
programmer 'E2009OBEP5' : device 'MPFS095T' : Programming FPGA Array and sNVM...
programmer 'E2009OBEP5' : device 'MPFS095T' : Calculating component bitstream digests using programming file...
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT Fabric component bitstream digest[256] = 2337f5f55cd199e6fbace1b7f7bb86574bc48e6307b315320a0598efc1cfa493
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT sNVM component bitstream digest[256] = fb8994bd7d2ab270956f3257e634f776578f7fa6a4139c6d87f5a04034ec4acc
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT Entire bitstream digest[256] = f16426ae3728b44346f5fcb78a9bde26532399ba557bccafb4aaa8750a711f2e
programmer 'E2009OBEP5' : device 'MPFS095T' : Reading digests for all the segments from the device...
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT CHECK FABRIC digest[256] = 8a7a8144741da39851b142a3740c1776c94287ff646f8172de44c19eac87dd02
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT CC digest[256] = 0a967165412dc7ca1fac7888b4b045728cdf7cfa7977bbd524898b893300ea7a
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT SNVM digest[256] = ab7d60512473d36f045bd9f69122cd948ddcbd955d7ee3b46c4d9c39bbc73a9b
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UL digest[256] = 6536ff1fd0a85bd3eda079923dd36fe296d55bfff4dd26b63b8b8209c2b4648d
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST0 digest[256] = 0000000000000000000000000000000000000000000000000000000000000000
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST1 digest[256] = 0000000000000000000000000000000000000000000000000000000000000000
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST2 digest[256] = d45264ac8021c51b0e1a01764b865b74ccf1bec3d20c40078063d19891aba92e
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST3 digest[256] = 4bfb5927a93198eae8f0d920233d00439b9709d36eef982730206ad142fda5f5
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST4 digest[256] = 0000000000000000000000000000000000000000000000000000000000000000
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST5 digest[256] = d45264ac8021c51b0e1a01764b865b74ccf1bec3d20c40078063d19891aba92e
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST6 digest[256] = 4bfb5927a93198eae8f0d920233d00439b9709d36eef982730206ad142fda5f5
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UPERM digest[256] = 49a5818c4fff9561dff202eddf5d7b9dca9189afe8e0c6eb76de64f6726abb93
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT SYS digest[256] = 9dda73960dea43c8dc46a522dd20a0715ab2fd31050223bfde8e02023455ba9f
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST7 digest[256] = 4bfb5927a93198eae8f0d920233d00439b9709d36eef982730206ad142fda5f5
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT ENVM digest[256] = 55b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST8 digest[256] = 87eb736677196efe6270b2d09e04009e441ca3aed1077578afc813caa5ffc787
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST9 digest[256] = 24e58e26abd4a4ca46516d4614f6f4dddb7e9a4fed9e8439e1d7e5b0b56caa17
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT UKDIGEST10 digest[256] = 4bfb5927a93198eae8f0d920233d00439b9709d36eef982730206ad142fda5f5
programmer 'E2009OBEP5' : device 'MPFS095T' : Please refer to System Services User Guide for more details about different digests.
programmer 'E2009OBEP5' : device 'MPFS095T' : ===================================================================================
programmer 'E2009OBEP5' : device 'MPFS095T' : EXPORT DSN[128] = 6895ff7d0a069ff920d484268c74dc61
programmer 'E2009OBEP5' : device 'MPFS095T' : ===================================================================================
programmer 'E2009OBEP5' : Finished: Fri Sep 12 22:53:14 2025 (Elapsed time 00:00:45)
programmer 'E2009OBEP5' : device 'MPFS095T' : Executing action PROGRAM PASSED.
programmer 'E2009OBEP5' : Chain programming PASSED.
Chain Programming Finished: Fri Sep 12 22:53:14 2025 (Elapsed time 00:00:45)
書き込み時に上記のようなログが得られました。気になるのはダイジェストとDSNが出力されている点です。
ダイジェストはデザイン作成時に出力された値と一致しています。デバイス起動後にシステムサービスを利用して取得することもできるようです。
DSNはデバイスのシリアルナンバーのようです、こちらもデバイス起動後にシステムサービスを利用して取得できるようです。
このあたりの詳細はこの資料に記載されていそうです。いくつかのセキュリティ機能については、今後実際に試してみたいと思っています。
デモ実行
Quickstart Guideで提供されるデモではフィルタ処理を実行しているようです。手順詳細はこのサイトを確認ください。
- まずはMicroChipから提供されているデモ確認用のGUIツールをインストールします。先ほどDLしたファイルの中の[GUI_Installer>Volume]フォルダ内のsetup.exeでインストールできます。
- インストールしたアプリケーションを起動します。
- Filter SettingタブでGenerate FilterとGenerate Signalを順番にクリックし、フィルタと入力信号を作成します。Filter Inputタブに作成した入力信号が表示されます。
- 左上のリンクアイコンをクリックし、ポップアップしたウィンドウの指示に従ってデバイスのSW1を押した後にOKを選択します。
- 左上のスタートアイコンをクリックし、処理を実行する。
全てデフォルトの設定で実行すると、20MHzのローパスフィルタが作成され、
5MHzと50MHzの信号を重ね合わせた信号を入力すると、
50MHzの信号がカットされ、5MHzの信号が抽出されるようです。
開発環境構築
ついでに、次回以降の開発のための開発環境を構築しました。追加で必要な環境があれば、都度更新予定です。
LiberoSoC
このサイトからLibero SoC Design Suiteのインストーラを入手してインストールしました。バージョンは記事執筆時の最新版である2025.1にしました。Libero SoCにはライセンスが複数(Silver, Gold, Platinum)ありますが、PolarFire SoCの評価キット開発ではSilverで十分だそうです。
インストール方法の詳細は記しませんが、PFSoC MSS ConfiguratorとFlashPro Expressは必須です。
SoftConsole
このサイトからSoftConsoleのインストーラを入手してインストールしました。2022年以降の更新がない点は不安ですが、最新のMicroChip社のドキュメントでも利用が推奨されています。
今後したいこと
- デモデザイン(今回確認済み)
- FPGA開発(Lチカ等)
- Baremetal Application開発
- Linux Application開発
- RTOS Application開発
- AXI4によるMSS-Fabricの協調動作開発
- mikroBusインタフェースの活用
- Raspberry piインタフェースの活用