演算処理の方法には、プロセッサー(CPU)やマイコンなどを使った “ソフトウェアで処理する方法”と、専用 LSI や FPGA などを使った “ハードウェアで処理する方法” があります。
各々のメリットとデメリットは相反しますので、両者を組み合わせることで理想的な機器を安価に実現できます。
それぞれの処理方法の違いを解説します。
ソフトウェア処理

ソフトウェアを使った演算処理は、人が"普通電卓"と"メモ帳"を使って計算する方法に似ています。
ソフトウェア処理は、前の処理が終わってから次の処理をおこなう “逐次処理” なので、高速化は困難ですが、演算回路を使い回せるので必要な演算回路は小さくなります。
例えば、「"y = Ax2+Bx+C" の計算式で A=3, B=5, C=9, x=4 の時の y の値」の問題を"普通電卓"を1台使って解くと、
Step1 (乗算):x2 = 4 x 4 =16 なので "16"をメモ
Step2 (乗算):Ax2= 3x2 = 3 x 16 (Step1) = 48 なので "48" をメモ
Step3 (乗算):Bx = 5x = 5 x 4 = 20 なので "20" をメモ
Step4 (加算):Ax2+Bx = 48 (Step2) + 20 (Step3) = 68 なので "68" をメモ
Step5 (加算):Ax2+Bx+C = 68 (Step4) + 9 = 77 なので、y の値は "77"
プロセッサー も、普通電卓の様に算術演算(四則演算)をおこなう ALU(Arithmetic and Logic Unit)とメモのように"値"を一時的に保存する レジスタ を搭載しています。
y = Ax2 +Bx+C の演算を、ソフトウェア処理でおこなうと Step1 ~ 5のように計算式を分解して計算します。
1つの乗算器で Step1、 Step2、Step3、1つの加算器で Step4 と Step5 を計算できるので、少ないハードウェアのリソースを効率よく使えるメリットはありますが、並列に計算しないので全体の処理速度は遅くなります。
また、上記の計算では 乗算を3回、加算を2回おこなっていますが、ソフトウェアを改善して因数分解すると y = 3x2 +5x+9 = x(3x +5)+9 になり、乗算を2回、加算を2回に減らすことができます。
このように、同じプロセッサー を使っても、ソフトウェアの作り方次第で、演算速度や消費電力を改善することができます。
◆ メリット
・1つの ALU を使い回して、さまざまな計算式を扱える。(安価なハードウェア・コスト)
◆ デメリット
・ 処理速度が遅い
・ リアルタイム* 処理が苦手
・ 消費電力が高い
・ レジスタやメモリーが多く必要
*リアルタイム:同時に複数のタスクを処理しても、必ず決められた時間内に処理を完了させる
ハードウェア処理

ハードウェアを使った演算処理は、人が"プログラム関数電卓" を使って計算する方法に似ています。
同時に計算できるところは 同時に演算(並列処理)し、中間値を毎回レジスタに読み書きせずに、すぐに次の演算へ渡すので、高速&低消費電力が特徴です。
上と同じ計算式 "y = Ax2+Bx+C" の計算をハードウェアで処理すると、入力値を入れるだけで結果が出てきます。
Step1: y = Ax2+Bx+C の回路に A=3, B=5, C=9, x=4 を代入すると、
y の値は "77"
ハードウェア処理がソフトウェア処理よりも演算速度が早く、消費電力が低く、動作周波数が低くてもスループットが高い理由は下記です。
・ "x2" と"Bx" 、"Ax2" と"Bx+C" を同時に演算(並列処理)する
・ Step毎におこなうレジスタへのデータの入出力が不要
他のタスクを処理している最中でも、この演算は単独で動作するので リアルタイム に処理が可能です。
(ソフトウェアでは同じ演算回路を使い回すので、他の処理中は待っている必要がある)
ただし、ハードウェアで作ったタスク以外は処理できないので、タスク毎に回路を用意する必要があります。
◆ メリット:
・処理速度が速い(高スループット)
・他のタスク処理とは関係なく、このタスクを処理できる(リアルタイム 処理が得意)
・消費電力が低い(低消費電力)
◆ デメリット
・作った回路以外のタスクは処理できない
・タスクの種類が多いと、回路規模が大きくなる(コストUP)
ソフトウェア処理とハードウェア処理の共存

ソフトウェア処理 (逐次処理)とハードウェア処理 (並列処理) のメリット・デメリットは相反します。
そこで、両者を組み合わせて利用すると理想のシステムを安価に実現できます。
例えば、使用頻度が高くて重たい処理はハードウェア、使用頻度が低くて軽い処理はソフトウェアでおこなうと、"高速" で "低消費電力" なのに "多機能" なシステムを実現できます。
具体的には、安価な汎用マイコンの隣に小規模 FPGA を搭載したり、汎用マイコンの代わりにハードプロセッサー (ARM など) を内蔵する SoC FPGA を使用して1チップで小型化することもできます。
PC であれば、 PCI Express のスロットに右図などの FPGA アクセラレーターカードを 刺して使うこともできます。
◆ ソフトウェア処理に最適なタスク
・高速処理が必須ではないタスク
(一般的なアプリケーションやビジネス処理など)
・ 使用頻度が低いタスク
・ 改版が多いタスク
◆ ハードウェア処理に最適なタスク
・高速処理が必要なタスク
(高速な画像処理、信号処理、暗号化・復号化、デジタル信号処理など)
・リアルタイム処理が必要なタスク(プロセッサーの混雑度に影響を受けたくない場合)
・消費電力を下げたいタスク
・使用頻度が高いタスク