ハードとソフトのトレードオフ
ハードとソフトのトレードオフについて、どう考えますか?
ここでいうハードとはASIC/FPGAのロジック部分、ソフトはARMやNIOSなど組み込みソフトのことをいいます。
私の切り分けは、以下の通りです。
【ソフトウェア】
・ユーザーと通信を行う箇所
例えば、
PC上のユーザインターフェイスで設定された値を解析したり、
不定期で通信を行う部分、通信仕様が今後変更になりそうな部分など。
・リアルタイムで処理が必要ない部分
【ハードウェア】
・外部デバイスと定期的に通信を行う部分
・リアルタイムで処理が必要な部分
上図より、
PC I/Fは、PCとの通信の為、リアルタイムに処理を行います。
PCから受信があれば、受信データをバッファにため、割り込みを発生します。
また、CPUからの送信データを送信します。
CPUは、PCからの受信データを解析し、各種処理のレジスタを設定します。
特にPCで設定した値をレジスタ用に変換したりします。
例えば、
変倍率から変倍カウンタの加算値を求め、固定小数に変換したりなど。。。
※上式は小数部が8bitの場合となり、演算結果の整数部をレジスタに
設定することで、固定小数部8bitを含めた値を設定します。
Camera I/F → 画像処理 → Monitor I/Fは、リアルタイムで処理します。
定期的にCameraに対し入力画像を取得し、各画素に対して処理を行い、
定期的にMonitorに出力します。