HelioボードでFPGAによるLチカ
はじめに
FPGAに入門するため、Macnica Helio SoC評価ボードを購入しました。 今回はHelioボード内蔵のプッシュボタンとLEDを用いてブッシュボタンのON/OFFに応じてLEDを点灯してみます。
完成すると以下のような動作になります。
HelioボードでFPGA入門する人向けのまとまった良い情報が無かったので、詳しく記録に残しました。これからHelioボードでFPGAに入門する方などの参考になれば幸いです。
購入したHelioボード
Macnicaオンラインストアで購入しました。 税込みで28,000円ほどでした。 ACアダプターとUSBケーブル、8GB Micro SDカード、SDカードアダプタが付属しています。
準備
ボードのリビジョン確認
まず、ボードのリビジョンを確認します。Helioボードはこれまでに何回かリビジョン更新されているようです。ボードにシールが貼ってあり、それを見るとRev.1.4と書かれていました。この記事を書いている時点ではRev. 1.4が最新のようです。Rev 1.4の情報は、Helio Resources for Rev.1.4にまとまっています。
ボードレイアウト確認
Getting Startedでボードレイアウトを把握します。
良く見るとUSBポートが2つあります。Getting Startedの「2.2 External Connection」よると、用途は、
とのことです。
今回は、FPGAプログラミングをしたいので、後者のJ11のUSBポートに付属USBケーブルでPCを接続します。
その他ジャンパやDIPスイッチは、デフォルトのままにしておきます。
今回は、とりあえずFPGAのプログラミングが試せれば良いので、Getting Startedに記載されている以下のステップは省略します。
- Creating MicroSD boot disk for Helio Board
- Running Linux on Helio Board
ソフトウェアのセットアップ
Quartus II 14.1 Web Editionをセットアップします。Devicesには、Helioボードに搭載されているCyclone Vだけ動作すれば良いので「Cyclone V device support」以外のチェックは外します。 セットアップの終盤でAltera USB-Blaster IIをインストールするか聞かれるのでインストールしておきます。
作るもの
ボード内蔵のプッシュボタン2個とLED2個を使います。 プッシュボタンをA、Bとし、LEDをX、Yとすると、A and Bの時Xが点灯、A or Bの時、Yが点灯、となるようなものを作ります。
実装
ここから実装作業に入ります。
プロジェクトの作成
- Quartus IIを起動します。
- File -> New Project Wizard を選択します。
- Nextを選択します。
- 以下を入力して、Nextを選択します。
- Directory: C:/work/sample
- Name: SAMPLE
- Top-Level Entity: SAMPLE
- Empty projectのままNextを選択します。
- Add FilesはそのままNextを選択します。
- Family & Device SettingsはName FilterにFPGAチップの型番「5CSXFC5C6U23C7」を入力してNextを選択します。
- EDA Tool SettingsはそのままNextを選択します。
- 内容を確認して、問題なければFinishを選択します。
コーディング
FPGA関連の書籍ではじめて買ったはじめてのFPGA設計がVHDLで記述されていたので、VHDLを使います。
C:/work/sample/以下に空ファイルのsample.vhdを作成します。 Project NavigatorからFilesタブを選択し、Filesを右クリック->Add/Remove Files in Projectを選択します。 sample.vhdを選択して、追加します。
以下のコードを入力します。はじめてのFPGA設計のP29のリスト4-1のコードを使いました。
library ieee; use ieee.std_logic_1164.all; entity SAMPLE is port( A, B: in std_logic; X, Y: out std_logic ); end SAMPLE; architecture RTL of SAMPLE is begin X <= A and B; Y <= A or B; end RTL;
コンパイル
Processing -> Start Compileを選択します。 処理が完了するまでしばらくかかります。 Intel Core i7 870 @ 3GHzで3分弱かかりました。
導入したQuartus IIがWeb Editionのためか、以下の警告が表示されます。
「Warning (20028): Parallel compilation is not licensed and has been disabled」
ピンの割り付け
コンパイルが完了すると、ピンの割り付けができるようになります。 sample.vhdに記述した、A、B、X、YにFPGAのピンに割り当てる作業になります。
ここでReference Manualを確認します。
「4.7.1 User-Defined push button」と「4.7.3 User-Defined LEDs」に、プッシュボタンとPin番号の情報が載っています。
- SW11 -> Y4
- SW12 -> Y8
- LED3 -> U9
- LED4 -> AD4
SW11をA、SW12をB、LED3をX、LED4をYと対応づけることにします。
ちなみに回路図が気になるなら、Schematicを確認します。Reference Manualに記載された仕様の通り結線されていることがわかります。
Assignments -> Pin Plannerを選択します。
AをY4にドラッグ&ドロップします。すると、AのLocationがPIN_Y4に設定されます。 残りも同様の作業を繰り返します。
すべての割り付け作業が完了すると、以下のようになります。
未使用のピンの処理
はじめてのFPGA設計によると、未使用のピンを処理しておかなないと、思わぬ誤動作やデバイスを破壊する恐れがあるとのことなので、設定しておきます。
- Assignments -> Deviceを選択します。
- Name FilterにFPGAチップの型番「5CSXFC5C6U23C7」を入力します。
- Device and Pin Optionsを選択します。
- Unused Pinsを選択します。
- As input tri-statedを選択します。
- OKを選択します。
フィッティング
Processing -> Start Compileを選択します。コンパイルの手順と同じですが、今回はピンの割り付けも加味されます。ここでも前回同様に3分弱かかりました。
FPGAに書き込む
手順を以下に示します。試行錯誤で見つけた手順なので変なやり方をしてるかもしれません。
- USBケーブルとDCケーブルを接続します。Power SwitchをONにします。PCがHelioを認識します。
- Tools -> Programmerを選択します。
- Hardware Setupを選択します。(3~5は1度だけでOK)
- Currently selected hardwareに「Helio [USB-1]」を選択します。
- Closeを選択します。
- Auto Detectを選択します。
- 「5CSXFC5C6」を選択します。
- 「5CSXFC5C6」を選択し、Deleteキーを入力します。SOCVHPSだけが残った状態にします。
- Add Fileを選択します。C:/work/sample/output_file/SAMPLE.sofを選択します。
- Startを選択します。
- 正常に書き込まれたら、Progressが100%になります。
参考に設定画面のキャプチャを載せます。
動作確認
期待する動作になることを確認します。ボードの電源を落とすとFPGAに書き込んだプログラムは消えます。
おわりに
FPGAをさわるのは今回がはじめてですが、なんとかLチカできました。