Main Content

Multiply-Add

乗算と加算の組み合わせ演算

  • Multiply-Add block

ライブラリ:
HDL Coder / HDL Operations

説明

Multiply-Add ブロックは、最初の 2 つの入力 a と b の積を計算し、その結果を 3 番目の入力 c に加算します。入力はベクトルまたはスカラーにできます。

乗算演算は、出力の型に関係なく完全精度です。[整数丸めモード][出力データ型]、および [整数オーバーフローで飽和] の設定は、加算演算にのみ適用されます。

Multiply-Add ブロックは、乗算と加算または乗算と減算の組み合わせ演算をターゲット ハードウェアの DSP ユニットにマッピングするために使用します。Multiply-Add ブロックの [ブロック パラメーター] ダイアログ ボックスで [関数] の設定を選択します。

DSP ユニットにマッピングするには、モデルの SynthesisTool プロパティを指定します。モデルの HDL コードを生成すると、HDL Coder™ で乗算と加算の演算が構成され、合成ツールで DSP ユニットにマッピングできるようになります。

メモ

DSP ユニットによっては、乗算と加算の機能がない場合もあります。ハードウェアに乗算と加算の機能があるかどうかを確認するには、ハードウェアのドキュメンテーションを参照してください。

制限

Multiply-Add ブロックは、固定小数点データ型も含め、Simulink® でサポートされる数値データ型の信号を受け入れて出力します。

Multiply-Add ブロックでは行列のデータ型を使用できます。これらの型を使用する場合は、入力 ab の端子の次元が一致している必要があります。たとえば、MATLAB® では、次の行列演算を実行できます。

a = [1 2; 3 4];
b = [5; 6];
c = 7;

c + (a.*b)
ans =

    12    17
    25    31
一方、この乗算を Simulink 環境で実行すると、「Error in port widths or dimensions」というエラーが表示されます。

Simulink でサポートされているデータ型を参照してください。

端子

入力

すべて展開する

端子 b への入力と乗算する入力信号。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

端子 a への入力と乗算する入力信号。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

ab の積に [関数] の設定に応じて加算または減算する入力信号。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

出力

すべて展開する

乗算と加算の演算からの出力データ。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

パラメーター

すべて展開する

乗算と加算または乗算と減算の組み合わせ演算を実行する関数を指定します。

プログラムでの使用

パラメーター: Function
型: string スカラー | 文字ベクトル
値: "c+(a.*b)" | "c-(a.*b)" |"(a.*b)-c"
既定の設定: 'c+(a.*b)'

出力データ型を次のように設定します。

  • データ型を継承するルール。例: 継承: 入力と同じ

  • 有効なデータ型として評価される式。例: fixdt([],16,0)

[データ型アシスタントを表示] ボタン をクリックして [データ型アシスタント] ダイアログ ボックスを表示すると、[出力データ型] パラメーターの設定に役立ちます。

詳細については、を参照してください。

固定小数点演算の丸めモードを次のいずれかとして指定します。

正方向

正の無限大方向に正負の値を丸めます。MATLAB 関数 ceil と等価です。

最も近い偶数方向

最も近い表現可能な値に数値を丸めます。同順位が発生した場合は、最も近い偶数の整数に丸めます。Fixed-Point Designer™ 関数 convergent と等価です。

負方向

負の無限大方向に正負の値を丸めます。MATLAB 関数 floor と等価です。

最も近い正の整数方向

最も近い表現可能な値に数値を丸めます。同順位が発生した場合は、正の無限大方向に丸めます。Fixed-Point Designer 関数 nearest と等価です。

最も近い整数方向

最も近い表現可能な値に数値を丸めます。同順位が発生した場合は、正の数値を正の無限大方向、負の数値を負の無限大方向に丸めます。Fixed-Point Designer 関数 round と等価です。

最も簡潔

負方向の丸めとゼロ方向の丸めのいずれかを選択し、できるだけ効率の高い丸めコードを生成します。

ゼロ方向

ゼロ方向に数値を丸めます。MATLAB 関数 fix と等価です。

プログラムでの使用

パラメーター: RndMeth
型: string スカラー | 文字ベクトル
値: "Ceiling" | "Convergent" |"Floor" | "Nearest" | "Round" | "Simplest" | "Zero"
既定の設定: 'Floor'

参考

詳細については、丸めを参照してください。

オン

オーバーフローは、データ型が表現できる最小値または最大値のいずれかに飽和します。

たとえば、符号付き 8 ビット整数に関連付けられたオーバーフローは、-128 または 127 に飽和することができます。

オフ

オーバーフローは、データ型によって表現される適切な値にラップされます。

たとえば、数 130 は符号付き 8 ビット整数 1 つに収まりきらないので、-126 にラップされます。

ヒント

  • モデルでオーバーフローが発生する可能性があり、生成コードに飽和保護を明示的に組み込む必要があるときには、このチェック ボックスをオンにすることを検討してください。

  • 生成コードの効率を最適化する場合には、このチェック ボックスをオフにすることを検討してください。

    このチェック ボックスをオフにすると、ブロックが範囲外の信号を処理する方法を指定しすぎないようにする点でも役立ちます。詳細については、信号範囲のエラーのトラブルシューティングを参照してください。

  • このチェック ボックスをオンにすると、飽和は出力や結果だけでなく、このブロックの内部演算すべてに適用されます。

  • 通常、オーバーフローが可能ではない場合は、コード生成プロセスで検出されます。この場合、コード ジェネレーターでは飽和コードは生成されません。

プログラムでの使用

パラメーター: SaturateOnIntegerOverflow
型: string スカラー | 文字ベクトル
値: "off" | "on"
既定の設定: 'off'

アルゴリズム

すべて展開する

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2015b で導入