レファレンスモデルで機能仕様が決まったら、具体的な実現方法を考えます。どの機能をプロセッサとFPGAにそれぞれ実装するか機能配分を行います。アルゴリズムによっては、ある程度経験的に機能配分は決まります。経験的に決められない場合は求められる処理速度やアルゴリズムの実現しやすさなどから決めます。一般的に、プロセッサよりもFPGAの方がはるかに高速に動作しますが、実装するのはFPGAの方がはるかに複雑で工数がかかります。
今回、実装例として挙げているオブジェクトトラッキングアルゴリズムでは、画像処理によるオブジェクト検出と、その軌道を補正するためのカルマンフィルターの処理に分けられます。オブジェクト検出は、フルHDで入力される映像データの各ピクセル値から検出を行うため、約150MHzで処理を行う必要があり、高速処理となるため、FPGAに実装します。また、軌道補正は、1フレーム=1/60秒ごとに計算を行えばよく、プロセッサでも十分にカバーできる速度であることから、プロセッサに実装することにします。機能配分が決まったら、それぞれをサブシステム化してモデル構造上で分割します。
機能配分に応じて、プロセッサ用サブシステムとFPGA用サブシステムを1つのモデル上で別のサブシステムに階層を分けて作成していきます。これは後に行うコード生成のためです。
プロセッサで処理を行うカルマンフィルターは信号処理用のオプション製品DSP System Toolboxのブロックを使用しています。このブロックは、Cコード生成に対応しているため、特に修正の必要はありません。使用しているブロックがCコード生成に対応していない場合や、専用ブロックを使用してコードの最適化を行いたい場合には、必要に応じてブロックを置き換えます。なお、特定のブロックおよびSystem Objectからは、ARM Cortex-AのNEON SIMDエンジン向けに最適化されたNe10ライブラリコードを生成できます。
Copyright © ITmedia, Inc. All Rights Reserved.