よくわからないFPGAのこととか

よくわからないFPGAとか回路とか数学とかについて

FPGAがプログラムできる仕組み

最初に

FPGAとはプログラムできる回路ですとよく言われる。それはなんとなくわかるけど、じゃあ「プログラムできる回路ってなんだ?」という疑問が生まれてくる。
とくにソフトの方から良く聞かれることがあるので、自分なりにまとめてみた。


とりあえず結論

プログラムできる回路というのはANDとかORとかの論理回路が自由に組み合わせられることである。
この論理回路の組み合わせはLUTに書き込み値によって自由に変えることができる。


目次

以下の順序で見ていこうと思う。

  • FPGAの構成
  • 論理ブロック
  • LUT(ルックアップテーブル)☆ここがメイン

FPGAの構成

FPGAの構成をざっくり以下に示してみる。

f:id:manaka1122:20201220175549j:plain
FPGAの構成

まずIOB(入力出力ブロック)から、信号が入ってくる。
次にSB(スイッチブロック)やCB(コネクションブロック)を介して該当のLB(論理ブロック)まで配線される。
LBで何らかの論理回路を通った後、別のLBなどをたくさん通って、最後はIOBから出力される。

では、このロジックブロックとは何だろうか?


論理ブロック(Logic Block)

論理ブロックの構成を以下に示してみる。

f:id:manaka1122:20201220175628j:plain
論理ブロック

LUT(ルックアップテーブル)とFF(フリップフロップ)から構成される。

LUTとは任意の論理回路となるプログラマブルの要である。
ここについてもう少し詳しくみていく。

ちなみにFFはFPGAがデジタル回路としてタイミングを調停するために重要である。
FPGA内は書いたプログラムが物理配線に相当するので、FFをうまく使ってタイミングを完全に達成することが大事である。
この記事ではタイミングの概念には触れない。 (最後の関連記事参照)


LUT(ルックアップテーブル)

このLUT(ルックアップテーブル)がプログラマブル回路を実現している部分である。

まずA入力とB入力があり、出力結果はfとする。
これがANDとかORとかXORとか自由自在に変えられることを順々に見ていく。

まずAとBの論理積(AND)を考えてみる。

f:id:manaka1122:20201220175648j:plain
LUTの仕組み

真ん中の(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を書いてみると以下のような感じになる。

f:id:manaka1122:20201220175730j:plain
3入力-LUT

実際のFPGAでは4入力/6入力/8入力のLUTが使われている。


最後に...

とりあえずFPGAのプログラムできる仕組みはざっくりこんな感じである。

ASICではAND回路がトランジスタ6個で済むところ、FPGAではLUTの仕組みを消費することになる。(RAMとセレクタなどでも少なくとも50個以上?)
これがASICにスピードもトランジスタの個数も及ばない理由なのかなと思う。

但し、最新のプロセス技術(10nm前後)ではASICではマスク代などがとんでもない額になってしまうので、なかなか使えない。
しかしFPGAはたくさん作っていろいろな業界で使われているので、半導体プロセスの成長に伴いFPGAを採用する事例が増えているのかもしれない。


関連記事

参考資料

FPGAの原理と構成 天野英晴(編集)共著(14人)

・デジタル回路設計とコンピュータアーキテクチャ
 David Money Harris (著), Sarah L. Harris (著),  鈴木 貢 (翻訳), 天野 英晴 (翻訳), 中條 拓伯 (翻訳), 永松 礼夫 (翻訳)