Main Content

ストリーミング行列乗算 System object の HDL コード生成

この例では、HDL Coder™ でサイズの構成が可能なストリーミング モードの行列乗算を実装する方法を示します。

行列を乗算する方法

A と B を 2 つの行列とすると、C= A * B は A と B の行列積です。A が m 行 p 列、B が p 行 n 列の行列の場合、C は次で定義される m 行 n 列の行列になります。

C(i,j) =  A(i,1)B(1,j) + A(i,2)B(2,j) + -------- + A(i,p)B(p,j)

この内部定義は、C(i,j) が A の i 行目と B の j 列目の内積であることを示します。

非スカラーの A と B に対しては、A の列数は B の行数と等しくなければなりません。

:

     A = [1 3 5;2 4 7];              (2 X 3 matrix)
     B = [-5 8 11;3 9 21;4 0 8];     (3 X 3 matrix)

A の行と B の列の内積を計算すると次のようになります。

     C = [24 35 114;30 52 162];      (2 X 3 matrix)

はじめに

ストリーミング行列乗算は、2 つの行列の乗算をサポートします。行列のサイズとドット積のサイズの構成が可能です。ドット積のサイズは、計算に使用される乗算器の数と等しくなります。このブロックは、行列からの直列化された入力データを行優先または列優先の形式で受け入れることができます。

Matrix Multiply のインターフェイス:

Matrix Multiply の端子の説明:

MatrixMultiply の実装

このモデル例には、InputSubsystemMatrixMultiply、および OutputSubsystem の 3 つのサブシステムがあります。上流の InputSubsystem は、aReady 信号と bReady 信号がイネーブルの場合に行列入力 (A,B) を処理モジュールに直列化するモジュールです。下流の OutputSubsystem は、cReady 信号がイネーブルの場合に処理モジュールから行列出力 (C) にデータを逆シリアル化するモジュールです。MatrixMultiply は、行列乗算を実装する処理モジュールです。

open_system('hdlcoder_streaming_matrix_multiply_max_latency');

Matrix Multiply のタイミング図

タイミング図

タイミング図

ストリーミング行列乗算の ModelSim の結果

Matrix Multiply のブロック パラメーター:

Matrix-A Row Size         : Enter row size of input matrix A as a positive integer.
Matrix-A Column Size      : Enter column size of input matrix B as a positive integer
                            which is equals to input matrix B row size.
Matrix-B Column Size      : Enter column size of input matrix B as a positive integer.
Dot product size          : Select dot product size from drop
                            down menu(1,2,4,8,16,32,64) which should be
                            less than input matrix A column size.
LatencyStrategy          :  Select latency strategy from drop
                            down menu ({'ZERO, 'MIN', 'MAX'}) which
                            should be same as HDL coder latency strategy.
                            Processing latency depends on the latency strategy.
Major Order               : Select row major or column major
                            based on the input data streaming.

Matrix Multiply ブロックの使用方法

  1. MATLAB System ブロックのブロック パラメーターを設定します。

  2. ブロック パラメーターで設定した値に基づいて入力行列のサイズを選択します。

  3. MatrixMultiply サブシステムの HDL コードを生成します。

生成コードと生成モデル

MatrixMultiply サブシステムのコード生成の実行後、次のようなコードが生成されます。

生成されるモデルには MatrixMultiply MATLAB System ブロックが含まれます。modelsim シミュレーションで、コード生成の出力が MATLAB System ブロックの出力と比較されます。

合成の統計

制限

  • 行列のドット積のサイズは、1 または 2 のべき乗にすることができます。許容されるサイズは、12481632、および 64 です。

  • 行列の入力データ型は single でなければならず、ブロックを Native Floating Point モードで使用しなければなりません。

  • 入力行列のサイズは 64 行 64 列まででなければなりません。

関連リンク

mtimes