PolarFire SoC Icicle Kit が動いたら次はどうする?

(更新

Running pre-installed demo of PolarFire SoC Icicle Kit.

さて。昨日はブログ記事を書くだけで終わってしまったので、今日はさっそく、PolarFire SoC Icicle Kit の「火入れ」をしてみたいと思います。ちなみに「ボードの火入れ」って英語でなんて言うんだろう。burn-in だと、ちょっと意味が違いますよね。

さらに末尾に、Linux 環境のアップデート、ビットストリームの生成、Linux のリビルド、FPGA 設計ツールの使い方等の情報へのリンクも張っておきました。御参考いただければ幸いです。

どこから始める?

まず最初に、最初に確認すべきウェブページはこちらです。

このページの Hardware タブを開くと、後で必要となるジャンパ設定のための「ジャンパピン番号リスト」があるので、プリントするか、ブラウザのウィンドウで別に開いておくと良いでしょう。

ジャンパの確認

続いて、Getting Started タブを開き、ジャンパピンの確認をします。私の入手したボードでは、出荷時の設定がこの説明といくつか違いました。特に大きな影響はなさそうですが、以下のように設定しました。

  • J24: オープン(出荷時はショートです。オンボードプログラマのための USB コネクタを USB-OTG で使うときに VBUS に 5V 出力するためのジャンパみたいですが、なぜこの USB コネクタを OTG で使うのかは不明です。どっちにしても当面はオンボードプログラマは使わないので、オープンにしておきます。)
  • J9: オープン(出荷時はショートです。これをオープンにすると FlashPRO5 のような外部のプログラマを繋げるようになります。後で忘れないようにオープンにしておきます。))

USB-UART コネクタを PC に繋ぐ

続いて、PolarFire SoC の UART とお話できるように、PC に USB ケーブルで接続します。PCIe コネクタを手前に置くようにした時に、ボード右手前の USB コネクタがそれです。

ちなみに、USB-UART ブリッジには Silicon Labs の CP2108 が使われています。私が使っている MacOS Catalina にはドライバが入っていないので、以下から入手してインストールしました。

CP2108 には USB コネクタの VBUS ピンから電源が供給されるので、評価ボードの電源を入れずとも仮想 COM ポートは見えるので、最初にターミナル(TeraTerm, screen など)を起動しておきましょう。このブリッジには 4つの仮想 COM ポートがあり、ドキュメントでは

  • The UART interface0 displays Hart Software Services boot messages
  • The UART interface1 displays U-Boot and Linux boot messages and provides a Linux prompt

とあるのですが、私の場合はなんか変で、HSS(Hart Software Service)は /dev/tty.SLAB_USBtoUART4 に、U-Boot は USBtoUART に繋がります。混乱を避けるため、とりあえず全部の仮想 COM ポートに 115200 bps で繋いでおくと良いでしょう。ちなみに、USBtoUART2 は hart 3 の出力が、また USBtoUART3 には hart 2 の出力(OpenSBI のメッセージ?)が出てました。ここまで来ると「重箱の隅」すぎる話になるので、あまり深追いしないことにします。

HSS を動かしてみる

さっそく、評価ボードに電源を入れてみます。HSS(Hart Software Service)とお話できるターミナルに以下のように表示されるので、何かキーを叩いて停めます。(制限時間 5秒)

[1.617840] HSS_MemTestDDRFast(): DDR size is 1 GiB
Press a key to enter CLI, ESC to skip
Timeout in 5 seconds
...

すると、HSS のコマンドインタープリタが起動します。

[4.95994] HSS_ShowTimeout(): Character 32 pressed

[4.102331] HSS_TinyCLI_Parser(): Type HELP for list of commands
[4.109622] HSS_TinyCLI_Parser(): >>

help と入力してリターンキーを押すと、次のコマンドがあることが分かります。

  • QUIT
  • BOOT
  • RESET
  • HELP
  • VERSION
  • MEMTEST
  • USBDMSC

ちなみにここでは大文字で表示されていますが、小文字でタイプして大丈夫です。

version を確認したところを示します。

[1.556603] HSS_E51_Banner(): PolarFire(R) SoC Hart Software Services (HSS) - version 0.99.10
(c) Copyright 2017-2020 Microchip Corporation.

[1.571182] HSS_E51_Banner(): incorporating OpenSBI - version 0.6
(c) Copyright 2019-2020 Western Digital Corporation.

[1.583855] HSS_PrintBuildId(): Build ID: d6953091fa5556fb5585e6efbd29371ec2fa5c59
[1.592969] HSS_PrintToolVersions(): Built with the following tools:
- riscv64-unknown-elf-gcc (xPack GNU RISC-V Embedded GCC (Microsemi SoftConsole build), 64-bit) 8.3.0
- GNU ld (xPack GNU RISC-V Embedded GCC (Microsemi SoftConsole build), 64-bit) 2.32

HSS の GitHub を見ても 0.9.10 はありませんが、おそらく 1月以上前のバージョンと思われます。これはいずれ、最新版にアップデートしてみましょう。

なお私はついでに、memtest も実行しておきました。搭載の 1GB の DDR をテストしてくれます。(もちろん結果は OK でした。)

ついに Linux をブートする

はじめから eMMC にカーネルもファイルシステムも入っているので大げさなのですが、ブートしてみましょう。電源を入れて 5秒待つか、あるいは HSS から boot コマンドを実行すると U-Boot 経由で Linux が起動します。

OpenEmbedded nodistro.0 icicle-kit-es ttyS0

icicle-kit-es login:

root(パスワードなし)でログインし、dmesg や uname コマンドなどを実行してみましょう。/bin や /usr/bin を覗くと、かなり多くのツールがインストールされていることが分かります。私はあまり詳しくないのですが、必要であれば Yocto や Buildroot で追加のユーティリティなども入れられるのではないでしょうか。

uname -a の結果を示します。

root@icicle-kit-es:~# uname -a
Linux icicle-kit-es 5.6.16 #1 SMP Tue Aug 11 21:56:06 UTC 2020 riscv64 riscv64 riscv64 GNU/Linux

上記の通り SMP は有効になっていて、4コア(hart)全てが Linux に割り当てられています。

続いて ifconfig で確認すると、eth0 が見えます。評価ボードには 2つの Ethernet コネクタがありますが、ボードの端に近い方だけが有効になっていて、ここが eth0 になっています。LAN に接続すると DHCP で接続し、仕組は確認していませんが、この段階で時計も正確になりました。(この評価ボードには、おそらく RTC はない。)

ちなみにカーネルの安定度はあまり高くなく、10分程度使っていただけでしたが、ps コマンドが segmentation fault したり(なんか、未定義命令を使ってるとか言ってた)、また、kernel panic も確認しました。いずれこれも、最新版のカーネルにアップデートしたいと思います。

余談ですが、Linux カーネルからは PCI は見えませんでした。PCI Express(PCIe)のインターフェイスが MMC に接続されていないか、あるいはドライバの設計が間に合わなかったということでしょうか。

次にすべきこと

さて。これだけではボードを買ってきてデモを動かしただけで、あまり面白くありません。「次にすべきこと」は皆様の御興味分野によって異なると思いますので、いくつかケースバイケースで「読むべき資料」をまとめておきましょう。

HSS や Linux を最新版にしたい

こちらのウェブページから確認するのが良さそうです。(いずれも、まだ私も試していませんので、詳細は割愛します。)

このページの下の方に、

というページへのリンクがあります。ここに、合成済みの FPGA ビットストリーム(回路構成ファイル)、コンフィグレーション、ビルド済みの Linux イメージが置かれています。

自分でビットストリームを作りたい

こちらの資料が参考になりそうです。

自分でカーネルをビルドしたい

昨日のブログでも書きましたように、以下に説明があります。現状は Yocto/OpenEmbedded が先んじているようですが、Buildroot のサポートも始まっているようです。

FPGA 開発ツールの使い方を覚えたい

まず、Microsemi の Libero SoC の一般的な使い方は、以下が分かりやすいです。

ただし、名前を見ると分かるように、対応している Libero SoC のバージョンが古く、また PolarFire FPGA 用ではなく SmartFusion2 の話になっています。これを読むと、回路入力からシミュレーション、論理合成等の手順について、雰囲気がつかめます。ちなみに、Xilinx の FPGA の場合は、サポートベンダの Digilent 社に分かりやすいチュートリアルが揃っているのですが、Microsemi 社には、そのようなチュートリアルはないのでしょうか。(結構まじめに探したけど、見つからないです。)

続いて、Libero SoC のリファレンスマニュアル(PolarFire 向け)は、こちらです。

ウェビナーを見たい

昨日の私のブログを御参考ください。

おまけ(その1)

先ほどの PolarFire SoC Icicle Kit Sample Design scripts Libero v12.5 を読んでいると、PolarFire SoC Configuration Generator なる用語が出てきます。PolarFire SoC MSS Configurator については昨日説明しましたが、PolarFire SoC Configuration は、また別物のツールのようです。紛らわしい…。

  • PolarFire SoC MSS Configurator: MSS を構成し、Libero SoC で取り込む IP 設定ファイル(拡張子 .cxz)と、ソフトウェア設計用のデータ(拡張子 .xml)を生成するツール
  • PolarFire SoC Configuration Generator: 上記 .xml ファイルから、ベアメタルライブラリ用の C 言語ヘッダファイル(.h)を生成するツール

ということのようです。古いドキュメントを見ると、.xml ファイルを直接 SoftConsole で読み込む、、、というような説明になっていますが、仕様が変更となったか、あるいは、まだ SoftConsole に統合されていない、ということなのではないかと思います。

今日はここまで。おつかれさまでした。

おまけ(その2)

評価ボードに火を入れようとして AC アダプタを見て驚きました。ま、驚くほどではないのですが、なんと PSE 認証取得済みの電源です!

PSE 認証がないから危険、ということはまず無いのですが、Microchip 社が日本市場を大切に考えているように思え、元半導体メーカー出身の技術者として、思わず涙しました。← 大げさ

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。必ず返信致しますが、時々アドレス誤りと思われる返信エラーがございます。返答が届かない場合、大変お手数ではございますが別のメールアドレスで督促頂けますと幸いです。