2017/02/22

RISC-Vなマイコンボード (HiFive1) を試す

オープンな命令セットアーキテクチャとして注目されているRISC-VベースのMCU評価ボード HiFive1が届いたので、さっそく使ってみた。
 RISC-Vアーキテクチャそのものは、クラシックなRISCをベースにしつつ、分岐遅延スロットを持たない(ARMやPPCのように)系統で、可変長命令をはじめからサポートしている。
<https://riscv.org/specifications/>

開発元 SiFive社<https://www.sifive.com/

入手はCloudsupplyから<https://www.crowdsupply.com/sifive/hifive1/>




HiFive1のMCUとボード上の実装

MCUとしてFreedom E310が搭載されている。<https://www.sifive.com/products/freedom-e310/>

パッケージは結構小さい
RISCコアの周辺は最小限の実装となっている。
 個人的にはこういう最小限のシリアルバスだけなROMレス32ビットMCUがほしい(RAMはもうちょっとあると良いけど・・・)

MCU
・ISA:RV32IMAC(RV32Iベース)
・180nmプロセス
・16kb SRAM, 16kb L1 Chache
・1.61DMIPS/MHz
・ROMレス(128MbitのQSPI Flashが実装済み)
・Clock HFOSC: 16MHz XTal (内蔵PLLにより、最大320+MHz)
・LFOSC: 32.768kHz (RTC用)
・コア電圧は1.8V (VDDIOには3.3Vが入力されていた)
I/O
・ピンヘッダには双方向レベルシフタ(TXS0108ERGYR)を挟んであり、ジャンパピンでI/O電圧レベルを5Vと3.3Vから選択(IOREF)
・外部バスは SPI x1, UART(デバッガと兼用) x1, I2C x1(ソフトウェア実装)
・ADCは無し
・PWM x9
JTAG
・OpenOCD(FT2232H)

Freedom E310 manual
https://dev.sifive.com/documentation/freedom-e310-g000-manual/

開発環境のセットアップ

今のところ対応環境はUbuntuのみだが、ArduinoIDEを使って開発できる。
設定は以下のPDFの手順に従った。
https://dev.sifive.com/hifive1/hifive1-getting-started-guide/

Arduino IDEでの開発であれば、SDKのビルドは不要。
UbuntuなのでUSB Serialのパーミッションを設定する必要がある。
スタートガイドの18ページから、Ubuntu上で認識されたFT2232Hにudevルールを追加する手順が紹介されている。

スタートガイドの23ページからArduinoIDEの設定手順になる。

個人的に手順の中でボードのプログラマー選択を見落としていて、スケッチのアップロードに失敗してしばらく悩むことになった。
ボードを選択しただけではプログラマーの選択は連動しないので、忘れるとAVR用のプロトコルが選択されたままとなる。ここもOpenOCDに変更する。
プログラマー設定を忘れずに。

 無事Lチカまでこぎつけた。
 円周率の多倍長演算をさせてみたところ、パフォーマンスは他の32ビットMCUと同等の性能が出せた。低コスト化で除算器などが省かれない限りは、アーキテクチャの差を実感することがあまりない分野ではある…。

 基本は16MHzの外付け水晶のクロックで動作し、ボード選択時にPLLを有効化した256MHz,320MHz超えも選択できる。消費電力は増えるけど、クロックでごり押しすることも可能。

開発環境は、Virtualbox上のUbuntuと、UbuntuをクリーンインストールしたChromebookで動作確認している。

できたてのシンプルなSoCだけど、Arduinoベースの環境が用意されていて完成度が高く、あっさりと動かせてしまうので面白い。