Main Content

生成コードをより効率的にするためのヒント

効率的なコードの fimath 設定

fimath オブジェクトの既定の設定は、丸め誤差を最小にし、オーバーフローを防ぎます。ただし、生成されたコード内で余分なロジックが発生する場合があります。既定の設定は次のとおりです。

  • RoundingMethod: Nearest

  • OverflowAction: Saturate

  • ProductMode: FullPrecision

  • SumMode: FullPrecision

効率的なコードでは、fimath の設定と使用するプロセッサの設定を一致させることをお勧めします。

  • ProductMode および SumModeKeepLSB 設定は C 言語の整数演算の動作をモデル化します。ProductModeKeepMSB は多数の DSP デバイスの動作をモデル化します。

  • 丸め手法の種類によって、必要なオーバーヘッド コードの量が異なります。RoundingMethod プロパティを Floor に設定 (2 の補数切り捨てと同等の設定) すると、多くの演算での丸めの実装が最も効率的になります。除算関数については、最も効率的な RoundingMethodZero です。

  • オーバーフローを処理する標準的な方法として、モジュロ演算を使用してラップします。他のオーバーフローの処理方法は過剰なロジックを作成します。可能な場合は、OverflowAction プロパティを Wrap に設定することをお勧めします。

関数のより効率的な固定小数点の実装への置換

CORDIC

CORDIC ベースのアルゴリズムは反復的なシフト加算演算のみを必要とするので、ハードウェアとの親和性が最も高いアルゴリズムの 1 つです。関数を CORDIC 実装のいずれかと置き換えると、生成されたコードをより効率的にすることができます。CORDIC 関数の一覧およびそれらの実装の例は、CORDIC アルゴリズムを参照してください。

ルックアップ テーブル

ルックアップ テーブルによるアプローチを使用することで、一部の関数をより効率的に実装できます。例については、ルックアップ テーブルを使用した固定小数点 Log2 の実装を参照してください。

除算

除算はハードウェアでサポートされていない場合もあります。可能な場合は、除算演算の使用を避けることをお勧めします。

分母が 2 のべき数である場合、除算をビット シフト演算に書き換えることができます。

x/8

この除算は以下のように書き換えができます。

bitsra(x,3)

場合によっては、除算を逆数の乗算として実装するとより効率的になります。

x/5

この除算は以下のように書き換えができます。

x*0.2