Main Content

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

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

行列のモデル化の要件

ガイドライン ID

1.3.1

重大度

必須

説明

HDL Coder™ では、DUT インターフェイスで行列データ型がサポートされます。2 次元または 3 次元の行列を DUT インターフェイスへの入力として使用して、モデルの HDL コードを生成できます。

この例では、HDL Coder™ での行列タイプの使用方法を説明します。hdlcoder_matrix_multiply モデルを開きます。

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

DUT サブシステムを開くと、2 つのサブシステムが表示されます。1 つのサブシステムは Matrix Multiply ブロックを使用し、もう一方のサブシステムは要素単位の乗算を実行します。

open_system('hdlcoder_matrix_multiply/DUT')

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

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

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

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

制限

HDL コード生成では、次の HDL ワークフローでの行列の入力はサポートされません。

  • コシミュレーション モデルの生成

  • FPGA インザループ

  • IP コアの生成

ベクトル信号からの 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
]

参考

関数

関連するトピック