きしだのはてな このページをアンテナに追加 RSSフィード

2013-04-07(日) FPGAのおすすめ教材

[][]FPGAのおすすめ教材 05:00 FPGAのおすすめ教材 - きしだのはてな を含むブックマーク

ここ最近のエントリを見て、モテたくてFPGAを触りたくなったという人もいるだろうと思います。

ただ、FPGAを触るといっても、どこから始めればいいのか、何を買えばいいかわからない人も多いのではないでしょうか。

そこで、FPGAを触るために用意するもので、おすすめのものをまとめてみます。下書きでずっと放置していたのですが、ばたばたと公開しておきます。

前提としては、今までハードウェアを触ったことのないソフトウェア技術者が、今後FPGAでデータ処理をしてモテるための準備をするということを想定してます。


「まず3万円用意します」


最初に、FPGAの評価ボードが必要です。

いろいろ安い評価ボードもありますが、ある程度最初からデバイスがついていないと楽しくないし、勉強もやりにくいです。また、その評価ボードを使ったテキストも必要になります。

そういう点で考えると、いまはDE0一択になると思います。

DE0-nanoは値段も安いしA/Dコンバータもついているし、かわいくていいんですが、出力としてはLEDが8個あるだけで、7セグLEDがないので数字が表示できないし、学習にはつらいです。


ソリトンウェーブから入手できます。拡張キットも買ってください。

http://solitonwave.shop-pro.jp/?pid=15835753

2015/7/28 追記

後継でDE0-CVというのが出てます

http://solitonwave.shop-pro.jp/?pid=90445204


なぜ拡張キットも必要かというと、シリアルポートの部品とLCD、D/A A/Dコンバータ、ブレッドボードなどがついているからです。

ハードに慣れた人なら、ブレッドボードなどは持っているだろうし、シリアルポートも部品やさんで買えると思いますが、不慣れだと何を買っていいかもわからないし、バラで買うと結構高いです。


目的がデータ処理だとしても、やはり、デバイス、それもLEDなどの物理デバイスではなくICなどのデジタルデバイスの制御ができるようになっておく必要があります。

そういったデバイス操作として簡単な順にあげると

LED→シリアル通信→VGA→DAコンバータ→ADコンバータ→PS/2LCDSDRAMDDR SDRAM

のようになります。(※個人の感想です)

このうちSDRAMまでが、DE0+拡張キットで試すことができます。

DDR SDRAM以降は速くなるほど難しくなるようで、これはもう基本学習の域を超えそうです。


あとは入門書2冊


まずはこれ

この本は、ちょっと高いし、わかってしまうとたいしたことが書いてないので、評価は低いようなのだけど、やはり初めてハードウェアをさわるのには、このくらいのレベルのことが書いてあるとありがたい。

あと、上記の拡張キットのPDFとつながってるので、進めやすいです。


つぎにこれ

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

ハードにすでに慣れてる人にはこちらからで大丈夫だと思います。

NIOS CPUとの接続バスのことや、PS2SDRAM制御、そしてLinuxを動かすというところまで書いてあって、なかなか読み応えあります。

ただ、サンプルが基本的にNIOS CPUからの制御を前提としているので、ちょっと大掛かりになっていて、やはり上記DE0本から入ったほうがわかりやすかったです。


さいごにひとこと。

「モテなくても泣かない」

2013-03-01(金) FPGAチップが今後バカみたいに安くなるかもしれない話

[]FPGAチップが今後バカみたいに安くなるかもしれない話 10:16 FPGAチップが今後バカみたいに安くなるかもしれない話 - きしだのはてな を含むブックマーク

ふと、今後5年でFPGAはバカみたいに安くなってくるかもしれないと思ったので、まとめておきます。

ただし、材料はブログで見た話とか人に聞いた話とかで、しかもそれをいいように解釈しての話なので、妄想レベルであることを最初に断っておきます。

用語として、FPGAのようなプログラム可能なチップに対して、出荷段階で回路が決まっているようなチップをまとめてASICと呼びます。(ASICの正確な定義は知らない)


今のFPGAは「なんでもできるけど高くて遅い」

前に、「CPUはオワコン」というタイトルでFPGAが来るよという話を書いたときにあった意見として、「CPUは終わらないでしょう」という話よりも「FPGAだけじゃないでしょう」という話が多かったように思います。

その根底には、FPGAはチップとしては遅いということと、もっと大きい要因として高いということがあります。


FPGAは、同じ回路であればASICよりも遅くてかなり高いです。安い製品が出しにくい構造も(おそらく)あります。

価格ですが、だいたい1チップで3000円とかします。そういう話をしたときに「いやいや安いのは500円とかで」というのも出てきますが、おそらく他のチップより1桁高いです。

ARMプロセッサなんかは、32bitで100円〜200円、16bitなら数十円という価格の製品があるようです。

そうすると、DSPやCPU、GPUを使ったほうがいいよとなります。


遅いという話ですが、いまのASICでは2GHzや3GHzは当たり前の状況ですが、FPGAは500MHzがやっと、がんばって1GHzとかのようです。ただ、その速度差はソフトウェア処理を回路化することで挽回できるし、価格が安くなれば大きな問題ではないように思います。


微細プロセスがFPGA低価格化に有利

さて、数日前こんなニュースがありました。FPGA界隈の人には驚きだったようです。

ビジネスニュース 企業動向:Intel、Altera向けに14nmプロセスのFPGAを製造へ - EE Times Japan


いま、AlteraのFPGAがCycloneVで28nmプロセスなので、ASICで22nmプロセスだ20nmプロセスだと言っている世の中では半世代遅れています。

Cyclone FPGA シリーズについて

先日のFPGA会の飲み会でも「Alteraががんばっても、Intelがんばってるし中々製造プロセスでは追いつけないよね〜(だからまだCPU優勢)」みたいな話になったりしてたのですが、このAlteraとIntelの提携によって、Intelの製造プロセスがそのままAlteraに来ることになります。


14nmプロセスだと単純に言えば4倍の回路規模、もしくは同規模で1/4の価格になるということですね。

もちろんチップとはそう単純なものではないという話もあるし、FPGAの特性としてもそう単純はない事情があるようです。

また、14nmプロセスになったところでASICチップと肩を並べるだけで、相対的にFPGAが高い状況は変わらないのではないか、というツッコミもあると思います。


ところが、14nmプロセスというのは、FPGAの低価格化にASICよりも有利ではないかという材料があります。

今のプロセスでも、ひとつのウェハーを完全に欠陥なく製造することは不可能で、たとえば6コアのCPUを製造しておいて、1〜2コアのどこかに欠陥があるチップを4コア製品、3〜4コアのどこかに欠陥があるチップを2コア製品、1コアしかまともに動かないチップを1コア製品として売るということが行われています。

ASICチップでは、欠陥のあるチップを機能単位で殺して廉価版にすることになるので、殺された機能の欠陥のない部分がムダになります。そして、14nmプロセスでは欠陥率が高くなると考えられていて、そうするとムダが多くなっていくと思われます。

一方でFPGAでは、1万以上あるロジックセルごとに欠陥のある部分を殺すことが可能で、ムダを大きく減らすことができます。

このことから、14nmプロセスになって欠陥率があがることは、ASICに比べてFPGAに価格面で有利に働くと思われます。


用途特定されることで小規模チップも可能になる

先ほど、FPGAでは価格が安くならない事情があるということを書きました。

製造プロセスが微細化すると、ASICでは同程度の製品が安く提供され、どんどん昔のチップ相当のチップが安くなっていきますが、FPGAでは回路規模が大きくなるだけでなかなか安いチップが出ないという状況があるようです。


FPGAには外部接続用のピンがたくさんあるのですが、「FPGAの場合はI/Oピン数が多い方が喜ばれる」ことがあり、ピンを最大化する方向で設計が行われるようです。

ある寺の黒猫:FPGAの進化と値段:ALTERAでいこう!

そして、このことが、なかなか安い製品が出ないことにつながっているのではないでしょうか。


では、なぜ「I/Oピン数が多い方が喜ばれる」かというと、FPGAが現状ではASICのプロトタイプか少量生産品でつかわれていて「何でもできる」ことが求められているからではないかと思います。コストやスピードでデメリットがあるけど「何でもできる」から使っているのであって、そうすると何でもできる「I/Oピン数が多い」製品が求められるということになります。

これがもし、低レイテンシ計算用に用途を限られてくると、ピン数は不要になり回路規模も少なくてよくなるので、回路規模やピン数が少なくて安い製品が出てくるのではないかと思います。とはいえそのころには、いまの普及品と同程度の回路規模ということになっているんじゃないでしょうか。


ただ、もちろん、そのためには数が多く出る必要があります。

現状、FPGAチップは次のような記事からも1千万個出ればいいほうという状況ではないかということがうかがえます。

iCE FPGA、出荷数1,500万個を突破

主な用途がプロトタイプや少量生産といった、数が出ないものに使われているわけなので、あまり数が出ないわけです。高いし。


一方でCPUはARMコアの出荷が100億個を上回ったという話があります。

ビジネスニュース 企業動向:100億個規模のCPUコア市場、ARMが独占状態 - EE Times Japan

3桁違いますね。


そのため、「数が出るから安くなる」という状況になるにはまだまだ時間がかかると思います。でも、一度安くなり始めたら爆発的に安くなるということになるんじゃないかと思います。

やはり、ASICの代替ではなくFPGAFPGAとして使う計算用途での利用が増えないと、数が出ないでしょう。

14nmプロセス製品が2年くらいして出て価格競争力が出たきたあと、利用が進むようになって製品ラインナップが充実、量産効果でさらに安くなるという感じでしょうか。

そうなったとき、コンピューティングが面白い状況になっている気がします。

2013-02-21(木) CPU、GPU、DSP、そしてFPGA

[]CPU、GPUDSP、そしてFPGA 17:54 CPU、GPU、DSP、そしてFPGA - きしだのはてな を含むブックマーク

前のエントリでのコメントへの返信として書いたものを、エントリとしてもあげておきます。

それぞれのデバイスの使い分けのイメージです。


タイトルこそあおってますが、実際にCPUが完全に駆逐されるとは思っておらず、少なくともアプリケーションに関してはCPUを使った逐次処理で実行するのが向いていると思います。つまり、大部分のコードはCPUで動くことになると思います。


また、これは単にイメージなのですが、ストックデータに対する処理、たとえば画像処理は、セルごとにメモリの割り当てられたGPGPUが強いだろうなと推測してます。


FPGAが必要になるのは、レイテンシを最小化させたい処理で、ディスクやネットワークなどのI/O部分に、中継としてデータ処理をさせる用途ではないかと考えています。いま流れてるデータにだけ注目するのであれば、メモリは多く必要ありません。

多数のSSDにFPGAつないで、MapReduceをするときにMap処理をFPGAで行ったものがCPUに届くとか、ネットワークにFPGAをつないで、HTTPの「GET /index.html」というヘッダーが処理されたものがCPUに届くとか。つまり、データの整形処理ですね。


データに対する処理が単一であればDSPが向いているようです。データ処理を行ったあとで、さらに別の処理が必要になる場合に、DSPは弱いようです。JPEGや音声処理などでは、データに対して単一の処理を行えばいいので向いていますが、アプリケーションのデータ処理ではデータを加工したあとで集計したりと、少し向かない気がします。


Webアプリケーションや業務アプリケーションでのアプリケーション処理では、CPU速度がボトルネックになっておらず、GPGPUで処理できる単純多量処理も少なく、DSPで処理する単一処理でもなく、問題はI/O時点でのデータ処理となってきています。

そこで、FPGAが現状の問題点を解決する上での有効な手段となりうるのではないか、と、そういう感じです。

2013-02-19(火) CPUはオワコン

[]CPUはオワコン 20:10 CPUはオワコン - きしだのはてな を含むブックマーク

FPGAでCPUを組んでると、フェッチ部やデコーダ部で足し算や掛け算をしようとして、そんなことしたらCPUの意味ないなーと思ってしまうことがありました。

で、よく考えたら、FPGAでロジックを組むならCPUの意味はないんです。

だいたい、ひとつの処理実行するのに何クロックかかってんですか!と。


CPUでは、計算効率をよくするためにパイプラインという仕組みが使われています。

最近では、18段とかのパイプラインもあるようです。

ここで、18段のパイプラインのうち、実際に計算を行うのは2段か3段だったりします。残りの15段くらいは、命令や計算結果を読んだり書いたりしているだけです。

このパイプラインも、ほとんどはメモリの読み書き、それも命令の読み込みに多くが使われます。

であれば、CPUにしなければ、18段全部計算に使えるんじゃね?という話になりますね。


決まりきった計算を行うのに、いちいちメモリ、それもクソ遅いメモリから命令とってきて実行するのなら、最初からそういう回路にしておけばいいんです。

貴重なメモリバスはデータの読み書きに使いましょう。


HTTPリクエストを受け取り始めて150クロック後には、もう処理が始まっているとか、かっこいいじゃないですか。つまり「GET /index.html\n\n」というHTTPリクエスト17バイト×8=136ビットを受け取ったらすぐに処理を行い始める。

100MHzであれば1クロックは10nsなので、150クロックは0.15マイクロ秒です。

「リクエストを受け取ったと思ったときには、すでに処理がおこなわれているッ!」


メモリを一回読み込むのに70クロックかかったりするわけなので、64bitのバス幅で1回のアクセスで8バイト読めるとしても、これは17バイトをメモリから読み込むより速かったりします。

プログラム言語からすれば

「何を言ってるのかわからねーと思うが、おれも何をされたのかわからなかった」

という世界。

ハードウェアでは1クロックの間に数段の処理が行えるのですが、CPUにとっては、1クロックと1クロックの間は止まった世界なので、まさに「ザ・ワールド」です。

「催眠術とか超スピードとかチャチなもんじゃ断じてねえ」

のです。


もちろん、アプリケーションの手続き処理を行うのに、CPUは便利であり、適しています。

しかし2005年ごろから言われていることですが、Webアプリを作るのに、I/Oが一番足をひっぱっていて、CPUは遊んでいるということがあります。だから実行効率のそれほどよくないインタプリタでも問題ないんだと。

つまり、アプリケーションの手続き処理を行うだけなら、CPUなんか遅くていいんです。そのかわりI/OにはCPUを使わずクソ速くする。


このような世界を実現するのに、FPGAが有効なわけですが、実際に使われるようになるには、プログラム実行中に回路を切りかえれる動的FPGAが必要になります。

そして、この動的FPGAの回路切り替えが短時間で行われるのであれば、例えばリクエスト先ごとに回路を切り替えて処理を行うということも可能になります。

回路接続情報をDRAMに記録するDRAM-FPGAでは、全回路切り替えが70ナノ秒(100MHzで10クロック)というものも出来ているようなので、スレッドごとに回路を切り替えるということも可能になるでしょう。


このあたりは、次の書籍によくまとめられています。

リコンフィギャラブルシステム

リコンフィギャラブルシステム

2005年の本なので、いまではもっと進んでいると思います。


あと、前回のエントリで「FPGAはASICのプロトタイプや代替にすぎない」とか「組み込み技術者がモテる?」とかいうコメントがあったのですが、こういった背景があるので、FPGAはASICの単なる代替ではないし、ソフトウェアを知らない組み込み技術者もモテません。モテるのは、ソフトウェアがわかってFPGAがわかる技術者です。

GPUは、単一処理の並列には向いていますが、セル間のデータの結合などを行ったパイプライン処理には向いていません。また、スループットはあがりますが、レイテンシはコントロールできません。


スピードを求めたい、とくにレイテンシを最小化したいのであれば、CPUはもうすぐオワコンになると思われます。

CPU使って高速処理を書いていいのは、小学生まで。

はじめましてはじめまして 2013/02/21 03:36 はじめまして。

いくつか疑問に感じたことがあったのでコメントさせて頂きます。

まず、そもそも現状のFPGAはリコンフィギャラブルシステムに最適なものとは言えません。
FPGAをリコンフィギャラブルシステムに採用している理由は単にFPGAの方が生産数が多く、その結果リコンフィギャラブルシステム向けに最適化されたチップよりも安く、そして先端プロセスで製造されているからです。

また3段落目の「クソ遅いメモリから命令とってきて」についてですが、リコンフィギャラブルシステムの場合、回路の設定情報のメモリからの転送がマストです。
当然、この設定情報は命令やデータよりも大きなものとなり、またこの情報に基づいて回路を変更する時間は一般に多大なものとなります。
これらがリコンフィギャラブルシステムの技術的課題の一部であり、解決するために様々な研究が行われています。

#他にも複数の課題(しかも解決するのが難しい)が残されています。
#この点について詳しくお知りになられたい場合は、ちょっと古い本ですが「Reconfigurable Computing: The Theory and Practice of FPGA-Based Computation」辺りが参考になるでしょう。

上記のような事情により、リコンフィギャラブルプロセッサは以前から鳴かず飛ばずの状態が続いています。


現状、消費電力の問題を解決する為、CPUのマルチコア化が進んでいます。
また特定の処理を効率良く処理できる専用回路(古くからの例ですとDSP等がそれにあたりますね、もちろんDSP以外も存在します)をコアの一つとして組み込んだヘテロジニアスマルチコア化が進んでいます。

FPGAメーカーのザイリンクスやアルテラは既に自社製品にARMコアを組み込んだ製品を出荷しており、これもヘテロジニアスマルチコア化の流れに沿ったものです。
そして、これらのヘテロジニアスマルチコアを効率よく利用するための開発環境、OpenCLの開発が急ピッチで行われつつあるのが現状です。

今後、OpenCL(もしくはこれに類するもの)を中心としたヘテロジニアスマルチコアがコンピューティングの中心となり、リコンフィギャラブルコアもヘテロジニアスマルチコアを構成するコアの一つとなるのではないでしょうか?

リコンフィギャラブルシステムがCPUを駆逐するという未来は、現状から考えれば余り現実的ではないと思います。

少なくとも私は今の所、その様な感触を持っています。


以上、長々と失礼致しました。

nowokaynowokay 2013/02/21 17:46 コメントありがとうございます。
「Reconfigurable Computing: The Theory and Practice of FPGA-Based Computation」、折をみて読んでみます。

タイトルこそあおってますが、実際にCPUが完全に駆逐されるとは思っておらず、少なくともアプリケーションに関してはCPUを使った逐次処理で実行するのが向いていると思います。つまり、大部分のコードはCPUで動くことになると思います。
また、これは単にイメージなのですが、ストックデータに対する処理、たとえば画像処理は、GPGPUが強いだろうなと推測してます。
FPGAが必要になるのは、レイテンシを最小化させたい処理で、ディスクやネットワークなどのI/O部分に、中継としてデータ処理をさせる用途ではないかと考えています。
多数のSSDにFPGAつないで、MapReduceをするときにMap処理をFPGAで行ったものがCPUに届くとか、ネットワークにFPGAをつないで、HTTPの「GET /index.html」というヘッダーが処理されたものがCPUに届くとか。つまり、データの整形処理ですね。
また、そういう用途を考える場合、「GET /index.html」部分はアプリケーションによって、また頻繁にも変わるので、焼き付けられたDSPでは難しいと思います。

JPEGのように規格が決まっていて、変更がなく多くのアプリケーションで共通して使われるような処理に関しては、DSPのほうがいいかと思います。

この中で、Webアプリケーションや業務アプリケーションでのアプリケーション処理は、CPU速度がボトルネックになっておらず、GPGPUで処理できる単純多量処理も少なく、DSPで処理する固定汎用処理もなく、問題はI/Oとなってきています。
そこで、FPGAが現状の問題点を解決する上での有効な手段となりうるのではないか、と、そういう感じです。

nowokaynowokay 2013/02/21 18:46 DSPに関して誤解していたので、記述を修正しました。
http://d.hatena.ne.jp/nowokay/20130221#1361436841

2013-02-18(月) FPGAとArduinoとRasberryPIの違いと、FPGAを勉強する理由

[]FPGAとArduinoとRasberryPIの違いと、FPGAを勉強する理由 15:57 FPGAとArduinoとRasberryPIの違いと、FPGAを勉強する理由 - きしだのはてな を含むブックマーク

はたから見てると、FPGAとArduinoとRasberry PIって、なんか小さくてデバイス挿して使ってて似たもののように見えるかもしれません。

そんな中、どこが違うの?って思ってる人もいるかと思ったので、それぞれの違いと、そしてそこから得られる技術者としての知識をまとめてみます。

まあ、得られる知識として「それぞれのデバイスの使い方と周辺環境」ってのはありますが、それは当然として。「それぞれのデバイスの使い方と周辺環境」を得るメリットがわかる比較としてまとめたいと思います。

根底は「なんで最近FPGAをやってるか」っていうことの説明なので、そういうバイアスがあると思ってください。


FPGAというのはチップの種類なので、実際にはDE0などのFPGA評価ボードとの比較ですが。中でもDE0-nanoは大きさや価格を考えると、豪華なArduinoくらいの位置づけとして出してきたようにも見えます。ということで、ここでは主にDE0-nanoとの比較にしたいと思います。


Arduino

これは、デバイス操作に特化したコンピュータですね。マイコンという説明がされてることも多いです。

アナログ入力がついているので、温度センサなどもつなぐだけで制御することができます。

OSは載らないので、タスク管理が必要な用途には向きません。

LAN通信もそのままではできません。もちろんArduino用のLANカードというのも売っているわけですが、これは部品を見る限りLANカード上でかなりArduino用の制御が行われているようで、「ArduinoでLAN接続ができる」というよりは「Arduino用のLAN接続デバイスが売っている」という感じですね。*1


Arduino関連としてデバイス操作の情報が充実しているので、デバイスをつないで動かす勉強になると思います。

また、上記LANカードのように、Arduino用のデバイスも結構揃っているようなので、デバイスを使ってなにかするという場合にはよい選択です。


Raspberry Pi

これは、小さいパソコンです。普通にLinuxが動くしLANで通信もできます。

また、SPIやI2Cといった方式でICを制御することができるので、対応したデバイスを操作することができます。アナログ入力はないようなので、温度センサなどを接続する場合はA/Dコンバータを使って制御する必要があります。

ただ、デバイス操作が主なのであれば、Arduinoのほうがいいんじゃないでしょうか。


恐らく、いままでLinuxを使ったことがある人であれば、そのままRaspberry Piでプログラムを動かすことができるんじゃないでしょうか。

このことはメリットではありますが、そのまま今までの知識が使えるということは逆に言えば得られる特別な技術的知識はない、ということになります。

身につくのは「小さいパソコンがあったら何ができるか」のようなソリューションとしての知識になると思います。

勉強素材ではなくて、道具ですね。


FPGA(DE0-nano)

Arduinoはマイコンだし、Raspberry Piはパソコンだったのですけど、DE0-nanoはコンピュータじゃありません。

「コンピュータはソフトがなければただの箱」というけど、DE0-nanoは何もしなければただの箱ですらないわけです。実際には出荷時にサンプルが埋め込まれてるので、チカチカ動く何かではあるのですが。

(ここではコンピュータというのは、ソフトウェアで計算手順を与えて動く電子回路ってことにします)


FPGAは回路をプログラムできるチップです。なので例えば

led = button;

のような記述で回路を組めば、LEDとボタンを配線しただけの単なる高価配線チップになります。

もちろん、ここでCPUの回路を組めば、コンピュータになります。公開されてるARM互換回路やx86互換回路を使えば、ARMやx86のコードが動くコンピュータになります。

そういったCPUを使ってLinuxを動かすこともできます。

Arduinoのような働きをする回路を組めば、Arduino互換機のようなものは比較的簡単にできそうな気もします。

LANコネクタはついてないのですが、LAN信号をICで操作できる電気信号に変換するEthernet PHYさえあれば、あとはMACやIPを処理する回路をHDLで組み込むことでLAN接続もできるようになります。上ででてきたArduino用LANカードではW5100というチップが乗っていて、これはEthernet PHYと、MACやIPを処理する回路をSPI方式で制御できるようにしたもののようです。この処理部分をFPGAで実装することも可能です。


ようするにFPGAでは、チップの中身を書くことができるわけです。そういう意味では、FPGAボードというのは「フィジカルコンピューティング」のためのものとは考えないほうがいいと思います。やってることは普通にエレクトリカルです。

いまぼくは、制御回路を書く練習として手軽なのでLED点灯や温度センサの制御を行っているだけで、もし主目的がLED点灯や温度センサ制御などの「フィジカルコンピューティング」なのであれば、上記のArduinoやRaspberry Piのほうをおすすめします。

FPGAで勉強できること

まずは、ソフトウェア技術者の一般常識としての電子回路、電子デバイスの動きを把握することができます。FPGAをやる前とあとで、ハードウェアの説明の見え方が変わりました。たとえば、プロセッサを支える技術を読んで、FPGAを勉強する前は「細かいことまでよく書いてあるなーフムフム」と思ってたのですが、FPGAを勉強したら「ざっくりした説明だなー」という感想になりました。「プロセッサを支える技術」の説明をみて、どのあたりのHDLコードを書けばいいか想像できるようになります。


CPUのないところで、ソフトウェアではなく処理を書くことで、CPUのありがたさ、ソフトウェアのありがたさを実感することができます。いままで当たり前のように使っていたCPUやソフトウェアが、非常にありがたいものに見えてきます。そうやって対比することで、CPUとはなにか、ソフトウェアとはなにかということがわかってきます。


逆に、CPUやソフトウェアがまだるっこしくてあいまいということも感じるようになります。たとえば、200μ秒(0.2ミリ秒)ごとにデータ処理をするというコードをソフトウェアで書くのは、非常に気を使います。でも、ハードウェアなら、たとえば50MHzのクロックで動いていても1万クロックあるのでかなりの処理ができます。200μ秒で動かすこと自体は、1万クロック数えればいいだけなのでまったく難しくありません。処理を書くのがソフトウェアより難しいですが。


つまり、CPUにできることとCPUでやらないほうがいいことがあることがわかってきます。CPU上のソフトウェアだけやっていると、そもそも「CPUでやらない」という選択肢の存在も、それが何をあらわすのかもわかりません。でも、上に書いたように、時間制約を満たすというのが難しいということがわかります。また、処理をするにはCPU自体がオーバーヘッドであるということも感じることができます。


モテ期を逃さないためのFPGA

ここからが大事です。

いま、CPUを使った処理に限界が見えるようになってきました。そこでCPUを使わずに処理を書く必要性が出てきています。いまは金融系など限られた範囲ですが、需要が増すこととハードが使いやすくなって実現性が増すこととで、多くの分野で使われていくと思います。

FPGAは、たとえばCからJavaに、JavaからRuby/Scalaにといった転換とはまったく違う、ソフトウェアからハードへという転換が必要になります。ソフトウェア技術間の感覚で必要にせまられたらやればいいという風にはなりません。

一度FPGAを触らないと、どのようなことができるか、できないかがまずつかめません。どのようにやるかという話はまったくできません。


もちろん、実際に使われるころにはそういったことがわからなくても使える製品が広まっていると思いますが、技術者としてのモテ期は実際に使われるようになるまでにあるので、モテ期をのがしてしまいます。

エンジニア人生で3度来るというモテ期、ひとつ前はクラウドでした。その前はWebでした。Webから始めた人の3度目のモテ期、FPGAを逃さないようにするためには、今からやっておくと有利だと思います。

*1:と思ったら、これを組み込んだArduino端末があるのか。品切れ中だけど