“組み込み”と言えば,ArduinoやRaspberryPi,mbedが大流行していますね.手元で開発環境をクロスコンパイル…という手間がなく開発をはじめることができ,また,多数の人の解説を参考にできたり,プロジェクトの共有が簡単だったりと流行するのも納得です.
というわけで(強引),FPGAでもArduinoを使ってみたくなるというのが人の心というもの.すでに完成度の高いプロジェクトがいくつかあります.今回は,http://www.nxlab.fer.hr/fpgarduino/ を利用して,exStickをArduino環境で利用できるようにしてみました.
FPGA側の準備編
残念ながら(当然ながら),exStickはhttp://www.nxlab.fer.hr/fpgarduino/で公式にサポートされているボードではありません.ですが,Webサイトの”My board isn’t listed above, is there any hope?”の説明を元に自分でプロジェクトを作ることで対応させることができるようです.
というわけで対応ファイルを用意しました.次の手順で利用できます.
- 対応リソースをダウンロード exstick_arduino.zip
- GitHubからプロジェクトをクローン % git clone https://github.com/f32c/f32c.git
- 必要なリソースを展開 % cd f32c; unzip (ダウンロードフォルダ)/exstick_arduino.zip
- プロジェクト(rtl/proj/xilinx/exstick/exstick_bram.xise)をISEで開いて合成,配置配線
できあがったbitファイルをFPGAに書き込めばOKです.
ハードウェアの構成は次の通り.
- CPUアーキテクチャ: MIPS
- 動作周波数: 50MHz
- メモリサイズ: 16KB
- UART: 115200bps
exStickはオンボードにペリフェラルがほとんどないので,基本的には全IOをGPIOにマッピングしています.詳細は,zipに同梱のucfファイルを参照してください.
ただし,
- Arduinoポート番号の8〜11は,ボード上のLEDに対応
- UARTはTXをB11(PMODコネクタのP2),RXをC10(PMODコネクタのP1)に対応
させています.
なお,私は,秋月電子のAE-UM232Rを使用してPCと接続していますが,PMODコネクタのP2をAE-UM232RのRXDに,PMODコネクタのP1をAE-UM232RのTXDに直結しました.
Arduino開発環境の用意
Webサイトに詳細な説明がありますので,それに従えばOKです.簡単にまとめると
- Arduino IDEを https://www.arduino.cc/en/Main/Software からダウンロード
- 「ファイル」→「環境設定」でダイアログを開いて”追加のボードマネージャのURL”にhttp://www.nxlab.fer.hr/fpgarduino/package_f32c_core_index.jsonを追加
- 「ツール」→「マイコンボード」→「ボードマネージャ」でダイアログを開く
- ダイアログ(のたぶん下の方)にある”FPGA Arduino”を選択してインストールボタンをクリック
はじめてのArduino
FPGAと開発環境の用意ができたらプログラミングしてみましょう.たとえば,ソースコードはこんな感じ.
-
void setup() {
-
pinMode(8, OUTPUT);
-
pinMode(9, OUTPUT);
-
pinMode(10, OUTPUT);
-
pinMode(11, OUTPUT);
-
}
-
-
void loop() {
-
digitalWrite(8, HIGH);
-
delay(100);
-
digitalWrite(8, LOW);
-
digitalWrite(9, HIGH);
-
delay(100);
-
digitalWrite(9, LOW);
-
digitalWrite(10, HIGH);
-
delay(100);
-
digitalWrite(10, LOW);
-
digitalWrite(11, HIGH);
-
delay(100);
-
digitalWrite(11, LOW);
-
}
-
ボードに書き込む場合は,
- 「ツール」→「マイコンボード」で”Generic FPGA Board”を選択して,
- 「ツール」→「CPU Architecture」で”MIPS”
- 「ツール」→「CPU Speed」で”50MHz”
- 「ツール」→「RAM Size」で”16KB”
- 「ツール」→「Protocol」で”Hex 115.2 kbits/s no verify RS232″
- 「ツール」→「PIN Mapsl」で”Generic”
と設定すればよいでしょう.シリアルポートの設定は忘れないように,個々の環境にあわせて指定してください.
コンパイルしてボードに書き込めばLEDが順に点灯する様子を確認できます.
次は
exStickに同梱のUDP/IP IPコアへのインターフェースを用意して,Arduinoスケッチから簡単にUDP/IPをつかえるようにするというのに取り組んでみようかな,とか思っています.
コメント