Main Content

バス配列を使用するサブシステムの HDL コードの生成

バス配列とは、要素がバスである配列のことです。バス配列内の各要素は、非バーチャルであることが必要であり、さらに同じデータ型でなければなりません。

バス配列は、構造化されたデータをコンパクトに表現します。バス配列により次が実現されます。

  • モデルの複雑度を軽減

  • ベクトル化されたアルゴリズムの Simulink® モデルでの信号の編成およびルーティングによりメンテナンスを軽減

詳細については、非バーチャル バスのバス配列へのグループ化を参照してください。

Simulink がバス配列を使用してサポートするバーチャル ブロックと非バーチャル ブロックの HDL コードを生成できます。詳細については、バス対応ブロックを参照してください。

HDL Coder でのバス配列用コードの生成方法

HDL Coder™ は Simulink モデルのバス配列を、生成されたコード内の対応するスカラー信号に拡張します。

この Simulink モデルでは、DUT インターフェイスにバス配列の信号があります。

バス配列には 2 つの非バーチャル バス要素が組み合わされており、要素にはそれぞれ uint16 型と int32 型のスカラー a および b があります。

結果の HDL コードはバス配列をスカラーに拡張し、4 つのスカラー入力端子と出力端子を含みます。

生成されたコードでは、バス配列の拡張により、入力端子と出力端子に 4 つのスカラー信号が生成されます。最初のバス オブジェクトで、入力端子は In_1_a および In_1_b になります。2 番目のバス オブジェクトでは、In_2_a および In_2_b になります。出力の最初のバス オブジェクトでは、Out_1_a および Out_1_b になります。2 番目のバス オブジェクトでは、Out_2_a および Out_2_b になります。

ENTITY DUT IS
  PORT( In1_1_a   :   IN    std_logic_vector(15 DOWNTO 0);  -- uint16
        In1_1_b   :   IN    std_logic_vector(31 DOWNTO 0);  -- int32
        In1_2_a   :   IN    std_logic_vector(15 DOWNTO 0);  -- uint16
        In1_2_b   :   IN    std_logic_vector(31 DOWNTO 0);  -- int32
        Out1_1_a  :   OUT   std_logic_vector(15 DOWNTO 0);  -- uint16
        Out1_1_b  :   OUT   std_logic_vector(31 DOWNTO 0);  -- int32
        Out1_2_a  :   OUT   std_logic_vector(15 DOWNTO 0);  -- uint16
        Out1_2_b  :   OUT   std_logic_vector(31 DOWNTO 0)   -- int32
        );
END DUT;

HDL Coder では、Simulink モデルでバス要素と配列要素を指定した順序に従ってコードが生成されます。配列を使用するバス オブジェクトを含む Simulink モデルに対して VHDL ターゲット言語を指定すると、HDL Coder では生成されたコードで配列が保持され、スカラーに拡張されません。

バス配列の制限

  • 他のデータ型内でバス配列を使用しない。バス配列を含むバス信号は使用できません。

  • System objects を含む MATLAB System ブロックと MATLAB Function ブロックはバス配列でサポートされない。

関連するトピック