このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
サブシステムで再利用可能なコードの生成
HDL Coder™ は、モデルの階層構造のあらゆるレベルで同一の Atomic サブシステム、あるいはマスク パラメーターの値以外が同じ Atomic サブシステムを検出して、単一の再利用可能な HDL module
または entity
を生成できます。再利用可能な HDL コードは、単一のファイルとして生成され、複数回インスタンス化されます。
Atomic サブシステムで再利用可能なコードの生成の要件
Simulink® の
DefaultParameterBehavior
コンフィギュレーション パラメーターがInlined
でなければなりません。このパラメーターは、コマンド ラインで、関数set_param
または関数hdlsetup
を使用して設定できます。この設定を [コンフィギュレーション パラメーター] ダイアログ ボックスで指定するには、Simulink Coder™ が必要です。メモ
hdlsetup
を使用するとInlineParams
プロパティがon
に設定されません。このパラメーターの有効化は、DefaultParameterBehavior
をInlined
に設定するのと同じです。InlineParams
をoff
に設定すると、DefaultParameterBehavior
の値がTunable
に変更されます。信号のログまたは To Workspace や To File などのブロックによる機能を使用しないでください。
Atomic サブシステムは、同一またはマスク パラメーターの値を除いて同一でなければなりません。
MaskParameterAsGeneric
がon
でなければなりません。詳細については、マスクされたサブシステムからのパラメーター化された HDL コードの生成を参照してください。マスク パラメーターが調整不可能でなければなりません。コード ジェネレーターは、調整可能なマスク パラメーターと Atomic サブシステムを共有しません。
マスク パラメーターがスカラーでなければなりません。
マスク パラメーター データ型を、語長が
32
以下であるinteger
またはfixed-point
にする必要があります。調整可能なパラメーターを使用できるのは Constant、Gain または Compare To Constant ブロックのみです。
端子データ型が一致しなければなりません。
調整可能なマスク パラメーターの値を変更すると、出力端子のデータ型も変わる可能性があります。いずれかの Atomic サブシステムに異なる端子データ型があると、そのサブシステム用に生成されたコードも異なります。
バーチャル サブシステムで再利用可能なコードの生成の要件
Simulink の
DefaultParameterBehavior
コンフィギュレーション パラメーターがInlined
でなければなりません。このパラメーターは、コマンド ラインで、関数set_param
または関数hdlsetup
を使用して設定できます。この設定を [コンフィギュレーション パラメーター] ダイアログ ボックスで指定するには、Simulink Coder が必要です。メモ
hdlsetup
を使用するとInlineParams
プロパティがon
に設定されません。このパラメーターの有効化は、DefaultParameterBehavior
をInlined
に設定するのと同じです。InlineParams
をoff
に設定すると、DefaultParameterBehavior
の値がTunable
に変更されます。信号のログまたは To Workspace や To File などのブロックによるロギング機能を使用しないでください。
バーチャル サブシステムは、同一またはマスク パラメーターの値を除いて同一でなければなりません。
SubsystemReuse
が'Atomic and Virtual'
に設定されていなければなりません。SubsystemReuse
を'Atomic and Virtual'
に設定すると疑似代数エラーが削減され、設計の他の部分のトポロジに関係なく同一のサブシステムの認識が向上します。類似サブシステムの同定はリソース共有に役立ちます。これらの値を必要な設定に設定するには、MATLAB コマンド ウィンドウで次のように入力します。
hdlset_param('myHDLModel', 'SubsystemReuse', 'Atomic and Virtual')
あるいは、[コンフィギュレーション パラメーター] ダイアログ ボックスの最上位の [HDL コード生成] ペインからこのオプションを設定できます。[グローバル設定] 、 [コーディング スタイル] で、[コードの再利用] 設定を必要なオプションに変更できます。
前述のコマンドでは、
SubsystemReuse
オプションがプロジェクトに対して設定されます。このオプションを現在のコード生成セッションのみに対して設定するには、次のように入力します。makehdl(<DUT system>, 'SubsystemReuse', 'Atomic and Virtual')
MaskParameterAsGeneric
がon
でなければなりません。詳細については、マスクされたサブシステムからのパラメーター化された HDL コードの生成を参照してください。マスク パラメーターが調整不可能でなければなりません。コード ジェネレーターは、調整可能なマスク パラメーターと Atomic サブシステムを共有しません。
マスク パラメーターがスカラーでなければなりません。
マスク パラメーター データ型を、語長が
32
以下であるinteger
またはfixed-point
にする必要があります。調整可能なパラメーターを使用できるのは Constant、Gain または Compare To Constant ブロックのみです。
端子データ型が一致しなければなりません。
調整可能なマスク パラメーターの値を変更すると、出力端子のデータ型も変わる可能性があります。いずれかの Atomic サブシステムに異なる端子データ型があると、そのサブシステム用に生成されたコードも異なります。
Atomic サブシステムで再利用可能なコードの生成
設計に同一の Atomic サブシステムが含まれる場合は、そのサブシステムに対して 1 つの HDL module
または entity
を生成し、複数回インスタンス化します。
例
hdlcoder_reusable_code_identical_subsystem
モデルを開いて、同一の 3 つの Atomic サブシステムを含む DUT サブシステムの例を表示します。
HDL Coder は、3 つのサブシステムに対して、1 つの VHDL® ファイル vsum.vhd
を生成します。
makehdl('hdlcoder_reusable_code_identical_subsystem/DUT')
### Generating HDL for 'hdlcoder_reusable_code_identical_subsystem/DUT'. ### Starting HDL check. ### Generating new validation model: gm_hdlcoder_reusable_code_identical_subsystem_vnl. ### Validation model generation complete. ### Begin VHDL Code Generation for 'hdlcoder_reusable_code_identical_subsystem'. ### Working on hdlcoder_reusable_code_identical_subsystem/DUT/vsum/Sum of Elements as hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\Sum_of_Elements.vhd. ### Working on hdlcoder_reusable_code_identical_subsystem/DUT/vsum as hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\vsum.vhd. ### Working on hdlcoder_reusable_code_identical_subsystem/DUT as hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\DUT.vhd. ### Generating package file hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\DUT_pkg.vhd. ### Creating HDL Code Generation Check Report DUT_report.html ### HDL check for 'hdlcoder_reusable_code_identical_subsystem' complete with 0 errors, 0 warnings, and 0 messages. ### HDL code generation complete.
DUT サブシステム用に生成されたコード DUT.vhd
には、vsum
コンポーネントの 3 つのインスタンス化が含まれます。
ARCHITECTURE rtl OF DUT IS -- Component Declarations COMPONENT vsum PORT( In1 : IN vector_of_std_logic_vector16(0 TO 9); -- int16 [10] Out1 : OUT std_logic_vector(19 DOWNTO 0) -- sfix20 ); END COMPONENT; -- Component Configuration Statements FOR ALL : vsum USE ENTITY work.vsum(rtl); -- Signals SIGNAL vsum_out1 : std_logic_vector(19 DOWNTO 0); -- ufix20 SIGNAL vsum1_out1 : std_logic_vector(19 DOWNTO 0); -- ufix20 SIGNAL vsum2_out1 : std_logic_vector(19 DOWNTO 0); -- ufix20 BEGIN u_vsum : vsum PORT MAP( In1 => In1, -- int16 [10] Out1 => vsum_out1 -- sfix20 ); u_vsum1 : vsum PORT MAP( In1 => In2, -- int16 [10] Out1 => vsum1_out1 -- sfix20 ); u_vsum2 : vsum PORT MAP( In1 => In3, -- int16 [10] Out1 => vsum2_out1 -- sfix20 ); Out1 <= vsum_out1; Out2 <= vsum1_out1; Out3 <= vsum2_out1; END rtl;
調整可能なマスク パラメーターをもつ Atomic サブシステムで再利用可能なコードの生成
調整可能なマスク パラメーターの値を除いて同一の Atomic サブシステムが設計に含まれる場合は、そのサブシステムに対して 1 つの HDL module
または entity
を生成できます。生成されたコード内で、module
または entity
は複数回インスタンス化されます。
同一の Atomic サブシステムに対して再利用可能なコードを生成するには、モデルに対して MaskParameterAsGeneric
を有効にします。既定の設定では MaskParameterAsGeneric
は無効になっています。
たとえば、調整可能なパラメーターをもつ Atomic サブシステムに対して再利用可能なコードの生成を有効にするには、hdlcoder_reusable_code_parameterized_subsystem
モデルを開いてから、次のように入力します。
hdlset_param('hdlcoder_reusable_code_parameterized_subsystem','MaskParameterAsGeneric','on')
または、[コンフィギュレーション パラメーター] ダイアログ ボックスで、[HDL コード生成] 、 [グローバル設定] 、 [コーディング スタイル] タブを選択し、[マスクされたサブシステムからのパラメーター化された HDL コードの生成] オプションを有効にします。
例
hdlcoder_reusable_code_parameterized_subsystem
モデルは、調整可能なマスク パラメーター値以外は同一の Atomic サブシステムを含む DUT サブシステムの例を示しています。
hdlcoder_reusable_code_parameterized_subsystem/DUT
内で、ゲイン モジュールは調整可能なマスク パラメーターで表されるゲイン値をもつサブシステムです。それぞれのゲイン値は、gain_module
は 4、gain_module1
は 5、gain_module2
は 7 です。
MaskParameterAsGeneric
が有効な場合、HDL Coder は単一のソース ファイル gain_module.v
を 3 つのゲイン モジュールのサブシステムに対して生成します。
makehdl('hdlcoder_reusable_code_parameterized_subsystem/DUT','MaskParameterAsGeneric','on',... 'TargetLanguage','Verilog')
### Generating HDL for 'hdlcoder_reusable_code_parameterized_subsystem/DUT'. ### Starting HDL check. ### Begin Verilog Code Generation for 'hdlcoder_reusable_code_parameterized_subsystem'. ### Working on hdlcoder_reusable_code_parameterized_subsystem/DUT/gain_module as hdlsrc\hdlcoder_reusable_code_parameterized_subsystem\gain_module.v. ### Working on hdlcoder_reusable_code_parameterized_subsystem/DUT as hdlsrc\hdlcoder_reusable_code_parameterized_subsystem\DUT.v. ### Creating HDL Code Generation Check Report DUT_report.html ### HDL check for 'hdlcoder_reusable_code_parameterized_subsystem' complete with 0 errors, 0 warnings, and 0 messages. ### HDL code generation complete.
DUT サブシステム用に生成されたコード DUT.v
には、gain_module
コンポーネントの 3 つのインスタンス化が含まれます。
module DUT ( In1, In2, In3, Out1, Out2, Out3 ); input [7:0] In1; // uint8 input [7:0] In2; // uint8 input [7:0] In3; // uint8 output [31:0] Out1; // uint32 output [31:0] Out2; // uint32 output [31:0] Out3; // uint32 wire [31:0] gain_module_out1; // uint32 wire [31:0] gain_module1_out1; // uint32 wire [31:0] gain_module2_out1; // uint32 gain_module # (.myGain(4) ) u_gain_module (.In1(In1), // uint8 .Out1(gain_module_out1) // uint32 ); assign Out1 = gain_module_out1; gain_module # (.myGain(5) ) u_gain_module1 (.In1(In2), // uint8 .Out1(gain_module1_out1) // uint32 ); assign Out2 = gain_module1_out1; gain_module # (.myGain(7) ) u_gain_module2 (.In1(In3), // uint8 .Out1(gain_module2_out1) // uint32 ); assign Out3 = gain_module2_out1; endmodule // DUT
gain_module.v
内で、myGain
Verilog® parameter
は調整可能なマスク パラメーター用に生成されます。
module gain_module ( In1, Out1 ); input [7:0] In1; // uint8 output [31:0] Out1; // uint32 parameter [31:0] myGain = 4; // ufix32 wire [31:0] kconst; // ufix32 wire [39:0] Gain_mul_temp; // ufix40 wire [31:0] Gain_out1; // uint32 assign kconst = myGain; assign Gain_mul_temp = kconst * In1; assign Gain_out1 = Gain_mul_temp[31:0]; assign Out1 = Gain_out1; endmodule // gain_module
入力モデルにマスク変数やマスク初期化コードなどのマスク情報を含むサブシステムがある場合、このようなサブシステムのマスク情報は生成されたモデルで保持されます。この情報が不要な場合は削除できます。