Arduino互換RISC-Vプロセッサ“HiFive1”を使ってみる

前回はRISC-Vの実装について紹介し、ASICチップとボードについても少し紹介しました。エンドユーザが遊ぶことができるRISC-Vチップというのはまだまだ数が少ないですが、その中でも、SiFive社が唯一、エンドユーザでも購入できるRISC-Vチップを搭載したボードを販売しています。

ここでは、RISC-V互換プロセッサを搭載した評価ボードである HiFive1に焦点を当て、HiFive1の特徴とアプリケーション開発を体験してみましょう。

図

図

HiFive1 概要

HiFive1は、SiFiveが開発したRISC-Vチップを搭載した評価ボードです。SiFive社はRISC-Vコアを搭載したデザインやチップを開発しライセンシングするベンチャー企業で、UCBのRISC-V開発メンバーによって創設され、RISC-Vコアを搭載したSoCの開発や、サポートライセンス込みでSoCデザインをIPとして販売しています。

このSiFive社が販売しているボードHiFive1は、世界で初めて商用で販売されたRISC-Vチップで、日本でも入手することができます。

このボードの最大の特徴はArduinoのIDEを使ってプログラムの開発を行うことができ、またプログラムのコンパイルとHiFive1ボードへの書き込みもIDEからすべて行うことができます。

また、最大で320MHzという高い動作周波数も魅力です。64bitアドレッシングや浮動小数点は付属していませんが、Arduinoのボードとしては非常に高速で動作するチップであると言えます。

それ以外にも、HiFive1のツールキットはgithub上で公開されており 、コマンドライン上からアプリケーションのコンパイルや、HiFive1ボードへ書き込むこともできるようになっています。

HiFive1の機能的な特徴について、以下にまとめておきます。

  • RV32IMAC(32bitコア、整数演算、ハードウェア乗除算、アトミック演算、短縮命令)搭載のCPUコア
  • RISC-V特権命令仕様 v1.9.1に対応
  • RISC-Vデバッグ仕様 v.0.11に対応

さて、このHiFive1ボードを使うためには様々な方法があります。

  • Arduino IDE環境を使う
  • CUI環境でプログラムのコンパイルから書き込みツールを動作させる(freedom-e-sdk)
  • Eclipseをベースとしたデバッグ環境Freedom Studioを使う

まずは、Arduino IDEを使って、HiFive1を動作させてみましょう。

Arduino IDEを使ったHiFive1サンプル実行

HiFive1をArduino環境で動作させるためには、なにはともあれArduino IDEをインストールする必要があります。筆者はUbuntu Linux 16.04をWindowsのVirtualBox上に構築し、その上にArduino IDEをインストールしました。Arduino IDEのインストールは、Arduinoのウェブサイトからダウンロードして行います。

Arduino IDEのインストールができたら、次にIDE上にRISC-Vツールチェインをインストールします。まずはArduino IDEを立ち上げて、以下の通りに操作します。

  1. [File]→[Preferences]→[Settings]で設定画面を開く。
  2. [Additional Board Manager URLs]→[http://static.dev.sifive.com/bsp/arduino/package_sifive_index.json] を指定する。
  3. [Tools]→[Board]→[Boards Manager]で "SiFive Freedom Boards by SiFive"を選択し、Installをクリックします。
  4. [ツール]→[ボード]で"HiFive1"を指定します。
  5. [ツール]→[プログラマ]で"SiFive OpenOCD"を指定します。

これで、HiFive1をArduino IDEから使用できるようになりました。

図

【備考】HiFive1ボードを接続して認識させる(仮想マシンVirtualBoxを使っている場合)

これは筆者の環境(Virtual Box上でUbuntuをインストールし、そのうえでArduino IDEを動かしている場合)のみ必要な設定なのですが、念のため解説しておきます。Virtual BoxとHiFive1を接続するためにVirtual Boxの設定で、HiFive1を接続しているUSBポートをUbuntu側に転送します。

VirtualBoxの設定で、"FTDI Dual RS322-HS"をVirtualBoxのゲストOS側に転送します。

図Virtual Box上でのHiFive1のデバイスを接続する方法

HiFive1がゲストOSに接続されたか、確認してみましょう。Ubuntu上でdmesgを実行し、HiFive1のUSB接続チップがUbuntu上で認識されたことを確認します。

$ dmesg | tail
...
[157958.226380] usbserial: USB Serial support registered for generic
[157958.245744] usbcore: registered new interface driver ftdi_sio
[157958.245781] usbserial: USB Serial support registered for FTDI USB Serial Device
[157958.245814] ftdi_sio 1-3:1.0: FTDI USB Serial Device converter detected
[157958.245838] usb 1-3: Detected FT2232H
[157958.259902] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0
[157958.261143] ftdi_sio 1-3:1.1: FTDI USB Serial Device converter detected
[157958.261183] usb 1-3: Detected FT2232H
[157958.268871] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB1
reset full-speed USB device number 6 using ohci-pci
...

シリアルコンソールを接続し、サンプルプログラムを実行する

HiFive1のArduino環境にはデフォルトのサンプルプログラムとして、シリアルコンソールから入出力を行い、LEDを制御するプログラムが内蔵されています。

このプログラムの様子を確認するためには、HiFive1とシリアルコンソールで接続する必要があります。Ubuntu上で以下を入力してHiFive1のシリアルポートに接続します。/dev/ttyUSB1は上記のdmesgで確認したデバイス名を指定するようにしてください。接続速度は115200bpsで固定です。

$ screen /dev/ttyUSB1 115200

接続してHiFive1ボードのリセットボタンを押すと、下図に示すような出力が得られます。

"Are the LEDs Changing? [y/n]"と表示されているので、ボード上のLEDを確認し、LEDの色が変わっていっていることを確認しましょう。LEDの色が変わっているのを確認したら、シリアルコンソールに対して"y"をタイプします。すると、"PASS"と表示されました。これで、まずはHiFive1ボードの動作を確認できたことになります。

図

Arduinoのスケッチ例をもう少し動かしてみる

Arduino IDEを使ったサンプルプログラムとして、もう少しアプリケーションを動かしてみましょう。例として、シリアルコンソールから文字を読み取り、そのままシリアルコンソールに表示してみます。

IDEのエディタに以下のように記述し、コンパイル、アップロードしてみます。[ツール]→[書き込み装置を使って書き込む]を選択すると、HiFive1にプログラムがアップロードされます。

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
 
  Serial.print("RISC-V HiFive1 Start\r\n");
}
 
void loop() {
  // put your main code here, to run repeatedly:
  int c;
 
  if (Serial.available() > 0) {
    c = Serial.read();
 
    Serial.write(c);
  }
}

コンソールを見てみましょう。正しく表示していることが確認できました。

今回は、簡単にRISC-VのASICチップHiFive1の使い方について見ていきました。しかし、HiFive1の使い道のほんのわずかにすぎません。皆さんのアイデア次第で、HiFive1ボードをより活用することができると思います。

前の記事を読む