オープンな命令セットアーキテクチャとして注目されている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に変更する。
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/>
パッケージは結構小さい |
個人的にはこういう最小限のシリアルバスだけな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)
https://dev.sifive.com/documentation/freedom-e310-g000-manual/
開発環境のセットアップ
今のところ対応環境はUbuntuのみだが、ArduinoIDEを使って開発できる。
設定は以下のPDFの手順に従った。
https://dev.sifive.com/hifive1/hifive1-getting-started-guide/
UbuntuなのでUSB Serialのパーミッションを設定する必要がある。
スタートガイドの18ページから、Ubuntu上で認識されたFT2232Hにudevルールを追加する手順が紹介されている。
スタートガイドの23ページからArduinoIDEの設定手順になる。
個人的に手順の中でボードのプログラマー選択を見落としていて、スケッチのアップロードに失敗してしばらく悩むことになった。
ボードを選択しただけではプログラマーの選択は連動しないので、忘れるとAVR用のプロトコルが選択されたままとなる。ここもOpenOCDに変更する。
プログラマー設定を忘れずに。 |
無事Lチカまでこぎつけた。
円周率の多倍長演算をさせてみたところ、パフォーマンスは他の32ビットMCUと同等の性能が出せた。低コスト化で除算器などが省かれない限りは、アーキテクチャの差を実感することがあまりない分野ではある…。
基本は16MHzの外付け水晶のクロックで動作し、ボード選択時にPLLを有効化した256MHz,320MHz超えも選択できる。消費電力は増えるけど、クロックでごり押しすることも可能。
開発環境は、Virtualbox上のUbuntuと、UbuntuをクリーンインストールしたChromebookで動作確認している。
できたてのシンプルなSoCだけど、Arduinoベースの環境が用意されていて完成度が高く、あっさりと動かせてしまうので面白い。