バス配列を使用するサブシステムの 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 ブロックはバス配列でサポートされない。