はじめに
一言で「ソフトウェア開発」と言っても非常に手広いと思います。 特に、当サイトでは常々「FPGA はソフトウェアだ」と言っておりますとおり、ソフトウェアの範疇は非常に広いです。
一方で、「ソフトウェア開発」といったときに、やはりパソコンやサーバーやスマホで動くアプロケーションのプログラミングが真っ先に頭に浮かぶ人が大半なのもまた事実かと思います。
ここで少し、パソコンで出来る部分と、パソコンで出来ない部分を考えながら、IoT を考えてみたいと思います。
パソコンのアーキテクチャ
一般的な今時のパソコンのブロック図として、たとえばここから図を引用させてもらいます。
いわゆる CPU には、DDR5-SDRAM や PCIe のインターフェースが出ており、チップセットLSI を通じて、USB であったり、Ether であったり、パソコン に一般的に装備される各種インターフェースを備えています。
逆に言うと、パソコンではこれらのインターフェースでしかパソコン外のものとのやり取りが出来ません。
PC に繋がる周辺機器
例えば Web カメラ
今、私のパソコンに繋がっていた Web カメラを、多分中身はこんな感じじゃないかなと適当に想像しながらお絵描きしたのが下記です。
この中では様々なデバイスとのインターフェースや、画像処理アルゴリズムや、USBのプロトコルスタックが入っていることが想像されます。 これは、パソコンにUSB しかついていないので、なんとかして イメージセンサを USB に接続できるところまでカメラ側で処理しないといけないのでこうなってるわけです。 中には十分ソフト屋がいろんなアルゴリズム改善の範疇にできるものが含まれていますが、パソコンとUSBを介して切り離されていますので、一般的なパソコン用のプログラマには弄れない領域になってしまっています。
例えばロボット
例えばLANケーブルを介して、制御できるロボットがあったとしましょう。
私は制御は詳しくないので、かなりテキトーですが、例えば下記みたいなものがあると想像されます。
制御はPIDに限らず様々なアルゴリズムがあるかと思いますし、ソフトウェアプログラマが腕を発揮できる領域だとは思いますが、残念ながら、パソコンにはサーボに直接つながるようなインターフェースはないので、例えば Ether 経由でさまざまなプロトコルで制御するような場合、こういった構成になってしまい。やはりパソコンの外のプログラムになってしまいます。
パソコンの外のアルゴリズムはハードウェアになりがち
そして、しばし、これらのパソコンに接続されるデバイスはハードウェアになりがちです。
アルゴリズムが専用ASIC化されて固定される場合もしばしばですし、中に入っているマイコンで実行されるコードですら、結局、「一度リリースしたら容易に変更できない」というハードウェアになりがちです。
また、パソコンにプログラミングしているソフトウェアプログラマの多くの方々も、自分の手が出せない部分は「ハードウェア」として取り扱ってしまいがちです。
このような個別の機器をパソコンにつなげば済むものもありますが、パソコンをハブにしてしまうとデバイス同士の連携や同期は困難ですので、やれることに限界が出てくると考えています。
「ソフトウェア」の範疇を広げたい
筆者は「ソフトウェア」の範疇を可能な限り広げて考える事で、プログラムで支配できる領域を拡張したいと常々思っています。
そういった考え方に置いて多くの IoT デバイスは、このパソコンの制約を取り払ってくれます。
その中でも特に FPGA は群を抜いて何でもできるデバイスだと思っています。 なぜなら、あらゆる制約を生み出している、インターフェースI/O そのものをソフトウェアプログラミングできてしまうデバイスだからです。
例えば、イメージセンサのシャッタータイミングと、ストロボ照明と、サーボモーターを一括して動かして、特殊なセンシングを行うようなアルゴリズムを研究したいと言ったとき、そのようなインターフェースがFPGAならプログラムできてしまうわけです。 パソコンで出来ないことを加えるだけで、そうでない人に一歩差をつけた研究開発が可能になります。
パソコンで出来る事とできないことを整理してみる事で、新しい世界も見えてくるのでは無いでしょうか? FPGAユーザーが増えてくれると嬉しいなと思う、今日この頃です。