lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

魔法のようなSoCはない

次世代ry

30代半ば〜40代後半のソフトウェアをメインとする技術畑にいる人々の中には、未だにFPGA=魔法のSoCという刷り込みがある模様。汎用と専用の違いをどこかで見失ったのかもしれない。
2000年はじめ頃、FPGAについて


\魔法のデバイス!何でも出来る!/\あのディスコンCPUもこの手に!/

(…数ヶ月後)

「…パフォーマンスでないんだけど、消費電力やばいんだけど (ゲッソリ」



って、一連の顛末を冷ややかに見てたのは、その当時の20代と、50代以降の人々のように思えます。
FIFO、メモリ、プロセッサなどを汎用論理回路で作って、専用に作られたチップを消費電力、処理性能で上回れるのは「レトロCPU」くらいではないでしょうか。

反論:「いま、安価なSpartan-6 LX9やMachXO2*1のようなレベルでもインプリ可能なソフトCPUが用意されてる、それはニーズが高まっているからだ!」

なるほど。ここで言うソフトCPUとは、論理合成によりFPGA内部の汎用ロジックに実装できる再構成可能なCPUのことですが、内部バスの調停としてCPUをいれるのならいざ知らず、Cで開発したい=ニーズ、というのがその主張の中に隠されている本音のようです。

それならフツーに売ってるマイコン使えば…
第一、フォン・ノイマン・ボトルネックのタガをFPGAにかけて苦しむ必要がわからない
もしCPUが必要なシーケンシャルかつ複雑な処理をする場合、別にハードCPUを用意するべきです。


例えば、カーナビ。
CPUの内部設計ソフトウェア開発者と、FPGA内部の論理設計、および制御工学・ニューラルネットワークに通じたハード開発者が必要です。
ここで分担を誤るとトンデモマシンの完成です。完成すらしないかも。

CPUはおもにGPSのデータログや車両の走行状況を監視したり、画面の更新、タッチパネルの制御、走行中の運転者による操作の抑制、音声ガイダンスの発信、(カメラ付き車両の場合)バックギヤ時のリアカメラの鏡像表示、警告発信を行います。またネットワークと連動する場合は地図のネットワーク経由での更新も行います。

FPGAはおもに経路の算出を行います。経路データと制約(一方通行、混雑状況など)はCPUから渡され
るパラメータです。

この場合のニューラルネットワークFPGA担当です。具体的には目的地に到達するための通路を計算します。
多変数関数近似を行い、各経路の重み付き形成、およびカーナビシステムが学習するのに使用します。無くても構いませんが、どちらにせよ、膨大な道路情報を超並列計算をもちいて非線形にネットワークを接続する機構が必要となります。


最近、FPGA複数を並列演算に使ったパスワード計算機の話題を良く耳にしますが、これについてはどうでしょうか。この計算アルゴリズムにどんな手法が用いられているか、分かりかねますが、少なくとも使うであろうロジックは分かります。

モンテカルロ法(ただしPRNG(疑似乱数))
メルセンヌツイスタ
線形合同法
・単純XORShift

これらのいずれか、または複数を組み合わせ、この命題を解いているはずです。
これには

・線形積和演算
・任意のビット幅でシフトできる動的シフトレジスタ

を使います。マイコンでも作れますが、32bit/16bit/8bitが演算の基準となっているマイコンですと、途中にシーケンシャルコードを挟まなくてなならず、処理が遅くなります。ですのでFPGAを用いた方が良い事になります。(非同期回路が多くなければ)

*1:名目上CPLDらしいけど,LUT+キャリチェーン構造のFPGA