Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

行列とベクトルの設計に関する考慮事項

これらのガイドラインは、HDL コード生成用に設計をモデル化する際の行列信号とベクトル信号の使用に関する推奨される方法を示したものです。各ガイドラインに準拠要件のレベルを示す重大度レベルが割り当てられています。詳細については、HDL モデリング ガイドラインの重大度レベルを参照してください。

行列のモデル化の要件

ガイドライン ID

1.3.1

重大度

必須

説明

HDL Coder™ では、DUT インターフェイスでの行列データ型の使用はサポートされていません。2 次元行列の信号を DUT サブシステムに入力する場合は、その前に Reshape ブロックを使用して信号を 1 次元ベクトルに変換します。DUT サブシステム内部で、Reshape ブロックを使用してベクトルを行列に変換し直してから行列計算を実行できます。計算の実行が完了したら、DUT 出力インターフェイスで行列をベクトル信号に再度変換しなければなりません。DUT インターフェイスの外部では、ベクトル信号を行列に変換し直すことができます。

モデル化における考慮事項

  • Reshape ブロックを使用してベクトルを 2 次元行列に変換するときは、出力の次元の指定が適切であることを確認してください。

  • Product ブロックを使用するときは、適切な乗算モードを使用してください。このモードを使用すると、行列の乗算または要素単位の乗算のいずれかを実行できます。乗算モードに応じて、乗算の出力の次元が異なる場合があります。

  • Product ブロックを使用して行列の乗算を実行する場合、Matrix Multiply ブロックを Subsystem ブロックの内部に配置します。コードを生成して生成されたモデルを開くと、HDL Coder で行列の乗算が複数の Product ブロックと Add ブロックに展開されることがわかります。Matrix Multiply ブロックをサブシステムの内部に配置すると、生成されたモデルが理解しやすくなります。また、Matrix Multiply ブロックに 2 つを超える入力を指定しないようにしてください。

  • 行列データを抽出する場合は、Selector ブロックと Assignment ブロックを使用します。ブロックのインデックスの入力端子に固定小数点データ型を使用しないようにしてください。

この例では、HDL Coder™ での行列タイプの使用方法を説明します。hdlcoder_matrix_multiply モデルを開きます。モデルには、行列入力を DUT サブシステム インターフェイスの 1 次元ベクトルに変換する Reshape ブロックが含まれます。

open_system('hdlcoder_matrix_multiply')
set_param('hdlcoder_matrix_multiply', 'SimulationCommand', 'update')
sim('hdlcoder_matrix_multiply')

DUT サブシステムを開くと、2 つのサブシステムが表示されます。Reshape ブロックは 1 次元配列をサブシステムに対する入力の 2 行 2 列の行列に戻します。1 つのサブシステムは Matrix Multiply ブロックを使用し、もう一方のサブシステムは要素単位の乗算を実行します。出力結果はベクトルに変換し直されます。

open_system('hdlcoder_matrix_multiply/DUT')

DUT サブシステムの HDL コードを生成して生成されたモデルを開くと、乗算演算の実行方法が示されます。

ベクトル信号からの HDL コードでの昇順のビット順序の生成を避ける

ガイドライン ID

1.3.2

重大度

強く推奨

説明

MATLAB® では、配列の既定のビット順序は昇順です。この場合、生成された VHDL コードは std_logic_vector (0 to n) の宣言を使用します。この信号宣言は、特定の HDL コーディング標準ルールに違反しているため、警告を生成します。いくつかのシナリオは次のとおりです。

昇順のビット順序のシナリオ

シナリオ問題例回避方法

[遅延の長さ]1 より大きい Delay ブロック。

この例は、[遅延の長さ]5Delay ブロックに対する生成コードを示します。

ENTITY Subsystem1 IS
  PORT( clk    :   IN   std_logic;
        reset  :   IN   std_logic;
        enb    :   IN   std_logic;
        In1    :   IN   std_logic;  -- ufix1
        Out1   :   OUT  std_logic   -- ufix1
        );
END Subsystem1;


ARCHITECTURE rtl OF Subsystem1 IS

  -- Signals
  SIGNAL Delay_reg   : std_logic_vector(0 TO 4);  -- ufix1 [5]
  SIGNAL Delay_out1  : std_logic;  -- ufix1


[遅延の長さ]5Delay ブロックを使用する代わりに、[遅延の長さ]1 の 5 つの Delay ブロックを連続で接続できます。

ENTITY Subsystem1 IS
  PORT( clk    :   IN    std_logic;
        reset  :   IN    std_logic;
        enb    :   IN    std_logic;
        In1    :   IN    std_logic;  -- ufix1
        Out1   :   OUT   std_logic  -- ufix1
        );
END Subsystem1;


ARCHITECTURE rtl OF Subsystem1 IS

  -- Signals
  SIGNAL Delay_out1    : std_logic;  -- ufix1
  SIGNAL Delay1_out1   : std_logic;  -- ufix1
  SIGNAL Delay2_out1   : std_logic;  -- ufix1
  SIGNAL Delay3_out1   : std_logic;  -- ufix1
  SIGNAL Delay4_out1   : std_logic;  -- ufix1

Mux ブロックを使用して複数の入力信号をベクトル信号に結合。

この例は、Mux ブロックを使用して 4 つの入力信号を結合する場合の生成コードを示します。

ENTITY Subsystem IS
  PORT( In1   :  IN   std_logic;  -- ufix1
        Out1  :  OUT  std_logic_vector(0 TO 3)  -- ufix1 [4]
        );
END Subsystem;


ARCHITECTURE rtl OF Subsystem IS

  -- Signals
  SIGNAL Mux_out1  : std_logic_vector(0 TO 3);  -- ufix1 [4]

Bit Concat ブロックを使用して入力信号を結合します。この例は、4 つの入力信号を連結することによる、このブロックの生成コードを示します。

ENTITY Subsystem IS
  PORT( In1   :   IN    std_logic;  -- ufix1
        Out1  :   OUT   std_logic_vector(3 DOWNTO 0)  -- ufix4
        );
END Subsystem;


ARCHITECTURE rtl OF Subsystem IS

  -- Signals
  SIGNAL Bit_Concat_out1  : unsigned(3 DOWNTO 0);  -- ufix4 

Constant ブロックを使用してベクトル信号を生成。

この例は、Constant ブロックを使用して 4 つのスカラー boolean 信号のベクトルを生成する場合の生成コードを示します。

ENTITY Subsystem2 IS
  PORT( Out1  :  OUT  std_logic_vector(0 TO 3)  -- boolean [4]
        );
END Subsystem;


ARCHITECTURE rtl OF Subsystem2 IS

  -- Signals
  SIGNAL Constant_out1  : std_logic_vector(0 TO 3);  -- boolean [4]

Constant ブロックの後に Demux ブロックに続けて Bit Concat ブロックを使用します。この例は、4 つの Constant ブロックのベクトルにこのモデル化手法を適用する場合の生成コードを示します。

ENTITY Subsystem2 IS
  PORT( Out1   :   OUT   std_logic_vector(3 DOWNTO 0)  -- ufix4
        );
END Subsystem2;


ARCHITECTURE rtl OF Subsystem2 IS

  -- Signals
  SIGNAL Constant_out1     : std_logic_vector(0 TO 3);  -- boolean [4]
  SIGNAL Constant_out1_0   : std_logic;
  SIGNAL Constant_out1_1   : std_logic;
  SIGNAL Constant_out1_2   : std_logic;
  SIGNAL Constant_out1_3   : std_logic;
  SIGNAL Bit_Concat_out1   : unsigned(3 DOWNTO 0);  -- ufix4
]

参考

関数

関連するトピック