Main Content

Multiply-Accumulate

入力に対して Multiply-Accumulate 演算を実行する

  • Multiply-Accumulate block

ライブラリ:
HDL Coder / HDL Operations

説明

Multiply-Accumulate ブロックは、入力 ab、およびバイアス c に対してこの演算を実行して結果 dataOut を計算します。

dataOut = sum(a.* b) + c

既定では、このブロックはベクトル モードで動作します。入力 a および b はスカラー、ベクトル、または 2 次元行列にすることができます。既定では、バイアス値 c はゼロです。このブロックは入力 a と入力 b のドット積を計算します。Dialog または Input port[ソース] として使用して、c に非ゼロの値を指定できます。このブロックはこのバイアスを ab のドット積に加算します。乗算演算は、[出力データ型] の設定に関係なく完全精度です。[出力データ型] および [整数丸めモード] の設定は、加算演算に適用されます。ブロックの HDL コードを生成するには、ベクトル入力を使用します。スカラー入力では、Multiply-Add ブロックを使用します。

[演算モード] 設定を使用して、Multiply-Accumulate ブロックのストリーミング操作モードを指定できます。HDL コード生成では、ストリーミング演算モードを使用している場合、スカラー値をブロックに入力する必要があります。このブロックには Streaming - using Start and End portsStreaming - using Number of Samples という 2 つのストリーミング モードがあります。これらのストリーミング モードを選択した場合、モードで使用する制御信号を指定できます。制御信号は、累積を開始および終了するタイミングおよび出力が有効である条件を指定します。

端子

入力

すべて展開する

ブロックへの入力を提供する端子。

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

ブロックへの入力を提供する端子。

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

ブロックにバイアス信号を提供する端子。ブロックはこのバイアスを入力に加算します。バイアス信号のデータ型が入力のドット積のデータ型に一致していることを確認してください。

依存関係

この端子を有効にするには、[ソース][入力端子] に設定します。

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

累積を開始する制御信号を提供する端子。端子への入力として boolean データ型の信号を使用することをお勧めします。dataOut 信号からの累積された出力値の取得を開始するには、startInvalidIn の信号がともに High になっている必要があります。dataOut 信号は、次のクロック サイクルから累積結果を生成します。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定します。

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

入力信号が累積用に有効であることを示す制御信号を提供する端子。端子への入力として boolean データ型の信号を使用することをお勧めします。dataOut 信号からの累積された出力値の取得を開始するには、validInstartIn の信号がともに High になっている必要があります。dataOut 信号は、次のクロック サイクルから累積結果を生成します。validIn 信号は startIn 信号および endIn 信号より優先順位が高くなっています。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] または [Streaming - using Number of Samples] に設定します。

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

累積の終了を示す制御信号を提供する端子。startIn 信号および endIn 信号を validIn 信号とともに使用して、累積出力を含むフレームを示すことができます。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定してから、[End input and output ports] を選択します。

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

出力

すべて展開する

Multiply-Accumulate 演算からの出力データを生成する端子。既定では、ブロックは [Vector] 演算モードを使用し、入力信号のドット積を計算し、バイアスを加算して結果を生成します。[演算モード] としてストリーミング演算モードを指定した場合、dataOut 信号の値は、指定した制御信号によって異なります。出力信号のデータ型は、アキュムレータのデータ型と同じです。

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

累積の開始を示す出力制御信号を生成する端子。validInstartIn がともに High の場合、startOut 信号は次のクロック サイクルで高くなります。startOut が High になるクロック サイクルは、フレームの開始を示し、dataOut 信号が有効な累積出力の生成を開始したことを示しています。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定してから、[Start output port] を選択します。

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

dataOut 信号が有効であることを示す出力制御信号を生成する端子。validIn 信号が High になると、validOut 信号は次のクロック サイクルで High になり、dataOut が有効であることを示します。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定してから、[Valid output port] を選択します。

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

累積の終了を示す出力制御信号を生成する端子。startOut 信号が High になったときから endOut 信号が High になるまでの間のクロック サイクルを使用して、累積出力を含む有効なフレームを示すことができます。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定してから、[End input and output ports] を選択します。

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

累積サンプル数を示す出力制御信号を生成する端子。この信号の値は、1 から、[サンプル数] に指定した値まで増加します。validIn 信号が High である間、countOut はクロック サイクルごとに 1 ずつインクリメントされます。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Number of Samples] に設定してから、[Count output port] を選択します。

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

パラメーター

すべて展開する

[演算モード] を次のいずれかとして指定します。

  • Vector: 入力としてスカラーまたはベクトルを使用できます。ブロックは入力 u1 と入力 u2 のドット積を実行し、バイアス k を加算して結果を生成します。

  • Streaming - using Start and End Ports: HDL コード生成にスカラー入力を使用します。このモードでは、startIn および endIn 制御信号を使用して、累積を開始および停止するタイミングを決定できます。validIn が High の場合、出力データは有効です。

  • Streaming - using Number of Samples: HDL コード生成にスカラー入力を使用します。このモードでは、[サンプル数] を指定し、countIn 制御信号を使用して累積を開始および停止するタイミングを決定できます。validIn が High の場合、出力データは有効です。

プログラムでの使用

ブロック パラメーター: opMode
型: 文字ベクトル
値: 'Vector' | 'Streaming - using Start and End Ports' | 'Streaming - using Number of Samples'
既定の設定: 'Vector'

以下のようにバイアスを指定できます。

  • [ソース]Dialog として。この場合は、[値] を指定します。

  • [ソース]Input port として。この設定では、バイアス信号をブロックに入力する外部入力端子 c が作成されます。

プログラムでの使用

ブロック パラメーター: initValueSetting
型: 文字ベクトル
値: 'Dialog' | 'Input port'
既定の設定: 'Dialog'

[ソース]Dialog として設定した場合、initValue2 設定を使用して初期値を指定できます。

ブロック パラメーター: initValue2
型: 文字ベクトル
値: 0 以上の整数
既定の設定: '0.0'

[サンプル数] を指定して、有効な累積出力 dataOut のサンプル数を含むフレームを指定できます。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Number of Samples] に設定します。

プログラムでの使用

ブロック パラメーター: num_samples
型: 文字ベクトル
値: 0 以上の整数
既定の設定: '2'

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

  • Inherit: Same as first input など、データ型を継承するルール。

  • singleint16 など、組み込みデータ型。

  • Simulink.NumericType オブジェクトなど、データ型オブジェクトの名前。

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

ストリーミング モードでは Inherit: Inherit via internal rule はサポートされていません。[出力データ型] を設定する際に [データ型アシスタント] を使用できます。アシスタントを表示するには、[データ型アシスタントを表示] をクリックします。

プログラムでの使用

ブロック パラメーター: OutDataTypeStr
型: 文字ベクトル
既定の設定: {'Inherit: Inherit via internal rule'}

このパラメーターに指定できる値を確認するには、ブロック固有のパラメーターを参照してください。

以下のいずれかとして丸めアクションを指定します。

Ceiling

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

Convergent

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

Floor

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

Nearest

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

Round

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

Simplest

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

Zero

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

プログラムでの使用

ブロック パラメーター: RndMeth
型: 文字ベクトル
既定の設定: {'Floor'}

このパラメーターに指定できる値を確認するには、ブロック固有のパラメーターを参照してください。

validOut 出力端子の生成を制御します。この端子は、dataOut が有効かどうかを示します。

オフ

validOut 出力端子を表示しません。

オン

validOut 出力端子を表示します。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Number of Samples] または [Streaming - using Start and End Ports] に設定します。

プログラムでの使用

ブロック パラメーター: validOut
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

endIn 入力端子および endOut 出力端子の生成を制御します。これらの端子は、有効な累積出力を含むフレームの最後を示します。

オフ

endIn 入力端子および endOut 出力端子を表示しません。

オン

endIn 入力端子および endOut 出力端子を表示します。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定します。

プログラムでの使用

ブロック パラメーター: endInandOut
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

startOut 出力端子の生成を制御します。この端子は、有効な累積出力を含むフレームの開始を示す startOut 信号を生成します。

オフ

startOut 出力端子を表示しません。

オン

startOut 出力端子を表示します。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Start and End Ports] に設定します。

プログラムでの使用

ブロック パラメーター: startOut
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

countOut 出力端子の生成を制御します。この端子は、有効なサンプルを含むフレームを示すカウンターを生成します。

オフ

countOut 出力端子を表示しません。

オン

countOut 出力端子を表示します。

依存関係

この端子を有効にするには、[演算モード][Streaming - using Number of Samples] に設定します。

プログラムでの使用

ブロック パラメーター: countOut
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

ヒント

Multiply-Accumulate ブロックでは次のことが可能です。

  • 行列乗算演算を実行する。たとえば、次元が N-by-M および M-by-P の 2 つの行列入力がある場合、N-by-P Multiply-Accumulate 演算を並列で使用して結果を計算できます。

  • フィルター ブロックなどで乗算および加算の演算の順序を置き換え、FPGA 上の DSP スライスにマッピングしてハードウェアでのパフォーマンスを向上させる。次の図では、sfir_fixed モデルで Multiply-Accumulate ブロックを使用する方法を示します。

アルゴリズム

すべて展開する

拡張機能

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

バージョン履歴

R2017b で導入