SANMAN

思いつきの考えを垂れ流すブログ

FPGAの話

なんか最近MicrosoftがデータセンターのハードウェアアクセラレーションにFPGAを採用したりと、ソフトウェア界隈でアツい存在みたいなので。

FPGAってなんじゃろなって、雑に説明。

 

FPGAとはどんなものか

プログラマブル論理回路を組めるチップ。

論理回路はANDとかNORとかEX-ORとかFFとかで組む回路。

半加算回路とかクソめんどくさいの。

なんかの授業でやったんじゃないだろうか。

真理値表とか。

コレです。

 

f:id:tkysktmt:20140729222111p:plain

所望のLSIエミュレーターとなる素子、というのが実際の用途のイメージにマッチしていると個人的に思う。

実際、市販のLSI向けエミュレータの一種では、FPGAが重要な構成要素にもなっている。
 
FPGA本体起因の制約があるとはいえ、入出力ピンがある程度自由に利用できるので、DDR3-SDRAMやPCIe、LVDSやMIPIなど好きなインターフェースを利用できる。
市販のプロセッサではなかなかこうはできない。
 
内部に組み込むロジックは、ノイマン型・非ノイマン型どちらも可能。
好きにして。
LSIを1から設計するのに近いので、なんでも好きな様にできる包容力のあるやつだ。
 
通常LSIに比べて汎用性が高い分、動作速度や回路リソースを食うので、市販のLSIではできないことを実装するのが普通の使い方。

FPGAの設計言語

基本的に通常のLSI設計と同じ。
現状はRTL(Register Transfer Level)と呼ばれるレベルのHDL(Hardware Description Language)を用いる。
HDLの代表としてVerilogVHDLなどがある。
論理回路設計なので、根性出せばCADでもできる。
 
RTLというのはレジスタ転送レベル。FlipFlop=Registerと、Register間に挟まれる論理回路(ANDやORなどの組み合わせ回路)について記述するもので、あまり高度な抽象化はされていない。
実際の回路構造にかなり近い記述。
RTLがいわゆるコンパイル的なことをされると、ネットリストと呼ばれる論理回路の結線情報ファイルに置き換わる。
 
CADで線引くより楽だが、Cなどのプログラミング言語に比べて、欲しい機能を実装するのが面倒な言語だ。
最近はCのコード等からRTLやその先に落とす高位合成が注目されているが、イマイチ。
でも以前より良い線いってるので今後に期待。

FPGAの性能・コスト

汎用性のため、LSIより低性能。1GHz以下で動作。
設計難易度から200MHz〜400MHzくらいが実用的速度。
テキトーに組むなら100MHzくらい。
ノイマン型なデータフロープロセッサとしての使い方が普通なので、ノイマン型なプロセッサでは時間がかかるような処理を受け持つ事が多い。
高精度なディジタル信号制御や画像処理など。
許す限り好きなだけ演算を並列化可能。
 
超高性能なハイエンドFPGAは1個300万を超す値段で、入手も難しい。
新車買える...。
一般的な高性能品で1個100万〜数十万くらい。
一番安いので1個1000〜500円周辺。
DE0に搭載されているCycloneIIIとかは3000円周辺。
 
市販のプロセッサは高価なもので10万そこら。
それこそ3GHz超え6コアのCore i7とかそんなもん。

 おわり

FPGAについて雑に説明。
CLBがうんぬん...とか語り始めてもFPGAベンダー本家サイト見たほうが早いし正確なので。(無料オンライントレーニングとかある)
どこまで詳しくしていいのかわからんのもある。
 
こんなレベルでも飲み屋でなら知ったかできるんじゃないだろうか。
とりあえず非ノイマン型とか言っておけばいい。
 
こんなクソ高い部品がもてはやされる理由などについては、次回があれば説明。