FPGAがプログラムできる仕組み
最初に
FPGAとはプログラムできる回路ですとよく言われる。それはなんとなくわかるけど、じゃあ「プログラムできる回路ってなんだ?」という疑問が生まれてくる。
とくにソフトの方から良く聞かれることがあるので、自分なりにまとめてみた。
とりあえず結論
プログラムできる回路というのはANDとかORとかの論理回路が自由に組み合わせられることである。
この論理回路の組み合わせはLUTに書き込み値によって自由に変えることができる。
目次
以下の順序で見ていこうと思う。
- FPGAの構成
- 論理ブロック
- LUT(ルックアップテーブル)☆ここがメイン
FPGAの構成
FPGAの構成をざっくり以下に示してみる。
まずIOB(入力出力ブロック)から、信号が入ってくる。
次にSB(スイッチブロック)やCB(コネクションブロック)を介して該当のLB(論理ブロック)まで配線される。
LBで何らかの論理回路を通った後、別のLBなどをたくさん通って、最後はIOBから出力される。
では、このロジックブロックとは何だろうか?
論理ブロック(Logic Block)
論理ブロックの構成を以下に示してみる。
LUT(ルックアップテーブル)とFF(フリップフロップ)から構成される。
LUTとは任意の論理回路となるプログラマブルの要である。
ここについてもう少し詳しくみていく。
ちなみにFFはFPGAがデジタル回路としてタイミングを調停するために重要である。
FPGA内は書いたプログラムが物理配線に相当するので、FFをうまく使ってタイミングを完全に達成することが大事である。
この記事ではタイミングの概念には触れない。 (最後の関連記事参照)
LUT(ルックアップテーブル)
このLUT(ルックアップテーブル)がプログラマブル回路を実現している部分である。
まずA入力とB入力があり、出力結果はfとする。
これがANDとかORとかXORとか自由自在に変えられることを順々に見ていく。
まずAとBの論理積(AND)を考えてみる。
真ん中の(a)は真理値表を示している。
次に(b)のLUT表現を見てみる。
真理値表より4つのパターンがあるので4つのメモリを準備する。
ここには論理積(AND)の結果が格納されている。
右側にはセレクタがあり、各信号が「0の時は0側」「1の時は1側」の信号が反映される。
たとえば
- AもBも0の時は、一番上の0の値が出力される。
- A=1,B=0の時は、2番目の0の値が出力される。
- A=0,B=1の時は、3番目の0の値が出力される。
- A=1,B=1の時は、一番下の1の値が出力される。
つまりこれでAND回路が実現されたのである。
メモリに入れる値を上から「0,0,0,1」でなく、「0,1,1,1」とした場合、論理和(OR)になるし、「0,1,1,0」としたら排他的論理和(XOR)になる。
こうしてメモリに入れる値を変えることで、任意の論理回路が作れるのである。
実際のFPGAにはこのような仕組みが数千~100万以上入っているのである。
LUTの実際
3入力-LUTを書いてみると以下のような感じになる。
実際のFPGAでは4入力/6入力/8入力のLUTが使われている。
最後に...
とりあえずFPGAのプログラムできる仕組みはざっくりこんな感じである。
ASICではAND回路がトランジスタ6個で済むところ、FPGAではLUTの仕組みを消費することになる。(RAMとセレクタなどでも少なくとも50個以上?)
これがASICにスピードもトランジスタの個数も及ばない理由なのかなと思う。
但し、最新のプロセス技術(10nm前後)ではASICではマスク代などがとんでもない額になってしまうので、なかなか使えない。
しかしFPGAはたくさん作っていろいろな業界で使われているので、半導体プロセスの成長に伴いFPGAを採用する事例が増えているのかもしれない。
関連記事
タイミングの概念 manaka1122.hatenablog.com
論理回路をトランジスタレベルで再現(OR,AND...DFF) manaka1122.hatenablog.com
参考資料
・FPGAの原理と構成 天野英晴(編集)共著(14人)
・デジタル回路設計とコンピュータアーキテクチャ
David Money Harris (著), Sarah L. Harris (著),
鈴木 貢 (翻訳), 天野 英晴 (翻訳), 中條 拓伯 (翻訳), 永松 礼夫 (翻訳)