名前はまだない

とりあえずの思考や学習のアウトプットの場

FPGAとは何か〜学習の始め方までを調べたのでまとめた

0. はじめに

FPGAとは何か〜学習の始め方までを調べたのでまとめた。  

調べるに至った背景は以下の通り。

機械学習の勉強をしていたがなんかしっくり来なかった
→とりあえずプログラム自体に疎すぎたのでC言語の勉強を始めた
アーキテクチャの理解が必要だと思い機械語やCPUなどハード寄りの勉強を始めた
→自作CPUについて調べていると回路の書き換え可能なFPGAなるものの存在を知る
FPGAに手を出すか悩んでいる(今ココ)

到達目標

  • FPGAとは何か、その仕組みとメリットを簡単に話せる程度に理解する
  • FPGAを自分が勉強したいかどうか判断できるようにする
  • FPGAを勉強する場合どの教材と開発キットを採用するか決める

1. FPGAについて

FPGAってそもそも何?

こちらの記事と記事中で紹介されている記事が分かりやすかった。

新人エンジニアの赤面ブログ 『FPGAとは?超初級編』

一言で言うと、「書き換え可能な論理回路の多数配列」で、めちゃくちゃわかりやすく言うと自前で設計して何度も書き換え可能なCPUということらしい。

FPGAを利用すると、扱う情報や処理内容に最適な論理回路をプログラムすることが可能で、処理速度の向上が期待できる。

FPGAってどうやって手を出すの?

おそらく今の自分と似たような状況だったであろう人物の記事を見つけた。

FPGA に手を出してみた (1)

その中で紹介されているスライドが面白く、分かりやすかった。

ソフトウェア技術者から見たFPGAの魅力と可能性

読んだ感想とまとめ

  • FPGAを取り巻く環境が、機械学習に興味を持ち始めたけどダラダラして乗り遅れてしまった2016年くらいの状況に似ている
  • ソフトウェア開発者がFPGAを思い通りに動かすのは難しい
  • 設計に使われる言語(VerilogVHDLなど)自体はそんなに難しくなさそう
  • それより現在使用されている基本的なアーキテクチャの知識(CPUの仕組みなど)に加え、FPGAに関する技術や動作の特性、非ノイマン型のアーキテクチャの理解が重要らしい
  • あとは実際に手を動かしてハードを設計してみることが重要とのこと

ノイマン型、非ノイマン型ってなんやねんと思い調べました。

ノイマン型コンピュータと非ノイマン型コンピュータ

ノイマン型コンピュータは、演算装置、制御装置、メモリ、入力装置、出力装置とこれらの間を接続するデータ伝送機構から構成されている。そして、(1)命令カウンタの指すメモリアドレスから命令を読み、(2)命令カウンタを命令の長さ分進めて、次の命令を指すように変更する。(3)そして、読まれた命令を解釈して指定された動作を行うというステップを繰り返し実行する。

要するに予め基本的な演算機能が設定されたCPUとメモリを使ってプログラムを作動させる、今のパソコンってことみたい。

ノイマン型のコンピュータは、上記のように問題を解く手順をプログラムとして記述し、そのプログラムを逐次実行するアーキテクチャであるが、それ以外のやり方もあり得る。これらを一纏めにして非ノイマン型のコンピュータと総称する。

それ以外がノイマン型らしいです。ざっくりし過ぎやろ。

ディープラーニングの構造も、量子コンピュータの構造も非ノイマン型らしく、今回調べてるFPGAもそれに当たるとのこと。

Qiitaに良さそうな記事があったので、そちらも見てみた。

そろそろプログラマーもFPGAを触ってみよう!

FPGAの得意なこと

特定用途向けの並列計算機をお手軽に作れる

FPGAが向かない用途

  • 大きなデータにランダムアクセスするもの
  • 内部のSRAMに収まる演算なら激速
  • 収まらないとDRAMアクセス発生して遅い
  • そもそも並列化の難しい処理
  • クロック遅いので逐次処理はCPUにかなわない
  • ソフトやGPUでさっさと用が済む用途
  • FPGA開発のコストと天秤
  • いずれASICに乗っ取られる用途
  • 大量の需要が見込め、ASIC開発がペイするもの
  • 仕様が年単位で固定(決まった積和演算とか)

不得意な用途を見たけど、なんとなくわかったようなわからないようなぼんやりとした理解しかできなかった。

ASICについて調べてみたらビットコインのマイニングの話しか出てこなかった。

触ってみないとわからないこともあるし、これを触るとアーキテクチャに対する理解が深まりそうなので、組み込み型のマイコンとかRaspberry Piとか何でもできるマッチョになれる気がしたのでやってみようかなと思った。

2. FPGAの学習について

次に教材として利用する書籍とボードを決める。

書籍

どこを調べても名前が出てくるのが以下の3冊。

そもそもXilinxを使うかどうかわからないし対象ボードが古いらしいので、2冊目だけ他の本にしようかと思った。

すると、良さげな本を見つけた。

上がARM版で下がMIPS版らしい。作者がインテルで実際にPentium II等の設計に携わっていたアメリカの大学教授らしく、大学の教科書として執筆されたので、デジタル回路の基礎の基礎からコンピュータの設計方法、FPGAのプログラミングまできちんと学べる良書らしい。しかもARM版は原書が1万円を超えるのに訳本が5千円代という意味がわからない状況なので、これで良いのではと思った。

ARMとMIPSについて知らないので念の為調べてみる。

ARM vs MIPS

まずはARMについて調べてみる。

ARMアーキテクチャとは|3つの特徴とARM以外のアーキテクチャ4種

  • 小型、低消費電力など小型の端末に有利っぽい
  • 主にスマホルーター、携帯型センサー、IoT技術に応用されている

とのこと。これからのIoTの波に乗れそうなアーキテクチャで期待大。

ARM×Raspberry Pi×IoTとかすごくアツそう。

一応MIPSも軽く紹介されていた。

低消費電力と低発熱を特徴とするMIPSは、ARMのライバルとして長らく競合していましたが、少しずつARMの下位互換として遅れをとっていった結果、経営の危機に陥ったこともありました。

(中略)

衰退の一途を辿ったように見えるMIPSですが、「龍芯」という中国製CPUの、“MIPSアーキテクチャのCPUなのに、x86とARMで書かれたアプリをバイナリ変換して実行することが出来る”という仕組みで注目を集めています。

このMIPSだけどx86とARMで書かれたアプリも実行できるよっていうのを本気で活用しようと思ったら、ARMの知識もある程度求められるのでは。

ということでとりあえずARM版の本を買うことに。

開発キット

次に学習時に使用する開発キットを決める。

先程のARM版の書籍のレビューにおすすめが書かれていた。

お手頃なボードとしてはAltera社のCyclone Vを搭載したDE0-CVがお勧めです。Amazonでもマルツオンラインの出展品が買えますが、マルツオンラインから直接買った方が安いです。

こちらがそのキット。

Cyclone Vを搭載したFPGA開発キットDE0-CV【P0192】

Cyclone VというのはIntelが開発しているFPGAらしい。(AlteraはIntelに買収されたっぽい)

初心者のための FPGA/CPLD 入門というサイトを見てみるとたしかにCycloneあたりがお手頃で良さげ。現行の最新モデルが2017年に出たCyclone 10で、Cyclone Vは2011年に出たモデルらしい。先のレビューは2016年のものなので、当時はCyclone Vが最新だったらしい。

最新のほうがええやろ!ということで、Cyclone 10の開発キットを探してみて、あまりに高かったらCyclone Vの開発キットを買うことに。とりあえず色々と調べてみた。

Cyclone 10の開発キットは何個か見つかったが、開発キットはメモリ等が載っておらず、自分で積まないといけないみたいだった。やっぱりFPGAに手を出すような人は知識があるので自分で基盤をだけ買ってメモリとかを好きな具合にカスタマイズするんですかね。自分にはそこまでの知識がないのと、お手軽にFPGAを触って学習を進めたかったので、レビューで紹介されている入門用キットを買うことにした。 多く使われている入門キットなのでネットに情報が落ちていて学習しやすいだろうと言う点と、レビューの人が既に同じ本と同じキットを使って学習を進めたという前例があるので点で安心できますし。

ちなみにこちらのサイトでも同じ型番のものが買えるらしいし。 Terasic Inc. P0192 - DigiKey Electronics というかココからさっきのサイト(マルツ)に入荷してるっぽいのでこちらから買ったほうがマージンが少なくて安いと思う。

おわりに

ということで、「FPGAとは何か」という基本的な部分から学習を始めるに至るまで、調べたことをまとめた。

こういう新しく何かを始めるときにその分野に関連する知識が無いと、どうしてもわかりにくいなぁと改めて痛感した。無知なのを解消するために無知がネックになるのは悲しい。