生成された VHDL コードのベクトル端子のスカラー化
この例では、Simulink® モデルのベクトル信号をフラットにして、生成された VHDL® コードのスカラー信号の構造体にする方法を示します。
ベクトル端子のスカラー化の指定
Verilog コードを生成するときに、既定では、ベクトル信号はスカラーにフラット化されます。VHDL コードを生成するとき、ベクトル信号をモデル全体で、または DUT レベルでフラットにするかを指定できます。ベクトル端子を DUT レベルのみでフラットにすると、特に多くのベクトル入力をもつ大規模なモデルの場合はコード生成が高速になります。
MATLAB® および Simulink から HDL コードを生成するときに、ベクトル端子をスカラーにスカラー化できます。MATLAB® から HDL へのワークフローについては、[HDL コード生成] タスクの [クロックと端子] タブで [端子のスカラー化] を [dutlevel
] または [on
] に設定します。
Simulink モデルの HDL コードを生成するときにベクトル端子をスカラー化するには、次を実行します。
[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成]、[グローバル設定]、[端子] タブで、[端子のスカラー化] パラメーターを
[dutlevel]
または[on]
に設定します。HDL ワークフロー アドバイザーの [HDL コード生成]、[コード生成オプションを設定]、[詳細オプションを設定]、[端子] タブで、Scalarize portsパラメーターを
dutlevel
またはon
に設定します。MATLAB コマンド プロンプトで、
hdlset_param
またはmakehdl
を使用して、ScalarizePorts
プロパティをon
またはdutlevel
に設定します。
ベクトル和モデル
ベクトル端子のフラット化を確認するには、モデル hdlcoder_hdlcoder_vector_sum_nested
を開きます。モデルは、幅が 10
のベクトル入力により駆動されます。またモデルにはスカラー出力があります。
open_system('hdlcoder_vector_sum_nested') set_param('hdlcoder_vector_sum_nested','SimulationCommand','update')
このモデルは simplevectorsum
モデルと同じであり、vsum
サブシステム内のサブシステム vsum_mid
で構成されます。
open_system('hdlcoder_vector_sum_nested/vsum')
vsum_mid
サブシステムには、ベクトル和のために構成されている Sum of Elements ブロックが含まれます。モデルは、vsum
サブシステム内の Sum of Elements ブロックの HDL コードを生成する際に Tree
実装を使用するように設定されています。この実装はレイテンシを最小にするように最適化されていて、ブロックに対して加算器のツリー状の構造が生成されます。
open_system('hdlcoder_vector_sum_nested/vsum/vsum_mid')
ベクトル端子のスカラー化
既定の設定では、ScalarizePorts
プロパティは off
です。HDL Coder™ は、次のコードに示すように、ベクトル端子 In1
の型定義と端子宣言を生成します。
PACKAGE simplevectorsum_pkg IS TYPE vector_of_std_logic_vector16 IS ARRAY (NATURAL RANGE <>) OF std_logic_vector(15 DOWNTO 0); TYPE vector_of_signed16 IS ARRAY (NATURAL RANGE <>) OF signed(15 DOWNTO 0); END simplevectorsum_pkg;
...
ENTITY vsum IS PORT( In1 : IN vector_of_std_logic_vector16(0 TO 9); -- int16 [10] Out1 : OUT std_logic_vector(19 DOWNTO 0) -- sfix20 ); END vsum;
HDL コードの生成時にベクトル端子をスカラー化するには、[コンフィギュレーション パラメーター] ダイアログ ボックスで [端子のスカラー化] パラメーターを設定するか、関数 hdlset_param
または makehdl
を使用して ScalarizePorts
プロパティを on
または dutlevel
に設定します。ScalarizePorts
を dutlevel
に設定すると、DUT のベクトル信号のみがスカラーにフラット化されます。スカラーはベクトルとして vsim_mid
サブシステムへの入力になります。
makehdl('hdlcoder_vector_sum_nested/vsum', 'ScalarizePorts', 'dutlevel')
ENTITY vsum IS PORT( In1_0 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_1 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_2 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_3 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_4 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_5 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_6 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_7 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_8 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_9 : IN std_logic_vector(15 DOWNTO 0); -- int16 Out1 : OUT std_logic_vector(19 DOWNTO 0) -- sfix20 ); END vsum;
ENTITY vsum_mid IS PORT( In1 : IN vector_of_std_logic_vector16(0 TO 9); -- int16 [10] Out1 : OUT std_logic_vector(19 DOWNTO 0) -- sfix20 ); END vsum_mid;
モデル コンフィギュレーション パラメーターIndexing for scalarized port namingを One-based
に設定すると、スカラー化されたベクトル端子の名前の開始インデックスを Zero-based
から One-based
に変更できます。
モデル全体のベクトル端子をフラットにするには、ScalarizePorts
を on
に設定します。vsum_mid
のベクトル端子と Sum of Elements ブロックへの入力も、スカラーにフラット化されます。
makehdl('hdlcoder_vector_sum_nested/vsum', 'ScalarizePorts', 'on')
ENTITY vsum_mid IS PORT( In1_0 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_1 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_2 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_3 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_4 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_5 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_6 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_7 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_8 : IN std_logic_vector(15 DOWNTO 0); -- int16 In1_9 : IN std_logic_vector(15 DOWNTO 0); -- int16 Out1 : OUT std_logic_vector(19 DOWNTO 0) -- sfix20 ); END vsum_mid;
使用に関するメモと制限
保護モデルの
ScalarizePorts
プロパティを使用する場合、このプロパティには、参照元となる最上位モデルのこのパラメーターに指定されている値と同じ値を使用しなければなりません。IP Core Generation
ワークフローとFPGA-in-the-Loop
ワークフローを使用する場合、ベクトル端子はサポートされません。ScalarizePorts
をon
またはdutlevel
に設定します。コード生成を高速化するために、ScalarizePorts
をdutlevel
に設定します。ベクトル端子または行列端子をモデル参照インターフェイスへの入力としてスカラー化してから HDL コードを生成しなければなりません。
ScalarizePorts
をdutlevel
に設定します。既定では、[モデル参照用の VHDL コードを単一のライブラリに生成] が有効になっています。VHDL コードは別個のライブラリではなく 1 つのライブラリで生成されます。この場合、
ScalarizePorts
プロパティをoff
に設定してから HDL コードを生成します。コードの生成時に、生成された 2 つ以上の VHDL コード モジュールのインターフェイス時にベクトル端子間で型指定または命名の競合が発生する場合は、競合しない端子定義を生成するために
ScalarizePorts
プロパティを使用します。