FPGAボードのDE0をちょこちょこ触ったメモ。
734246_10200296379321712_433891549_n

FPGAとは

Field Programmable Gate Arrayの略で、プログラム可能な大規模集積回路です。
DE0は、ALTERA社のFPGA Cyclone IIIを搭載したボードで、USBで接続したPCからプログラムを書き込むことが出来ます。

ピンがいっぱい

DE0に載っているFPGAには、たくさんたくさんピンがあります。その数は、Arduinoの比ではありません。
DE0は、FPGAが載っている”ボード”です。なので、たくさんのピンが、それぞれどこかに繋がっていたり、繋がっていなかったりします。
例えば、一番右側のLEDはJ1と言うピンが繋がっています。ここに”1ビットを出力”すると、LEDが光ります。また、一番右側のディップスイッチにはJ6と言うピンが繋がっています。このスイッチのON/OFFを読み取ることが出来ます。
とてもたくさんピンがあるので、覚えられるか不安になりましたが、やってみると、そもそも覚える必要はないと解りました。
DE0ではJ1ピンはLEDですが、他のボードでは別の所に繋がっているかもしれないからです。考えてみれば当然ですね。
プログラム(Verilog HDL)側では、ピンを論理名(“led0″とか)で扱い、あとから論理名と物理的なピンを関連づける”Pin Planner”という行程があります。
Untitled

開発環境

Quartus IIは、DE0に付属の開発環境です。
DE0に付属しているのはバージョン9.0ですが、今は12.1と言う新しいバージョンが出ています。Web Editionと有償版がありますが、僕は迷わずWeb Editionを使っています。
Quartus IIは、WindowsとLinuxに対応しています。残念ながらMac OSには対応していません。
なので僕は、Parallels上のWindows 8にインストールしました(なぜWindows 8かと言えば、Windows 7などのライセンスは、他のマシンにインストールして出払っているからです)。
いきなり最新のOSということで、多少の不安はありましたが、Windows 8上でも動作しました。ただ、Quartus 12.1をいきなりインストールしてもJTAG関係のライブラリでエラーが発生してDE0にプログラムを書き込むことが出来ませんでした。
Quartus 9.0をインストールしてから、12.1をインストールすると、きちんと動作するようになりました。その後は、12.1からでも書き込みが出来ています。

プログラムから書き込みまで

DE0で開発をするには、Quartus II上で
・Verilog HDLを記述
・”Start Analysis & Elaboration”を実行(文法チェックなどここでしている?)
・”Pin planner”ツールでピン配置を関連づけ
・”Start compile”実行(結構、時間がかかる)
・”Programmer”ツールでDE0に書き込み
と言う流れです。その他、シミュレータなどでいろいろ検証したりもあるようですが、僕はまだその段階にありません。

Verilog HDL

Verilog HDLで、どういう動作をするのかをプログラムします。この言語、文法自体は高級言語に近いのですが、普通のコンピュータのプログラムとはかなり勝手が違います。
これは電子回路の世界では常識かもしれませんが、FPGAを扱う上では、「クロックが全てであり、王様」です。
スイッチなどの入力の変化を検知する以外に何らかの動作をさせたいのであれば、クロックの立ち上がりと立ち下がりにどんな動作をするのかを書いていきます。
10msごとに実行しろとか言っても、FPGAは理解しません。そもそも、そんな命令は用意されていません。
彼らはクロックを基準に動作します。なので、基本のクロックをなんかいろいろして、10msのクロックみたいなものを作り出さなくてはなりません。
(時計用のクロックを搭載して、それを基準に時間が解るものもあるようですが、少なくとも、DE0には搭載されていないようです)
ただ、クロックが王様で、良いこともあります。
クロックを基準に動作すると言うことは、複数の回路を同時に動かすことが出来ると言うことです。
なので、FPGAの中にそれぞれ独立した複数の処理モジュールを作って、クロックの号令一下、並列で動かすことも可能です。多分。。。
いろいろ書きましたが、Verilog HDLは使い始めたばかりなので、まだよくわかっていません。

ちょっと間違うと、期待した動作にならず、また、全く関係ない部分のLEDが中途半端に光ったりして焦ります。ひたすらコンパイルと書き込みを繰り返している様は、まるで生まれたての子馬のようです。

結局、FPGAは何に使えるのか。

僕にはまだわからない。と言うのが正直なところです(遊び始めたばかりだし)。
ただ、FPGA自体は別に新しい技術というわけではないと思います。僕が記憶してる中でも、やねうらおさんがFPGAについて触れていました。Androidが登場した直後ですね。

 

新しい技術やプラットフォームの登場と言うよりも、チップの価格が下がったとか、DE0のような取り扱いの簡単なボードが登場してきたのが、注目を浴びるきっかけでしょうか。僕が始めた「動機も安いから・手に入りやすいから・USBで書き込みできるから」ですし。
あと、最近Facebookで話題になっていた kazunori_279さんのエントリも興味深いです。

 

NICのFPGAをカスタマイズして、本来の目的以外の処理をさせようという試みです。僕は、HFT(High Frequency Trading)には不明ですが、情報がコンピュータに届く前、NICの段階で、アプリケーションレベルで何かしてしまうと言うのは新しい発想だと思います。
このように実際に使われているのを見ると、少しイメージがわいてきますね。