0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MPFS-DISCO-KIT 向け Ubuntu 22.04 の構築(HSS編)

Last updated at Posted at 2024-12-16

はじめに

MPFS-DISCO-KIT(Microchip PolarFire SoC FPGA Discovery Kit) で動作する Ubuntu 22.04 を構築する方法をいくつかの記事に分けて説明します。

上記の記事で構築した MPFS-DISCO-KIT 向け Ubuntu 22.04 Root File System、Linux Kernel、Boot Loader は次の URL にて公開しています。なお、これらはオフシャルなものではなく、筆者の魔改造がはいっています。ご使用の際はこの点にご留意してください。

この記事では、HSS(Hart Software Services)の概要と MPFS-DISCO-KIT への書き込みについて説明します。

HSS(Hart Software Services) とは

HSS は eNVM(embedded Non-Volatile Memory) に格納されたステージ1のブートプログラムで MSS(Micro Processor Sub System) が実行します。

HSS は主に次のような役割があります。

  • ブートローダーとしての機能
    • MSS の RISC-V Core (Hart: Hardware Thread) を初期化。
    • 外部ストレージ(eMMC、SD-Card、QSPI フラッシュなど)や内部ストレージからアプリケーションをロード。
    • 各 Hart に対応するコードを割り当てて実行を開始。
  • マルチコア管理
    • マルチコアシステムでの Hart の役割を設定。
    • 必要に応じて Hart を停止、再開、リセット。
    • 各 Hart のリソースを制御し、アプリケーションの分散実行をサポート。
    • 各 Hart 間のデータ共有や同期を提供。
    • メッセージパッシングや割り込み制御をサポート。
  • セキュアブート
    • セキュアブートプロセスを管理し、不正なコードの実行を防止。
    • 暗号化されたイメージの複合や検証を実行。
  • 仮想化サポート
    • 仮想化のための環境を準備し、各 Hart が異なる OS や RTOS を実行可能にする。
  • 周辺機器の初期化
    • DDR Memory やクロック、その他の周辺デバイスの初期化を担当。
    • PolarFire SoC 全体のシステムの初期化を実施。
  • コンソールとデバッグ支援
    • シリアルポート経由でデバッグコンソールを提供。
    • PolarFire SoC のデバッグや状態監視を支援。

HSS のソースコード

HSS のソースコードは 下記の URL にて公開されています。

HSS のイメージファイル

今回説明する Ubuntu 22.04 システムでは、時間と手間の都合上、HSS を1からビルドしません。下記の URL からビルド済みのものをダウンロードして使います。

shell$ wget https://github.com/polarfire-soc/hart-software-services/releases/latest/download/hss-envm-wrapper.mpfs-disco-kit.hex

HSS の eNVM への書き込み

eNVM の内容を MSS から読むことは出来ますが、書き込むことは出来ません。eNVM に書き込むには JTAGを介して行われます。
ここでは、Microchip Technology 社が提供する PolarFire SoC FPGA 開発環境である Libero SoC を使って MSS を eNVM に書き込む方法を紹介します。なお、この部分については、筆者自身がまだ不馴れで知識不足が多々ある事をご了承ください。

polarfire-soc-discovery-kit-reference-design のダウンロード

eNVM に HSS を書き込む際に、polarfire-soc-discovery-kit-reference-design を利用します。これは MPFS-DISCO-KIT 用に Fabric部(FPGA部)に SRAM、I2C、DMAなどを実装したリファレンスデザインです。これを MPFS-DISCO-KIT にプログラムするついでに(?) HSS もプログラムします。

shell$ git clone --depth 1 --branch main https://github.com/polarfire-soc/polarfire-soc-discovery-kit-reference-design

polarfire-soc-discovery-kit-reference-design のビルド

プロジェクトの作成

Libero SoC を起動したら Project > Execute Script... をクリックして、前節でダウンロードしたディレクトリにある MPFS_DISCOVERY_KIT_REFERENCE_DESIGN.tcl を選択して Run します。

Fig.1 Libero-Project-Execute-Script
Fig.1 Libero-Project-Execute-Script

しばらく放っておくとプロジェクトが出来上がります。

Fig.2 Libero-Project-Execute-Script-Success
Fig.2 Libero-Project-Execute-Script-Success

論理合成&配置配線

プロジェクトが出来上がったら、Place and Route を走らせます。ついでに Synthesize もやってくれます。

Fig.3 Libero-Project-Place-and-Route-Run
Fig.3 Libero-Project-Place-and-Route-Run

しばらく放っておくと出来上がります。

Fig.4 Libero-Project-Place-and-Route-Success
Fig.4 Libero-Project-Place-and-Route-Success

FPGA データの生成

Generate FPGA Array Data をクリックして Run します。

Fig.5 Libero-Project-Generate-FPGA-Array-Data
Fig.5 Libero-Project-Generate-FPGA-Array-Data

次に Configure Design Initialization Data and Memories をクリックして

Fig.6 Libero-Project-Design-Initialization-Data-and-Memories
Fig.6 Libero-Project-Design-Initialization-Data-and-Memories

Design Initialization Data and Memories View を開きます。
eNVM タブをクリックして Add > Add Boot Mode 1 Client を選択します。

Fig.7 Libero-Project-Design-Initialization-Data-and-Memories-eNVM-Add
Fig.7 Libero-Project-Design-Initialization-Data-and-Memories-eNVM-Add

Add PlaneText Boot Mode 1 client のダイアログボックスの Content from file: に前節でダウンロードした hss-envm-wrapper.mpfs-disco-kit.hex を指定します。

Fig.8 Libero-Project-Design-Initialization-Data-and-Memories-eNVM-Content-from-file
Fig.8 Libero-Project-Design-Initialization-Data-and-Memories-eNVM-Content-from-file

最後に Apply をクリックして eNVM に書き込むデータを生成します。

Fig.9 Libero-Project-Design-Initialization-Data-and-Memories-eNVM-Apply
Fig.9 Libero-Project-Design-Initialization-Data-and-Memories-eNVM-Apply

eNVM への書き込み

MPFS-DISCO-KIT を PC に接続して、Run PROGRAM Action をクリックして Run を実行します。

Fig.10 Libero-Project-Run-PROGRAM-Action-Run
Fig.10 Libero-Project-Run-PROGRAM-Action-Run

書き込みに成功すれば次のようになるはずです。

Fig.11 Libero-Project-Run-PROGRAM-Action-Success
Fig.11 Libero-Project-Run-PROGRAM-Action-Success

これにて MPFS-DISCO-KIT の eNVM への HSS の書き込み(ついでに Fabric の書きこみも)は完了です。

Hart Payload Generator

HSS がブートローダーとして外部ストレージ(eMMC、SD-Card、QSPI フラッシュなど)や内部ストレージからアプリケーションをロードする際は、アプリケーションを Hart Payload としてラッピングしておく必要があります。
そこで、ラッピングするツール Hart Payload Generator をビルドしておきます。

ソースコードのダウンロード

HSS のソースコードは 下記の URL にて公開されています。

v2024.09 版をダウンロードします。

shell$ git clone --depth 1 --branch v2024.09 https://github.com/polarfire-soc/hart-software-services.git hart-software-services-v2024.09

Hart Payload Generator のビルド

Hart Payload Generator のソースコードは tools/hss-payload-generator にあります。

shell$ cd hart-software-services-v2024.09/tools/hss-payload-generator/
shell$ make

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?