今回は比較的入手しやすいDE0-CV 開発キットを使用して解説します。
これは INTEL (ALTERA) のFPGAのCyclone Vを搭載した入門用FPGA開発キットで、ボタンやVGA出力等の豊富なI/Oが初めから搭載されています。
ハードウェア記述言語はVerilog HDLを使用します。
今回は機種依存の書き方はしないので、基本的にXILINXや他のFPGAでもそのまま使用できます。
INTEL (ALTERA) のFPGAは開発環境としてQuartusを使用します。ここではQuartusの使用方法やピンの配置方法は説明をしません。
単純な回路の例
まずはVerilog HDLのソース
module sample01(LED, KEY); input [3:0] KEY; output [3:0] LED; assign LED[3] = KEY[3]; assign LED[2] = KEY[2]; assign LED[1] = KEY[1]; assign LED[0] = KEY[0]; endmodule
このソースの意味はKEYを入力に設定、LEDを出力に設定、KEYとLEDをそれぞれ接続しています。
ソフトウェアのプログラム言語に慣れていると「LED[3] = KEY[3]」を実行した後に「LED[2] = KEY[2]」が実行されてるように思いがちですが、このソースの場合はLEDとKEYをそれぞれ論理的に配線をして、リアルタイムに電気が流れます。
DE0-CVの場合のピン配置を下の様に設定してください。
Node Name | Location |
KEY[3] | PIN_M6 |
KEY[2] | PIN_M7 |
KEY[1] | PIN_W9 |
KEY[0] | PIN_U7 |
LED[3] | PIN_Y3 |
LED[2] | PIN_W2 |
LED[1] | PIN_AA1 |
LED[0] | PIN_AA2 |
これをDE0-CVで実行した場合は4個のLEDが点灯されていて、タクトスイッチを押すと対応するLEDが消えると思います。
タクトスイッチを押してLEDが消えるのは、タクトスイッチがプルアップされているからです。普段は電気が流れていて、ボタンを押すと電気がGNDに流れるのでOFFになります。
ソフトウェアで処理する場合はクロック等を上から順番にトリガーにしてタクトスイッチの状態を順番にLEDに渡すようなイメージですが、ハードウェアで処理する場合は単なる配線なので常に同時に電気が流れてリアルタイムで同時に処理ができます。例えばGPU等の様にソフトウェアで処理できることもあえて専用のハードを使う意味が分かりますね。
インターフェースZERO No.04 Hello Worldから始めるFPGA入門: 2大メーカXilinx,Alteraのお手軽ボードでチョコッと体験! (インターフェースZERO (4))
- 作者:三好 健文
- 発売日: 2013/06/05
- メディア: 単行本