Home記事一覧フォーラム

Raspberry Pi上にFPGA開発環境を構築する

【更新履歴】
2016/05/18 soft reset回路を追加
2016/04/08 新規公開

Raspberry PiとFPGAボードをUSBで接続し、Synthesijerで高位合成、IceStormで論理合成、配置配線、書き込みを行って、バッテリー駆動のRaspberry Pi単体のみで完全オープンソースのFPGAセルフ開発環境を構築します。


必要機材

OSのインストール

Raspbian Jessie (Desktop版) を下記のページに従ってダウンロード、SDカードにインストールします。

Download Raspbian for Raspberry Pi

Installing operating system images - Raspberry Pi Documentation

Raspberry Piをネットに接続して起動します。
自動的にX環境が起動するはずですが、もし起動しない場合は login:pi password:raspberry でログインして startx コマンドでX環境を起動します。

まず最初にファイルシステム容量をSDカードの最大値まで拡大します。

Menu→Preferences→Raspberry Pi Configuration を起動します。

System: Filesystem: Expand Filesystem をクリックします。しばらくするとダイアログが開くのでOKをクリックします。

「OK」で閉じてリブートします。

再起動後、ターミナルで、

パッケージ情報をアップデートします。

sudo apt-get update

日本語フォントとインプットメソッドをインストールします。

sudo apt-get install fonts-vlgothic uim uim-anthy

Menu→Preferences→Raspberry Pi Configuration を起動し、以下のように設定します。

Localisation: Locale: Set Locale
  Language: ja (Japanese)
  Country: JP (Japan)
  Character Set: UTF-8

Timezone: Set Timezone
  Area: Japan

Keyboard: Set Keyboard
  Country: Japan
  Variant: Japanese

WiFi Country: Set WiFi Country
  Country: JP Japan

「OK」で閉じてリブートします。

次に、USBキーボードをRPiに接続した状態でローカル作業でキーボードレイアウトの設定を行います。

ターミナルで、

sudo dpkg-reconfigure keyboard-configuration

キーボードモデル:標準 105 キー (国際) PC
キーボードのレイアウト:その他
キーボードが由来する国:日本語
キーボードのレイアウト:日本語
AltGr として機能させるキー:キーボード配置のデフォルト
コンポーズキー:コンポーズキーなし
X サーバを強制終了するのに Control+Alt+Backspace を使いますか?:はい

コンソール時に英語表示にする設定にします。

nano ~/.bashrc

ファイル末尾に追加します。

case "$TERM" in
linux)
    LANG="C";;
esac

IceStormのコンパイル時にメモリが足りなくなるのを防ぐためスワップファイルサイズを増やします。

sudo rnano /etc/dphys-swapfile

100MBから500MBに変更
CONF_SWAPSIZE=500

sudo dphys-swapfile setup

sudo dphys-swapfile swapon

Synthesijerのインストール

高位合成ツール「Synthesijer」を使う」の方法でSynthesijerをインストールします。「※Ubuntu14.10以降の場合」の方法でOKです。

IceStormのインストール

Project IceStorm」の「Where are the Tools? How to install?」の手順でインストールしますが、デスクトップモードではメモリが足りなくなる場合があるので、先に「git clone 〜」の作業だけデスクトップモードで済ませておき、その後コンソールモードに切り替えてからコンパイルします。
icestorm、arachne-pnr、yosysをgit cloneした後、
Menu→設定→Raspberry Piの設定 で、以下のように設定してリブートし、コンソールモードで起動します。
システム:ブート:CLI
パフォーマンス:GPUメモリ:16

この状態でmake、sudo make installの作業を行います。
Yosysのコンパイル中にABCがダウンロードされるので、コンパイルはネットワークに接続した状態で行ってください。
コンパイルにはかなり時間がかかります。(数時間以上)

完了したら「startx」コマンドでデスクトップモードに戻ります。
Menu→設定→Raspberry Piの設定を元に戻しておきます。
システム:ブート:デスクトップ
パフォーマンス:GPUメモリ:64

53-lattice-ftdi.rules も忘れずに作ってください。

sudo rnano /etc/udev/rules.d/53-lattice-ftdi.rules

ACTION=="add", ATTR{idVendor}=="0403", ATTR{idProduct}=="6010", MODE:="666"

Verilogシミュレーターのインストール

Icarus Verilogコンパイラを使う」の方法でシミュレーターと波形ビューワをインストールします。

サンプル・プロジェクトのダウンロード、コンパイル

ダウンロード:led_array_example_ice40hx8k.tar.gz

tar xzf led_array_example_ice40hx8k.tar.gz

SynthesijerでjavaプログラムをVerilog HDLファイルにコンパイルします。

cd led_array_example_ice40hx8k

make

論理合成、配置配線、ビットストリームの出力を行います。

cd ice40hx8k

make

FPGAボードをUSBで接続してビットストリームを転送します。
iCE40HX-8K Breakout Boardはプログラミングモードをボード上のジャンパ設定でSPI FlashもしくはCRAMに切り替えることができます。iCE40-HX8K Breakout Board User's Guide(PDF)でジャンパ設定を確認してください。
通常、開発時には直接CRAMへ転送しますが、SPI Flashに書き込むとボード単体で動作させることができます。

このプロジェクトのMakefileでは、SPI Flashへは

(led_array_example_ice40hx8k/ice40hx8k ディレクトリで)

make prog

CRAMへは

make prog-ram

で転送できます。(モードを間違えないように気をつけてください)

参考機材

上記ビデオで使用している小型タッチパネルは「Waveshare 3.5inch RPi LCD (A)」です。

このLCDはSPI接続なので画面書き換えは速くありませんし、GPIOも他に使用できなくなってしまいますが、小型で安価なのが特徴です。
Raspbian Jessieで使用するためには「Waveshare Wiki」にある「LCD-show-151020.tar.gz for 2015-09-24-raspbian-jessie」ドライバを使用する必要があります。

スクリーンキーボードは

sudo apt-get install xvkbd

でインストールできます。
デスクトップにランチャーを作っておくと単体で操作できて便利です。

nano ~/Desktop/xvkbd.desktop

[Desktop Entry]
Type=Application
Name=xvkbd
Comment=xvkbd
Icon=/usr/share/icons/gnome/32x32/devices/keyboard.png
Exec=/usr/bin/xvkbd -compact
Terminal=false
Path=/home/pi