教団「二次元愛」

リアルワールドに見切りをつけ、二次元に生きる男の生き様 (ニコニコでは「てとろでP」)

FPGA とは?

2013-06-14 23:27:21 | 科学
ご要望により、今回はFPGAとは何ぞやってお話をば。




デジタル回路で以下のようなものを作らないといけない事になってしまったとします。

[課題]
・aとbのどちらかが1だった場合には1を、
・aとbの両方が0だった場合には0を、
・cが0から1に変化したときに、
・dから出力する

これをデジタル回路の教科書どおりに書くと以下のような回路図になります。

デジタル回路の知識ないとこの記号の意味がわからないかもしれませんが、とりあえず今日のところは意味までわからなくてもほっといていいです。
なんか知らんけどそんな感じらしい…くらいに見てくださいな。







で、どうやってこの回路のとおり動く現物を作りましょうか?
…という話になるわけですが。

電子工学科の学生ならここまではできるはずですが、現物を作ってみせろと言われるととたんにできませんと言うヤツがほとんどじゃないでしょうかね。
まずこれどうやって作るのかって話からはじめます。



[方法その1]
誰でも思いつきそうな方法でいうと、このとおりの動作をする半導体を新しく作ってしまうという方法があります。

ですがこの方法はオススメしません。
中身がこの程度の簡単なものでも作るのに軽く数100万円はかかり、今のご時世だとふつうに数億円くらいとられるからです。
10万個つくるならそれでもいいですが、10個もいらないときにはこの方法は使えません。



[方法その2]
(例えば74ロジックという)汎用のICを何個か組み合わせて作るという方法もあります。
試しに設計してみると以下のようになります。







これならできそうですね。
今回の例ならICが2個あればできますから、そんなに作るのは手間ではありませんね。

けど。
これが16ビット×16ビットのかけ算器を作りたいとしたら…。

74ロジックのICが数10個くらい必要になります。
こんなもんやってらんねえwということになるわけで。

じゃあどうすればいいのか?

そこで出てくるのがFPGAになります。



[方法その3]
こういうものはFPGAで作りましょう。

FPGAは Field Programmable Gate Array の略です。
でもこれじゃあ何が何やらわかりませんね。
意訳すると、作っちゃった後でも(Field) 中身を好き勝手に変更できるように(Programmable) 汎用のロジックをたくさん詰めこんだ(Gate Array) ICとなります。

で、中身を見ていきましょう。







FPGAの中には、ロジックエレメント(LEと略します)というものがたくさん入っています。
ロジックエレメントは中身を切り替えられるように作ってあります。
たとえば上図のようになります。
(本物はこんな回路にはなっていません。今回説明しやすいように本物よりシンプルにしてあります。)







それがFPGAの中にずらーっと敷き詰めてあります。
少ないやつだったらそれが数10個くらい(一番下でその例を出します)、多いやつだったら数10万個くらい入っています。
(この絵も本物よりシンプルにしてあります。)

じゃあこれどうやって使えばいいかというとですね。







こんな感じにスイッチを切り替えてやればいいわけですよ。
さっき出てきた教科書どおりの回路とまったく同じものがこれでできてしまいました。
今回はたまたまLEが1個でできましたけど、もっと複雑なものでも何個も使えば何でも作れます。

じゃあ次は、これはどうやって設計しているのかって話をしましょう。

回路とにらめっこしながらONにするスイッチがどれなのかを考えてもいいでしょう。

でもそういう設計はふつうしません。
なんでしないかってぇと、この例のICが2個あればできるくらいの簡単なものでも目で追っかけるのがけっこう大変なくらいですし、それをシュウォッチくらいの回路規模のものでやれっていうのは無茶ぶりすぎるからです。

で、ふつうはプログラミング感覚で設計します。







FPGAの設計は、というか最近のデジタル回路の設計は、こんな感じでやります。

ここではVerilogというプログラミング言語を使いました。
よく似たものにVHDLというのもあります。
これ、意味まではわからなくても作るときのイメージだけ感じてくださいな。

Quartus II ソフトウェア ウェブ・エディション
http://www.altera.co.jp/products/software/quartus-ii/web-edition/qts-we-index.html

ツールはタダで配られている↑これを使っています。

C言語でコンパイルするのと同じ感覚でコンパイルすれば、あとはツールが勝手にFPGAの設計図を作ってくれます。
(a,b,c,dをFPGAのどの足に割り当てるとか、他にもいろいろ設定するところはありますけど)







コンパイルしてツールが勝手に作った結果がどうなっているかを見てみました。
プログラミング感覚で作った回路ですが、たしかに先のデジタル回路のとおりのものができているっぽいことがわかります。
プログラムを書くと回路ができるというのも初めは何か違和感がありますが、こうして見てみると何の問題もないわけですよ。
というか、デカいものを作るときにはこうやって作らざるをえません。







その次に、これがちゃんと思ったとおりに動いているんだかどうなんだかをシミュレーションで確認します。
この例では、aを0に、bを1にして、cを0から1にしたとき、dが1になったことを確認したものになります。

FPGAなら豪気な人はシミュレーションせずにいきなり実機で動かすかもしれませんけど、自分たちでLSIをおこす時はしくじったら修正で1億円飛びますから、とっても念入りにシミュレーションしてちゃんと動くことを確認します。
(こういう作業とかのことを論理検証だとか言います)

このシミュレーションには、さっきの Quartus II をインストールしたらいっしょについてくる ModelSim Altera Starter Edition (これもタダ)を使っています。







この作った回路がFPGAの中でどう使われたのかってぇのがこれです。
左上に小さい赤の四角が1個ありますが、そこのLEを使いましたという表示です。
(ここでは5M40ZE64A5といういちばん小さいCPLD(FPGAのようなちょっと違うもの)を使いました。)

今のFPGAならそんなに高いものじゃなくてもファミコンのCPUくらいふつうに全部入ります。
だったらシュウォッチくらい余裕ですね。
もちろん作れるくらいの腕前がついたらという話にはなりますけど。



次回予告。
シュウォッチはFPGAで作られたのかどうなのか?