DesignSpark Electrical Logolinkedin

オープンソースMCUをつくってArduinoでプログラミングしてみよう!

Arduino対応RISC-Vプラットフォームを使用して、低コストにArty FPGAボードを作っていこう

この記事では、Digilent ArtyボードをオープンソースMCUであるRISC-Vマイコンを使って構成し、プログラミングを行う方法について解説するぞ。このDigilent Artyボードは、製作者から愛好者たちまでを考えて設計された、お手頃な価格のXilinx Artix-7ベースのボードだ。このボードを構成するために、RTLソースコードからオプションで構築可能なオープンソースのRISC-Vマイクロコントローラを使用する。こうして構築したボードにおいて、Arduino IDE又はmakefileベースのGNUツールチェーンを使用してプログラミングを行うのだ。

ただし、対象読者は、Linux、git、makefileベースのソフトウェアの基本知識を備えていることを前提とする。

Freedom E310

E300プラットフォームのトップレベルブロック図 © 2017 SiFive Inc.

RISC-Vは、無料のオープンな命令セットアーキテクチャ(ISA)であり、普及を促進するためにフリーライセンスとして公開されている。FPGAまたはASICといった集積回路のシミュレーション用途、もしくは個人の要求を満たす機器を実装する目的で広く採用してもらうためだ。超低電力のIoTクラスのデバイスから、モバイル、ノートパソコン、デスクトップ、サーバー、さらには高性能計算を行うHPCアプリケーションをターゲットとしたデバイスまで実装することが可能なのだ。

ただし、このRISC-VはプロセッサではなくISA規格だ。RISC-V Foundationでは、Rocketというリファレンスプロセッサの実装とともに、Rocketを用いてコアの生成をサポートするツールや、GNUコンパイラツールチェーンについても提供している。

SiFive社は、RISC-Vの発明者らが設立した営利団体であり、集積回路の機能の一部であるIPコアやSoCプラットフォームなどの製品を提供するだけではなく、提供後のサポートサービスも行っている。SiFive社の提供するFreedom E300 SoCプラットフォームはE3 Coreplexというコアをベースとし、ASICとして利用することが可能である。もちろんこのプラットフォームはFPGAをターゲットにすることができるぞ。

今回Artyボード構成メモリにロードするFreedom E310チップの設計は、上の写真のSoCアーキテクチャをベースに行った。

ハードウェア

Digilent Arty 410-319 (RS ST番号:134-6478)は、Xilinx Artix-35T FPGAのプログラミングに直接使用できるUSB – JTAGの変換アダプタに加え、SPIの一つであり起動時のFPGA設定を行うためのQuad-SPI Flashを統合している。ARM-USB-TINY-H USB - JTAG変換アダプタも、RISC-Vコアへの接続のデバッグ及びプログラミングを行うために必要だ。

また、インターフェイスとオプションも多数用意されているぞ!ここで説明しているのは十分にプログラミング可能なプラットフォームであるため、MCU自体の設計を自由に変更できるだけではなく、あなた自身のコードをアップロードして実行することも可能ということなのだ。

USB-JTAG の配線

「Freedom E300 Arty FPGA開発キット入門ガイド」では、アダプタの配線方法や、SoC及びGNUツールチェーンを利用した構築方法、さらにはボードのプログラミング方法などを詳しく説明している。これは正規の文書であるので、不明点があるときに参照すると良い。この記事で説明する手順は、このガイドの手順に基づいている。

PMOD コネクタ JDの配線

上の写真ではガイドで提案されているワイヤの色を使用しており、ボードへのジャンパ線の装着や取り外しは必要ない。PMOD JDに接続され、他のものには接続されていないことを確認してくれるだけで大丈夫だ。

また、ARM-USB-TINY-Hをアクセス可能にするためには、新しくudev(Linuxカーネルにおけるデバイス管理ツール)にルールを追加する必要がある。具体的には次のように設定を変更し、デバイス情報を固定する。

/etc/udev/rules.d/99-openocd.rulesに対し、以下のコードを編集、追加しよう。

# These are for the Olimex Debugger for use with E310 Arty Dev Kit

SUBSYSTEM=="usb", ATTR{idVendor}=="15ba", ATTR{idProduct}=="002a", MODE="664", GROUP="plugdev"

SUBSYSTEM=="tty", ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664", GROUP="plugdev"

次に、以下を入力し、設定を再度読み込む。

$ sudo udevadm control --reload-rules

ユーザーアカウントがplugdevグループにない場合は、以上の設定を反映することはできない。その場合はあなたのユーザーアカウントをplugdevグループに追加してからログアウトし、その後再度ログインしよう。

FPGA ツールチェーン

今回の使用用途だと、Vivado HLツールの無料版の「WebPACK」で十分だろう。Xilinx Webサイトにログインすると、ダウンローダの使用が可能になる。インストールが完了したら、Digilent社のボードのサポートを追加する必要があるが、これは単にファイルを入手して所定の場所にコピーするためのものだ。

たとえば、Vivado 2017.1インストーラをダウンロードしたら、以下の手順を実行する。

インストーラを実行可能にして、rootとして実行する

$ chmod +x Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin

$ sudo ./Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin

ケーブルドライバをインストールする

$ cd /opt/Xilinx/Vivado/2017.1/data/xicom/cable_drivers/lin64/install_script/install_drivers

$ sudo ./install_drivers

GitからDigilentボードサポートファイルを入手して、所定の場所にクローンする

$ git clone https://github.com/Digilent/vivado-boards.git

$ sudo cp -r vivado-boards/new/board_files/* /opt/Xilinx/Vivado/2017.1/data/boards/board_files/

ホームディレクトリに戻り、環境変数を設定する

$ cd

$ source /opt/Xilinx/Vivado/2017.1/settings64.sh

このsetting64.shというスクリプトは、ログインするか新しい端末を開くたびに読み込む必要があるので注意して欲しい。

ここまでうまくいったなら、以下を入力してGUIを開始できるはずだ。

$ vivado

ボードの構成設定

事前に構築されたFPGAのビットストリームを統合するためのフラッシュプログラミングファイルとデモプログラムをSiFive Webサイトからダウンロードできるぞ(登録が必要だ)。

さて、vivadoを起動したら、Hardware Managerを開いてボードターゲットに接続する。次に、FPGAを右クリックして、[Add Configuration Memory Device]を選択し、Micron part n25q128-3.3vを選択する。すると、ダウンロードされたプログラムファイルである.mcsファイル が選択出来るようになり、プログラミングを始めることが出来るようになるはずだ。

プログラミングが完了し、PROGとマークされている赤いボタンをクリックすると、FPGAの構成が設定される。このとき、LED1とLED2が点灯し、デモプログラムが実行を開始していることを確認する。

ターミナルエミュレータを使用して/dev/ttyUSB1に接続している場合、ターミナル上にメッセージが出力されるはずだ。

この時点で、次のセクションをスキップしてArduino IDE / GNUツールチェーンを使用したSoCのプログラミングを直接開始するか、SoC自体の構築に進むことができるぞ。

チップの構築

まずは、SiFive E300及びU500プラットフォームのChisel RTLソースを含むGitHubリポジトリを“再帰的(recursive)に”クローンしなければならない。

$ git clone --recursive https://github.com/sifive/freedom.git

上記のコマンドで再帰的にクローンすることが出来るはずだ。少し待つと、Rocket Chip GeneratorやChiselなど、依存関係のあるすべてのgitサブモジュールのクローンが作成される。

すべてのクローン処理が完了したら、以下を入力してChiselソースをコンパイルし、Velirogへ読み込ませることができる。

$ make -f Makefile.e300artydevkit verilog

構成メモリファイルを作成するには、まずは前述のように適切なシェルプログラムにより、Vivado環境変数が設定されていることを確認する必要がある(”FPGAツールチェーン”の”ホームディレクトリに戻り、環境変数を設定する”を参照して欲しい)。次に、以下を入力する。

$ make -f Makefile.e300artydevkit mcs

これにより配置とルーティング(place and route: PAR)にしたがってXilinx FPGAの統合が実行される。その後に、設定フラッシュのプログラミングに使用するための新しい.mcsファイルを作成する必要がある。

デフォルトでは、生成されたフラッシュイメージにはデモプログラムは含まれていない。ただし、適切にmakefileを編集すれば、プログラムをイメージに焼くことができる。これについて詳しくは、このフォーラムの投稿を参照してほしい。

Arduinoへの適応

ArtyボードをターゲットにArduino IDEを使用可能なサポートがある。Arduino IDEを使うことでFreedom E310のソフトウェアの開発を簡単に始めることができるのだ。必要な作業としては、まずArduino IDEの[File] → [Preferences] → [Settings]に移動し、以下のBoard ManagerのURLを追加する。

http://static.dev.sifive.com/bsp/arduino/package_sifive_index.json

次に、[Tools] → [Board] → [Board Manager]に移動し、SiFive Freedom Boardsを検索してそれらのサポートをインストールする。そうすると、Freedom E300 Arty DevKitボードを選択し、blinkのサンプル(LEDチカチカのサンプル)を開き、コンパイルしてボードにアップロードできるようになる。

この時点でプログラミングに失敗する場合は、USB-JTAGがPMODコネクタに正しく配線されていない、またはudevが設定されていない、あるいはplugdevグループに属していない可能性がある。

freedom-e-sdk

お好みのテキストエディタを使用すれば、makefileの開発がさらに簡単になる。安心して欲しい、スタンドアロンGNUツールチェーンのfreedom-e-sdkを構築するのと同じくらい簡単だ。

まずは、依存関係を構築する必要がある

$ sudo apt-get install autoconf automake libmpc-dev libmpfr-dev libgmp-dev gawk bison flex texinfo libtool libusb-1.0-0-dev make g++ pkg-config libexpat1-dev zlib1g-dev

次に、ソースをクローンし、構築する

$ git clone --recursive https://github.com/sifive/freedom-e-sdk.git

$ cd freedom-e-sdk

$ make tools

最後に、デモプログラムを構築してアップロードするため、以下を入力する

$ make software PROGRAM=demo_gpio BOARD=freedom-e300-arty

$ make upload PROGRAM=demo_gpio BOARD=freedom-e300-arty

’Hack’の自由

ここまで見てきたらお分かりだろう。カスタマイズ可能なマイクロコントローラプラットフォームを構築して実行すれば、あなたは少しの費用と時間でSoC設計を自由に’Hack’できるのだ。自信がない場合は、カッコイイArduino適応ソリューションを今すぐ手に入れることが出来るぞ。— Andrew Back氏

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.