Main Content

HDL ブロック プロパティ: 一般

概要

ブロック実装パラメーターにより、特定のブロック実装用に生成されたコードの詳細を制御できます。GUI またはコマンド ラインからブロック実装およびパラメーターを選択する方法については、HDL モデルおよびブロック パラメーターの設定と表示を参照してください。

プロパティ名は文字ベクトルとして指定します。プロパティ値のデータ型はプロパティに固有です。この節では、各ブロック実装パラメーターの構文およびパラメーターが生成コードに与える影響について説明します。

ライブラリ ブロックの HDL ブロック プロパティ

ライブラリ ブロックの HDL ブロック プロパティは、マスク パラメーターと同様に扱われます。モデルでライブラリ ブロックをインスタンス化する場合、そのライブラリ ブロックの現在の HDL ブロック プロパティは、モデルのそのブロックのインスタンスにコピーされます。それらのインスタンスの HDL ブロック プロパティは、ライブラリ ブロックの HDL ブロック プロパティと同期していません。つまり、ライブラリ ブロックの HDL ブロック プロパティを変更すると、この変更は Simulink® モデルに既に追加されているライブラリ ブロックのインスタンスには伝播されません。ライブラリ ブロックの HDL ブロック プロパティをモデル内のそのインスタンスと同期させる場合、Subsystem を作成してから、このブロックをその Subsystem 内に配置します。ライブラリ ブロック内にあるブロックの HDL ブロック プロパティは、モデル内の対応するインスタンスと同期します。

HDL アーキテクチャが Module に設定されている Subsystem ブロックがライブラリに含まれているとします。このブロックをモデルでインスタンス化する場合、ブロックのインスタンスは HDL アーキテクチャとして Module を使用します。ライブラリ内の Subsystem ブロックの HDL アーキテクチャを BlackBox に変更しても、モデル内のその Subsystem ブロックの既存のインスタンスは、HDL アーキテクチャとして Module を引き続き使用します。モデルでライブラリから Subsystem ブロックのインスタンスを追加すると、新しいブロックのインスタンスは、現在の HDL ブロック プロパティのコピーを取得します。したがって、HDL アーキテクチャとして BlackBox を使用します。ライブラリ内の Subsystem ブロックの HDL アーキテクチャをモデル内のそのインスタンスと同期させる場合は、必要な HDL アーキテクチャがこの Subsystem 内に含まれる、ラッパー サブシステムを作成します。

AdaptivePipelining

AdaptivePipelining サブシステム パラメーターにより、モデル内のサブシステムに適応パイプラインを設定できます。

適応パイプライン設定説明
'inherit' (既定の設定)

親サブシステムの適応パイプライン設定を使用します。このサブシステムが最上位のサブシステムの場合、モデルの適応パイプライン設定を使用します。

'on'

このサブシステムに適応パイプラインを挿入します。

'off'

親サブシステムで適応パイプラインが有効になっている場合でも、このサブシステムに適応パイプラインを挿入しません。

モデル内のサブシステムに対して適応パイプラインを無効にするには、そのサブシステムの適用パイプライン パラメーター AdaptivePipelining'off' に設定します。

モデル レベルの適応パイプラインの設定方法については、Adaptive pipeliningを参照してください。

サブシステムに対する適応パイプラインの設定

[HDL ブロック プロパティ] ダイアログ ボックスからサブシステムの適応パイプラインを設定するには、次の手順に従います。

  1. サブシステムを右クリックして [HDL コード][HDL ブロック プロパティ] を選択します。

  2. [AdaptivePipelining] で、[inherit][on] または [off] を選択します。

コマンド ラインからサブシステムの適応パイプラインを設定するには、hdlset_param を使用します。たとえば、サブシステム my_dut の適応パイプラインをオフにするには、次の手順に従います。

hdlset_param('my_dut', 'AdaptivePipelining', 'off')
hdlset_paramも参照してください。

AllowDelayDistribution

Delay ブロックまたは Unit Delay ブロックの AllowDelayDistribution プロパティは、遅延ブロックを分散型パイプライン方式最適化で移動、また遅延吸収時に吸収できるようにする場合に使用します。

[遅延分散を許可] の設定説明
'inherit' (既定の設定)

モデルのAllow design delay distribution設定を使用します。

'on'

最適化で遅延ブロックを移動または吸収できるようにします。

'off'

最適化で遅延ブロックを移動または吸収できるようにしません。

Delay ブロックまたは Unit Delay ブロックでの [遅延分散を許可] の設定

[HDL ブロック プロパティ] ダイアログ ボックスから、分散型パイプライン方式または遅延吸収のときに Delay または Unit Delay ブロックを分散または吸収するのかどうかを設定するには、以下のようにします。

  1. サブシステムを右クリックして [HDL コード][HDL ブロック プロパティ] を選択します。

  2. [AllowDelayDistribution][inherit][on]、または [off] に設定します。

コマンド ラインから、Delay ブロックまたは Unit Delay ブロックの遅延分散を設定するには、hdlset_param を使用します。たとえば、Delay ブロックで遅延分散を許可しない場合は、次のように 'my_DUT/Delay1' を指定します。

hdlset_param('my_DUT/Delay1','AllowDelayDistribution','off')
hdlset_paramも参照してください。

参考

BalanceDelays

BalanceDelays サブシステム パラメーターにより、モデル内のサブシステムの遅延の均衡化を設定できます。

BalanceDelays の設定説明
'inherit' (既定の設定)

親サブシステムの遅延の均衡化の設定を使用します。このサブシステムが最上位のサブシステムの場合、モデルの遅延の均衡化の設定を使用します。

'on'サブシステムの遅延を均衡化します。
'off'親サブシステムで遅延の均衡化が有効にされていても、このサブシステムの遅延は調整しません。

遅延の均衡化の詳細については、遅延の均衡化を参照してください。

サブシステムの遅延の均衡化の設定

[HDL ブロック プロパティ] ダイアログ ボックスを使用してサブシステムの遅延の均衡化を設定するには、以下のようにします。

  1. サブシステムを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [BalanceDelays][inherit][on] または [off] を選択します。

コマンド ラインからサブシステムの遅延の均衡化を設定するには、hdlset_param を使用します。たとえば、サブシステム my_dut の遅延の均衡化を無効にするには、次のようにします。

hdlset_param('my_dut', 'BalanceDelays', 'off')
hdlset_paramも参照してください。

ClockRatePipelining

ClockRatePipelining サブシステム パラメーターにより、モデル内のサブシステムのクロックレート パイプラインを設定できます。

クロックレート パイプラインの設定説明
'inherit' (既定の設定)

親サブシステムのクロックレート パイプライン設定を使用します。このサブシステムが最上位のサブシステムの場合、モデルのクロックレート パイプライン設定を使用します。

'on'

このサブシステムにクロックレート パイプラインを挿入します。

'off'

親サブシステムでクロックレート パイプラインが有効になっている場合でも、このサブシステムにクロックレート パイプラインを挿入しません。

モデル内のサブシステムのクロックレート パイプラインを無効にするには、そのサブシステムの ClockRatePipeliningoff に設定します。

モデル レベルのクロックレート パイプラインを設定する方法については、Clock-rate pipeliningを参照してください。

サブシステムのクロックレート パイプラインの設定

[HDL ブロック プロパティ] ダイアログ ボックスを使用してサブシステムのクロックレート パイプラインを設定するには、以下のようにします。

  1. サブシステムを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [ClockRatePipelining][inherit][on]、または [off] に設定します。

コマンド ラインからサブシステムのクロックレート パイプラインを設定するには、hdlset_param を使用します。たとえば、サブシステム my_dut のクロックレート パイプラインをオフにするには、以下のようにします。

hdlset_param('my_dut', 'ClockRatePipelining', 'off')

参考

CodingStyle

Multiport Switch ブロックを使用する場合、CodingStyle パラメーターを使用して、if-else または case ステートメントを含む HDL コードを生成するかどうかを指定します。既定では、HDL Coder™ は if-else ステートメントを生成します。モデルに複数の Multiport Switch ブロックが存在する場合、各ブロックで異なる CodingStyle を指定できます。

CodingStyle の設定説明
'ifelse_stmt' (既定値)Multiport Switch ブロックに対して Verilog コードまたは SystemVerilog コードで if-else ステートメントを生成するか、VHDL コードで when-else ステートメントを生成します。
'case_stmt'Multiport Switch ブロックに対して Verilog コードまたは SystemVerilog コードで case ステートメントを生成するか、VHDL コードで case-when ステートメントを生成します。

Multiport Switch ブロックの CodingStyle の設定

[HDL ブロック プロパティ] ダイアログ ボックスを使用して Multiport Switch に CodingStyle を設定するには、次のようにします。

  1. Multiport Switch ブロックを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [CodingStyle] で、[ifelse_stmt] または [case_stmt] を選択します。

コマンド ラインからサブシステムに指定した CodingStyle を確認するには、hdlget_param を使用します。たとえば、サブシステム内の Multiport Switch ブロックに指定した設定を確認するには、my_dut は次のようになります。

hdlget_param('my_dut/Multiport Switch', 'CodingStyle')
ans =

    'case_stmt'
hdlset_paramも参照してください。

ConstMultiplierOptimization

ConstMultiplierOptimization 実装パラメーターを使用すると、生成されるコードの係数乗算器演算の最適化に、正準符号付き桁数 (CSD) または因数分解された CSD を使用することを指定できます。

次の表は、ConstMultiplierOptimization パラメーターの値を説明しています。

ConstMultiplierOptimization の設定説明
'none'
(既定値)
既定では、HDL Coder は CSD と FCSD のいずれの最適化も実行しません。Gain ブロック用に生成されたコードは乗算器の演算を維持します。
'CSD'このオプションを指定すると、生成されたコードは正準符号付き桁数 (CSD) 手法を使用して、クロック速度を維持または増加しながらモデルで使用される面積を減少します。CSD は乗算器の演算を加算および減算演算で置換します。CSD では、2 進数を最小限のカウントでゼロ以外の桁によって表現することで、定数乗算に必要な加算演算の数を最小に抑えます。
'FCSD'このオプションは、乗算器の演算を特定のオペランドの素因数のシフトおよび加算/減算演算で置換する、因数分解された CSD (FCSD) 手法を使用します。これらの因数は一般的には素因数ですが、面積の削減にとって有利となる 2 のべき乗に近い数値の場合もあります。このオプションを使用すると CSD よりも大幅に面積を削減できますが、クロック速度は低下します。
'auto'

このオプションを選択すると、HDL Coder によって、CSD または FCSD の最適化が自動的に選択されます。必要な加算器の数に基づいて、最も面積効率の高い実装を得られる最適化が選択されます。'auto' を指定すると、CSD または FCSD 最適化が不可能な場合 (たとえば、設計で浮動小数点演算が使用されている場合) を除いて、本製品は乗算器を使用しません。

ConstMultiplierOptimization パラメーターは、次のブロックで使用できます。

  • Gain

  • Stateflow® Chart

  • Truth Table

  • MATLAB Function

  • MATLAB System

ConstrainedOutputPipeline

ConstrainedOutputPipeline パラメーターを使用して、ブロック出力に配置するレジスタの非負の個数を指定します。

HDL Coder は、制約を満たすために設計内の既存の遅延を移動します。新しいレジスタは追加されません。制約を満たすにはレジスタが不足している場合は、出力レジスタの必要な数と実際の数の差がレポートされます。設計に遅延を追加するには、入力パイプラインまたは出力パイプラインを使用します。

制約付き出力パイプラインで指定したレジスタは、分散型パイプライン方式では再分布されません。

制約付き出力パイプラインの指定方法

GUI を使用してブロックの制約付き出力パイプラインを指定するには、以下のようにします。

  1. ブロックを右クリックし、[HDL コード][HDL ブロック プロパティ] を選択します。

  2. [ConstrainedOutputPipeline] に出力端子に配置するレジスタの数を入力します。

制約付き出力パイプラインを指定するには、コマンド ラインに以下を入力します。

hdlset_param(path_to_block,
             'ConstrainedOutputPipeline', number_of_output_registers)
たとえば、モデル mymodel のサブシステム subsys の出力端子でレジスタを 6 つに制約するには、次のように入力します。
hdlset_param('mymodel/subsys','ConstrainedOutputPipeline', 6)

参考

DistributedPipelining

DistributedPipelining サブシステム パラメーターにより、パイプライン レジスタの分布、つまりサブシステム上のクリティカル パスを減らしてクロック速度を高める速度の最適化が可能です。この最適化によって、階層を維持しながらサブシステム内で遅延を移動します。

DistributedPipelining の設定説明
'inherit' (既定の設定)

親サブシステムの分散型パイプライン設定を使用します。このサブシステムが最上位のサブシステムの場合、モデルの分散型パイプライン設定を使用します。

'off'HDL Coder は、手動で配置されたか、HDL ブロック プロパティの InputPipeline または OutputPipeline を使用して配置されたパイプライン レジスタを分布しません。
'on' HDL Coder は、クリティカル パスの解析に基づいて、サブシステム、MATLAB Function ブロックまたは Stateflow チャート内にレジスタを分布します。この設定では、既に手動で配置されたか、HDL ブロック プロパティの InputPipeline または OutputPipeline を使用して配置されたサブシステム内のパイプラインを分布します。

ヒント

パイプライン レジスタを挿入した場合、最初は出力データが無効の状態になることがあります。初期の無効なサンプルによってテスト ベンチでエラーが発生しないように、これらのサンプルに対して出力チェックを無効にします。詳細については、出力データのチェックを無視 (サンプル数) を参照してください。

モデル内のサブシステムの分散型パイプラインを有効にするには、そのサブシステムの DistributedPipeliningon に設定します。

モデル レベルの分散型パイプラインの設定方法については、Distributed pipeliningを参照してください。

サブシステムの分散型パイプラインの設定

[HDL ブロック プロパティ] ダイアログ ボックスを使用してサブシステムの分散型パイプラインを設定するには、以下のようにします。

  1. サブシステムを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [DistributedPipelining][inherit][on]、または [off] に設定します。

コマンド ラインからサブシステムの分散型パイプラインを設定するには、関数 hdlset_param を使用します。たとえば、次のように入力します。

hdlset_param('path/to/subsystem', 'DistributedPipelining', 'on')

参考

DotProductStrategy

設計での行列乗算に Product ブロックを使用する場合、DotProductStrategy を使用して、行列乗算を実装する方法を指定します。

次の表は、DotProductStrategy オプションのリストです。

DotProductStrategy の値説明
'Fully Parallel' (既定の設定)

行列乗算演算を乗算器と加算器に拡張します。たとえば、2 つの 2 行 2 列の行列を乗算する場合、結果を計算するために 8 つの乗算器と 4 つの加算器が実装に使用されます。

乗算器を共有して面積を最適化するには、HDL ブロック プロパティ StreamingFactor を使用します。

メモ

Native Floating Point モードを使用する場合、[DotProductStrategy]'Fully Parallel' に設定しなければなりません。

'Fully Parallel Scalarized'

行列乗算演算を乗算器と加算器に拡張します。たとえば、2 つの 2 行 2 列の行列を乗算する場合、結果を計算するために 8 つの乗算器と 4 つの加算器が実装に使用されます。このオプションは、サイズが小さい行列に対して、乗算器と加算器の両方で共有を有効にする場合に使用します。

乗算器を共有して面積を最適化するには、HDL ブロック プロパティ SharingFactor を使用します。

'Serial Multiply-Accumulate'

Multiply-Accumulate ブロックの [シリアル] アーキテクチャを使用して、行列乗算を実装します。

このアーキテクチャでは、クロック レートは、[並列] アーキテクチャで指定するクロック レートより高速でなければなりません。クロック レートは、コード生成レポートのクロック概要情報で確認できます。

'Parallel Multiply-Accumulate'

Multiply-Accumulate ブロックの [並列] アーキテクチャを使用して、行列乗算を実装します。

DSPStyle

DSPStyle を使用すると、設計内で使用されている乗算器のマッピングの合成属性を含むコードを生成できます。特定のブロックの乗算器を、ハードウェア上で DSP とロジックのどちらにマッピングするかを選択できます。

Xilinx® のターゲットの場合、生成されたコードでは use_dsp 属性が使用されます。Altera® のターゲットの場合、生成されたコードでは multstyle 属性が使用されます。

次の表は、DSPStyle オプションのリストです。

DSPStyle の値説明
'none' (既定の設定)

DSP マッピングの合成属性は挿入されません。

'on'

ハードウェア内の DSP にマッピングすることを合成ツールに指示する合成属性が挿入されます。

'off'

ハードウェア内のロジックにマッピングすることを合成ツールに指示する合成属性が挿入されます。

DSPStyle パラメーターは、次のブロックで使用できます。

  • Gain

  • Product

  • [Architecture] が [Tree] に設定されている Product of Elements

  • Subsystem

  • Atomic Subsystem

  • Variant Subsystem

  • Enabled Subsystem

  • Triggered Subsystem

  • Model ([Architecture] が ModelReference に設定されている場合)

階層のフラット化の動作

既定以外の DSPStyle が設定されているサブシステムに階層のフラット化を指定した場合、HDL Coder はその DSPStyle の設定を親サブシステムまで伝播します。

フラットにしたサブシステムに GainProduct または Product of Elements ブロックが含まれる場合、それらがもつ既定以外の DSPStyle 設定は維持され、既定の DSPStyle 設定は、フラットにしたサブシステムの DSPStyle 設定に置換されます。

生成されたコード内の合成属性

合成属性の生成コードは次に依存します。

  • ターゲット言語

  • DSPStyle

  • SynthesisTool

次の表は、生成されたコードにおける合成属性の例を示しています。

DSPStyle の値TargetLanguage の値SynthesisTool の値
'Altera Quartus II''Xilinx ISE'
'Xilinx Vivado'
'none''Verilog'

wire signed [32:0] m4_out1;

wire signed [32:0] m4_out1;

'VHDL'

m4_out1 : signal;

m4_out1 : signal;

'on''Verilog'

(* multstyle = "dsp" *) wire signed [32:0] m4_out1;

(* use_dsp = "yes" *) wire signed [32:0] m4_out1;

'VHDL'

attribute multstyle : string ;

attribute multstyle of m4_out1 : signal is "dsp" ;

attribute use_dsp : string ;

attribute use_dsp of m4_out1 : signal is "yes" ;

'off''Verilog'

(* multstyle = "logic" *) wire signed [32:0] m4_out1;

(* use_dsp = "no" *) wire signed [32:0] m4_out1;

'VHDL'

attribute multstyle : string ;

attribute multstyle of m4_out1 : signal is "logic" ;

attribute use_dsp : string ;

attribute use_dsp of m4_out1 : signal is "no" ;

合成属性の指定の要件

SynthesisTool プロパティを使用して、合成ツールを指定しなければなりません。

合成属性の指定方法

[HDL ブロック プロパティ] ダイアログ ボックスを使用して合成属性を指定するには、次の手順に従います。

  1. ブロックを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [DSPStyle][オン][オフ] または [なし] を選択します。

コマンド ラインから合成属性を指定するには、hdlset_param を使用します。たとえば、モデル my_model があり、DUT サブシステム my_dut が使用されていて、Gain ブロック my_multiplier が含まれているとします。my_multiplier を DSP にマッピングするための合成属性を挿入するには、次のように入力します。

hdlset_param('my_model/my_dut/my_multiplier', 'DSPStyle', 'on')
hdlset_paramも参照してください。

合成属性の指定の制限

  • 既定以外の DSPStyle ブロック プロパティを指定する場合、ConstMultiplierOptimization プロパティは、'none' に設定しなければなりません。

  • 乗算器コンポーネントへの入力に double のデータ型は使用できません。

  • Gain 定数は 2 のべき乗にはできません。

FlattenHierarchy

FlattenHierarchy により、設計から生成された HDL コードのサブシステム階層を削除できます。

FlattenHierarchy の設定説明
'inherit' (既定の設定)親サブシステムの階層のフラット化の設定を使用します。このサブシステムが最上位のサブシステムである場合は、フラットにしません。
'on'このサブシステムをフラットにします。
'off'親サブシステムをフラットにする場合でも、このサブシステムはフラットにしません。

また、階層をフラットにするには、MaskParameterAsGeneric グローバル プロパティが 'off' に設定されていなければなりません。詳細については、Generate parameterized HDL code from masked subsystemを参照してください。

階層をフラット化する方法

[HDL ブロック プロパティ] ダイアログ ボックスを使用して階層のフラット化を設定するには、次の手順に従います。

  • [アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。Subsystem を選択し、[HDL ブロック プロパティ] をクリックします。[FlattenHierarchy][on][off] または [inherit] を選択します。

  • Subsystem を右クリックし、[HDL コード][HDL ブロック プロパティ] を選択します。[FlattenHierarchy][on][off] または [inherit] を選択します。

コマンド ラインから階層のフラット化を設定するには、hdlset_param を使用します。たとえば、サブシステム my_dut の階層のフラット化を有効にするには、次のコマンドを使用します。

hdlset_param('my_dut', 'FlattenHierarchy', 'on')
hdlset_paramも参照してください。

階層のフラット化の制限

サブシステムが次に該当する場合は、フラットにできません。

  • Synchronous Subsystem または State Control ブロックを Synchronous モードで使用する場合

  • モデル参照の実装。

  • Use trigger signal as clockが有効な場合の Triggered Subsystem。

GuardIndexVariables

GuardIndexVariables により、配列インデックスを条件付きステートメントからホイストするかどうかを指定できます。RAM マッピング、ループ ストリーミング、共有などの特定の最適化を有効にすると、式が配列インデックスから移動します。式の一時変数が作成されるため、シミュレーション中にインデックスが範囲外になるエラーが発生する可能性があります。このオプションを有効にすると、生成コードがターゲット ハードウェアで非効率になる可能性があります。

GuardIndexVariables の設定説明
'off' (既定の設定)配列インデックスの式を条件付きステートメントから移動し、式の一時変数を作成します。
'on'配列インデックスの式を条件付きステートメントから移動せず、式の一時変数を作成しません。

次の図は、このオプションを有効にした生成コードと無効にした生成コードを示しています。GuardIndexVariable オプションが off の場合、配列インデックス変数 i は条件付きループで決定されず、範囲外になる可能性があります。GuardIndexVariable オプションが on の場合、配列インデックス変数 idx は条件付きループで決定され、シミュレーション中に配列インデックスが範囲外になるエラーは発生しません。

シミュレーション中にインデックスのアクセス違反エラーが発生する場合は、このオプションを使用してください。

InputPipeline

InputPipeline により、選択されたブロックに対して入力パイプラインをもつ実装を指定できます。パラメーター値は、生成されたコードの入力パイプライン ステージ数 (パイプラインの深さ) を指定します。分散型パイプラインでは、入力パイプラインを移動して設計を最適化できます。分散型パイプラインによって入力パイプラインが設計内の指定されたポイントから移動されないようにするには、ConstrainedOutputPipeline パラメーターを使用します。

次のコードは、モデル内の各 Sum ブロックに 2 ステージの深さの入力パイプラインを指定します。

sblocks = find_system(gcb, 'BlockType', 'Sum');
for ii=1:length(sblocks),hdlset_param(sblocks{ii},'InputPipeline', 2), end;

メモ

InputPipeline の設定は、入力端子を持たないブロックには影響を与えません。

パイプライン レジスタのコードを生成するときに、HDL Coder は入力または出力パイプライン レジスタの名前に接尾辞文字列を付加します。既定の接尾辞文字列は _pipe です。接尾辞文字列をカスタマイズするには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成] ペインにある [グローバル設定]/[一般] ペインの [パイプラインの接尾辞] オプションを使用します。あるいは、makehdl プロパティの PipelinePostfix に目的の接尾辞を文字ベクトルとして渡すこともできます。例については、パイプラインの接尾辞を参照してください。

InstantiateFunctions

MATLAB Function ブロックでは、InstantiateFunctions パラメーターを使用して各関数用の VHDL® entity、Verilog® または SystemVerilog module を生成できます。HDL Coder は entity または module ごとにコードを別のファイルに生成します。

MATLAB Function ブロックの [InstantiateFunctions] オプションを次の表に示します。

InstantiateFunctions の設定説明
'off' (既定の設定)

関数インラインのコードを生成します。

'on'

関数ごとに VHDL entity、Verilog または SystemVerilog module を生成し、各 module または entity を別のファイルに保存します。

関数のインスタンス化可能なコードの生成方法

[HDL ブロック プロパティ] ダイアログ ボックスを使用して [InstantiateFunctions] パラメーターを設定するには、以下のようにします。

  1. MATLAB Function ブロックを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. InstantiateFunctions には [on] を選択します。

コマンド ラインから [InstantiateFunctions] パラメーターを設定するには、hdlset_param を使用します。たとえば、DUT サブシステム myDUT 内の MATLAB Function ブロック myMatlabFcn で関数のインスタンス化可能なコードを生成するには、次のように入力します。

hdlset_param('my_DUT/my_MATLABFcnBlk', 'InstantiateFunctions', 'on')

特定の関数にインライン コードを生成

特定の関数についてのみインスタンス化可能なコードを生成し、その他の関数については生成しない場合は、このオプションを有効にして関数に対してインスタンス化可能なコードを生成し、coder.inline を使用します。詳細は、coder.inline を参照してください。

関数についてのインスタンス化可能なコードの生成に関する制限

このソフトウェアでは、次の場合にインライン コードが生成されます。

  • 関数呼び出しが条件付きコードまたは for ループの内部にある。

  • いずれかの関数が、非定数の struct 入力で呼び出されている。

  • 関数に永続変数などのステートがあり、複数回呼び出されている。

  • 設計関数のどこかに列挙がある。

InstantiateStages

[Cascade] アーキテクチャ の場合、[InstantiateStages] パラメーターを使用して、VHDL entity または Verilog module を各計算段階で生成できます。HDL Coder は、個別のファイルで各 entity または module を生成します。

InstantiateStages の設定説明
'off' (既定の設定)

1 つの VHDL entity または Verilog module にカスケードの段を生成します。

'on'

カスケードの段ごとに VHDL entity または Verilog module を生成し、各 module または entity を個別のファイルに保存します。

LoopOptimization

LoopOptimization を使用すると、MATLAB Function ブロックから生成されたコード内でループのストリームまたは展開が可能になります。ループ ストリーミングは面積を最適化し、ループ展開は速度を最適化します。

メモ

MATLAB Function ブロックの MATLAB Datapath アーキテクチャを指定する場合、実行できるのはループの展開のみです。ループのストリームを実行するために、[StreamingFactor] を指定することでストリーミングの最適化を使用できます。MATLAB Datapath アーキテクチャを使用した、MATLAB Function ブロック境界を越えた HDL 最適化を参照してください。

LoopOptimization の設定説明
'none' (既定の設定)ループを最適化しません。
'Unrolling'ループを展開します。
'Streaming'ループをストリームします。

ループ用の MATLAB Function ブロックの最適化方法

[HDL ブロック プロパティ] ダイアログ ボックスを使用してループの最適化を選択するには、次の手順に従います。

  1. MATLAB Function ブロックを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [LoopOptimization][none][Unrolling] または [Streaming] を選択します。

コマンド ラインからループの最適化を選択するには、hdlset_param を使用します。たとえば、MATLAB Function ブロック my_mlfn のループ ストリーミングを有効にするには、次を入力します。

hdlset_param('my_mlfn', 'LoopOptimization', 'Streaming')
hdlset_paramも参照してください。

MATLAB Function ブロックのループ最適化の制限

以下の場合、HDL Coder はループをストリームできません。

  • ループのインデックスがカウント ダウンされる場合。ループのインデックスは、各反復で 1 ずつ増加しなければなりません。

  • 別のループの階層の同じレベルで複数のループが入れ子になっている場合。

  • 特定の永続変数がループの内部と外部の両方で更新される場合。

HDL Coder は、永続変数が以下の場合にループをストリームできます。

  • ループの内部で更新され、ループの外部で読み取られる場合。

  • ループの内部で読み取られ、ループの外部で更新される場合。

LUTRegisterResetType

LUTRegisterResetType ブロック パラメーターを使用して、FPGA の ROM 構造に LUT をどのように合成するかを制御します。

LUTRegisterResetType の値説明
default

LUT 出力レジスタに既定のリセット ロジックがあります。HDL を生成するときに LUT がレジスタとして合成されます。

none

LUT 出力レジスタにリセット ロジックがありません。HDL を生成するときに LUT が ROM として合成されます。

LUTRegisterResetType は次のブロックに対して指定できます。

  • Gamma Correction

  • Lookup Table

MapPersistentVarsToRAM

MapPersistentVarsToRAM 実装パラメーターにより、MATLAB Function ブロックの永続配列用に、レジスタへマッピングする代わりに RAM ベースのマッピングを使用できます。

MapPersistentVarsToRAM の設定マッピングの動作

off

永続配列は生成された HDL コード内でレジスタにマッピングされます。

on

永続配列変数は RAM にマッピングされます。制限事項は、RAM マッピングの制限を参照してください。

RAM マッピングの制限

RAM マッピングを有効にした場合、次の条件がすべて満たされたときに、永続配列またはユーザー定義 System object™ のプライベート プロパティがブロック RAM にマッピングされます。

  • それぞれの読み取りまたは書き込みアクセス権限が、単一の要素のみを対象としている。たとえば、部分行列のアクセスおよび配列のコピーはサポートされません。

  • アドレスの計算ロジックが読み取りに依存しない。たとえば、配列から読み取られたデータを使用した読み取りまたは書き込みアドレスの計算はサポートされません。

  • 永続変数またはユーザー定義 System object のプライベート プロパティに循環依存がある場合、0 に初期化される。たとえば、2 つの永続変数 A と B がある場合、A が B に依存し、B が A に依存していれば循環依存があります。

  • アクセスが条件付きステートメント内の場合、条件付きステートメントは簡単な論理式 (&&||~) または関係演算子のみを使用している。たとえば、次のコードの r1 は RAM にマッピングされません。

    if (mod(i,2) > 0)
        a = r1(u);
    else
        r1(i) = u;
    end 

    関数を呼び出す条件などの複雑な条件は、それらを一時変数に代入し、その一時変数を条件付きステートメント内で使用するように書き換えることができます。たとえば、r1 を RAM にマッピングするには、前述のコードを次のように書き換えます。

    temp = mod(i,2);
    if (temp > 0)
        a = r1(u);
    else
        r1(i) = u;
    end 

  • 永続配列またはユーザー定義 System object のプライベート プロパティの値が外部入力に依存している。

    たとえば、次のコードでは bigarrayu に依存していないため、RAM にマッピングされません。

    function z = foo(u)
    
    persistent cnt bigarray
    if isempty(cnt)
        cnt = fi(0,1,16,10,hdlfimath);
        bigarray = uint8(zeros(1024,1));
    end
    z = u + cnt;
    idx = uint8(cnt);
    temp = bigarray(idx+1);
    cnt(:) = cnt + fi(1,1,16,0,hdlfimath) + temp;
    bigarray(idx+1) = idx; 

  • RAM サイズが RAMMappingThreshold の値以上である。RAM サイズは Array Size * Word Length * Complexity の積です。ここで、次のようになります。

    • Array Size は配列内の要素数です。

    • Word Length は、配列のデータ型を表すビット数です。

    • Complexity は、複素数データ型の場合は 2、実数データ型の場合は 1 です。

  • RAM にマッピングする永続変数へのアクセスが、ループを展開しない限り、for ループなどのループ内にない。詳細については、coder.unroll を参照してください。

  • RAM にマッピングする永続変数へのアクセスが、入れ子にされた if ステートメントや入れ子にされた switch ステートメントなどの入れ子にされた条件付きステートメント内にない。

上記の条件のいずれかが満たされていない場合、永続配列またはユーザー定義 System object のプライベート プロパティは、HDL コード内のレジスタにマップされます。

RAMMappingThreshold

RAMMappingThreshold の既定値は 256 です。このしきい値を変更するには hdlset_param を使用します。たとえば、次のコマンドは sfir_fixed モデルのマッピングのしきい値を 128 ビットに変更します。

hdlset_param('sfir_fixed', 'RAMMappingThreshold', 128);

RAM マッピングのしきい値は [コンフィギュレーション パラメーター] ダイアログ ボックスで変更することもできます。詳細については、RAM マッピングのしきい値を参照してください。

MATLAB Function ブロック内で永続配列の変数を RAM にマッピングする方法を説明した例については、MATLAB Function ブロックを使用した RAM マッピングを参照してください。

MapToRAM

MapToRAM プロパティを使用して、ルックアップ テーブル (LUT) を RAM にマッピングします。

[RAM 遅延のシミュレート] が有効になっている場合、MapToRAM プロパティはSine HDL Optimized and Cosine HDL Optimizedブロックに対して無効です。

MapToRAM の設定マッピングの動作
inherit (既定の設定)

モデル設定 [ルックアップ テーブルを RAM にマッピングする] の動作が使用されます。

off

ブロックのルックアップ テーブル (LUT) は FPGA のロジック スライスにマッピングされます。

on

ブロックのルックアップ テーブル (LUT) は RAM にマッピングされます。

レイテンシの追加に関する MapToRAM の考慮事項

ブロック プロパティ MapToRAM またはグローバル オプション LUTMapToRAM を有効にした場合に、モデルの合成ツールが Xilinx または Altera であるときは、Lookup Table ブロックの後にリセットのない単位遅延が追加されます。単位遅延が追加されるため、追加のレイテンシが挿入され、生成された HDL コードと生成されたモデルで遅延が均衡化されます。レイテンシが追加されないようにするには、元のモデルにある Lookup Table ブロックの後に、HDL ブロック プロパティ [ResetType][none] に設定されている Delay ブロックを追加します。

OutputPipeline

OutputPipeline により、選択されたブロックに対して出力パイプラインをもつ実装を指定できます。パラメーター値は、生成されたコードの出力パイプライン ステージ数 (パイプラインの深さ) を指定します。分散型パイプラインでは、出力パイプラインを移動して設計を最適化できます。分散型パイプラインによって出力パイプラインが設計内の指定されたポイントから移動されないようにするには、ConstrainedOutputPipeline パラメーターを使用します。

次のコードは、モデル内の各 Sum ブロックに 2 ステージの深さの出力パイプラインを指定します。

sblocks = find_system(gcb, 'BlockType', 'Sum');
for ii=1:length(sblocks),hdlset_param(sblocks{ii},'OutputPipeline', 2), end;

メモ

OutputPipeline の設定は、出力端子を持たないブロックには影響を与えません。

パイプライン レジスタのコードを生成するときに、HDL Coder は入力または出力パイプライン レジスタの名前に接尾辞文字列を付加します。既定の接尾辞文字列は _pipe です。接尾辞文字列をカスタマイズするには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成]、[グローバル設定]、[一般] タブの [パイプラインの接尾辞] オプションを使用します。代わりに、makehdlPipelinePostfix プロパティを使用することもできます。例については、パイプラインの接尾辞を参照してください。

Use Distributed Pipelining Optimization in Models with MATLAB Function Blocksも参照してください。

PreserveUpstreamLogic

未接続のロジックの削除を制御します。未接続のロジックとは、terminator ブロックの上流で接続されているロジックです。このプロパティは、Terminator ブロックでのみ使用できます。

PreserveUpstreamLogic のオプションPreserveUpstreamLogic の動作
off (既定の設定)

Terminator ブロックの上流で接続されたロジックは HDL コード生成で保持されません。

on

Terminator ブロックの上流で接続されたロジックは HDL コード生成で保持されます。

例については、Simulink モデルの HDL コードでの未接続の端子の最適化の「上流のロジックにおける未使用の端子の保持」の節を参照してください。

RAMDirective

RAMDirective を使用して、Simulink モデルのランダム アクセス メモリ (RAM) ブロックを FPGA RAM メモリ ブロックにマッピングするかどうかを指定できます。Xilinx ファミリの ultra や Quartus® ファミリの M144k など、大規模なメモリ ブロックをマッピングできます。設計内の RAM ブロックに対して、合成ツールに基づいて次の RAMDirective 値を指定します。

合成ツールRAM スタイル属性RAMDirective 値
Quartusramstyle

logic| M9K| M10K| M20K| M144K| MLAB

Xilinxram_style

block| distributed| register| ultra

Microchipsyn_ramstyle

block_ram| registers| lsram| uram

この設定の値を指定すると、HDL Coder は HDL コードの ramstyle 属性を生成します。この属性は、設計の RAM ブロックを推定する場合に合成ツールを使用する RAM メモリ単位のタイプを指定します。

この設定の値を指定しない場合、HDL Coder は HDL コードで ramstyle 属性を生成しません。合成ツールは、モデルの RAM ブロックをマッピングするために推定される RAM のタイプを決定します。

RAM ブロックの RAMDirective の設定

[HDL RAMs] ライブラリでは、Dual Rate Dual Port RAM を除く、その他すべての RAM ブロックに RAMDirective プロパティを指定できます。

[HDL ブロック プロパティ] ダイアログ ボックスで RAM ブロックに対して RAMDirective を設定するには、次を行います。

  1. RAM ブロックを右クリックします。

  2. [HDL コード][HDL ブロック プロパティ] を選択します。

  3. [RAMDirective] プロパティで、表にリストされている値を指定します。

[RAMDirective] は関数 hdlset_param を使用して設定することもできます。

hdlset_param(<ram_block_name>, ‘RAMDirective’, <attribute_value>);

これらの値を MATLAB® HDL ワークフローで指定するには、hdl.RAM のインスタンス化で RAMDirective パラメーター値のペアを使用します。このプロパティを設定するには、次のコマンドを使用します。

hRam = hdl.RAM(‘RAMType’, ‘Single Port RAM’, ‘RAMDirective’, ‘ultra’);

たとえば、モデルの RAM ブロックを block RAM にマッピングする HDL 属性を生成します。block RAM は、FPGA 上の専用メモリ単位です。ブロック RAM のサイズは、4kb8kb16kb および 32kb です。

RAM ブロックを block RAM にマッピングするには、次のようにします。

  • 合成ツールを指定する。block RAM リソースを含む Xilinx デバイスをターゲットにする必要があります。ターゲット デバイスにブロック RAM が含まれない場合、合成ツールはこの属性を無視し、RAM を分散 RAM またはルックアップ テーブル (LUT) スライスとして推定する場合があります。

  • [HDL ブロック プロパティ] で Simulink RAM ブロックの block として RAMDirective 値を入力する。

  • モデルの HDL コードを生成する。

次の生成された VHDL コードは、ram_style 属性が block に設定されていることを示します。

 attribute ram_style: string;
 attribute ram_style of ram : signal is "block";

次の生成された Verilog コードまたは SystemVerilog コードは、ram_style 属性が block に設定されていることを示します。

(* ram_style = "block" *)

依存関係

[RAMDirective] プロパティを使用するときは、設計に使用する合成ツールを必ず選択してください。

ResetType

ResetType ブロック パラメーターを使用して、リセット ロジックの生成を抑制します。

ResetType の値説明
default

リセット ロジックを生成します。

none

リセット ロジックを生成しません。

生成されたレジスタにリセットは適用されません。したがって、レジスタが完全に読み込まれていない場合、初期段階のいくつかのサンプルで Simulink と生成されたコードとの間に不一致が発生します。

初期段階におけるテスト ベンチのエラーを回避するには、レジスタを完全に読み込むために必要なサンプル数を確認してください。次に、[出力データのチェックを無視 (サンプル数)] オプションを適宜設定します。出力データのチェックを無視 (サンプル数) も参照してください。

ResetType は次のブロックに対して指定できます。

  • Chart

  • Convolutional Deinterleaver

  • Convolutional Interleaver

  • Delay

  • Delay (DSP System Toolbox™)

  • General Multiplexed Deinterleaver

  • General Multiplexed Interleaver

  • MATLAB Function

  • MATLAB System

  • Memory

  • Tapped Delay

  • Truth Table

  • Unit Delay Enabled

  • Unit Delay

MATLAB Function ブロック内の最適化のためのリセット ロジック

MATLAB Function ブロックの [ResetType][none] に設定すると、HDL Coder は MATLAB コードにある永続変数のリセット ロジックを生成しません。

しかし、このブロックに対して他の最適化を指定すると、リセット ロジックを使用するレジスタが挿入される場合があります。これらのレジスタに対するリセット ロジックの生成は抑制されません。したがって、[ResetType][none] に設定したうえで他のブロック最適化も加えて設定すると、生成されたコードでは最上位にリセット端子が存在する場合もあります。

リセット ロジック生成の抑制方法

UI を使用してブロックのリセット ロジックの生成を抑制するには、次の手順に従います。

  1. ブロックを右クリックし、[HDL コード][HDL ブロック プロパティ] を選択します。

  2. [ResetType][none] を選択します。

リセット ロジックの生成を抑制するには、コマンド ラインで次のように入力します。

hdlset_param(path_to_block,'ResetType','none')

たとえば、サブシステム mySubsys 内の Unit Delay ブロック UnitDelay1 のリセット ロジックの生成を抑制するには、コマンド ラインで次を入力します。

hdlset_param('mySubsys/UnitDelay1','ResetType','none');

同期リセットまたは非同期リセットの指定

同期または非同期リセットを指定するには、ResetType のモデル レベルのパラメーターを使用します。詳細については、Reset typeを参照してください。

SerialPartition

このパラメーターを Min/Max ブロックで使用して、シリアル カスケード アーキテクチャに対してパーティションを指定します。既定の設定では最小限の数のパーティションを使用します。

生成する
アーキテクチャ
SerialPartition の設定
明示的に指定された分割化を伴うカスケード シリアル[p1 p2 p3...pN]: N 個の整数のベクトル。ここで N はシリアル パーティションの数です。ベクトルの各要素は対応するパーティションの長さを指定します。ベクトルの要素の合計数は入力データ ベクトルの長さに等しくなければなりません。ベクトル要素の値は降順でなければなりません。ただし、最後の 2 つの要素が等しくなることは可能です。たとえば、8 つの要素の入力では、[5 3] または [4 2 2] のパーティションは有効ですが、[2 2 2 2] または [3 2 3] のパーティションはコード生成時にエラーを発生させます。
自動的に最適化された分割化を伴うカスケード シリアル0

このプロパティも、シリアル フィルター アーキテクチャで使用します。Filter ブロックの構成方法の詳細は、SerialPartitionを参照してください。

SharingFactor

SharingFactor を使用して、単一の共有リソースにマップする、機能的に同等なリソースの数を指定します。既定値は 0 です。リソース共有を参照してください。

SoftReset

SoftReset ブロック パラメーターを使用して、ハードウェア親和型の同期リセット ロジックを生成するか、Simulink のシミュレーション動作に一致するローカル リセット ロジックを生成するかを指定します。このプロパティは、Unit Delay Resettable ブロックまたは Unit Delay Enabled Resettable ブロックで使用できます。

SoftReset の値説明
off (既定の設定)

Simulink のシミュレーション動作に一致するローカル リセット ロジックを生成します。

on

ブロックの同期リセット ロジックを生成します。このオプションを選択すると、効率よく合成できるコードが生成されますが、Simulink のシミュレーション動作とは一致しません。

SoftReset'off' に設定すると、Unit Delay Resettable ブロックに次のコードが生成されます。

always @(posedge clk or posedge reset)
  begin : Unit_Delay_Resettable_process
    if (reset == 1'b1) begin
      Unit_Delay_Resettable_zero_delay <= 1'b1;
      Unit_Delay_Resettable_switch_delay <= 2'b00;
    end
    else begin
      if (enb) begin
        Unit_Delay_Resettable_zero_delay <= 1'b0;
        if (UDR_reset == 1'b1) begin
          Unit_Delay_Resettable_switch_delay <= 2'b00;
        end
        else begin
          Unit_Delay_Resettable_switch_delay <= In1;
        end
      end
    end
  end

assign Unit_Delay_Resettable_1 = 
            (UDR_reset || 
             Unit_Delay_Resettable_zero_delay ? 1'b1 : 1'b0);
assign out0 = (Unit_Delay_Resettable_1 == 1'b1 ? 2'b00 :
            Unit_Delay_Resettable_switch_delay);

SoftReset'on' に設定すると、Unit Delay Resettable ブロックに次のコードが生成されます。

always @(posedge clk or posedge reset)
  begin : Unit_Delay_Resettable_process
    if (reset == 1'b1) begin
      Unit_Delay_Resettable_reg <= 2'b00;
    end
    else begin
      if (enb) begin
        if (UDR_reset != 1'b0) begin
          Unit_Delay_Resettable_reg <= 2'b00;
        end
        else begin
          Unit_Delay_Resettable_reg <= In1;
        end
      end
    end
  end

assign out0 = Unit_Delay_Resettable_reg;

StreamingFactor

シリアル データ パスの時間多重化およびハードウェア リソースの共有により、シリアルのスカラー データ パスに変換するパラレル データ パス、つまりベクトルの数を指定します。既定値は 0 であり、パラレル データ パスがそのまま実装されます。ストリーミングも参照してください。

UseRAM

UseRAM 実装パラメーターにより、Delay ブロックをシフト レジスタにマッピングする代わりに RAM ベースのマッピングを使用できます。

UseRAM の設定マッピングの動作

off

遅延は、一例を除いて、生成された HDL コード内のシフト レジスタにマッピングされます。詳細は、ストリーミングおよび分散型パイプライン方式の影響を参照してください。

on

以下の条件が真の場合、遅延はデュアル ポート RAM ブロックにマッピングされます。

  • 遅延の初期値がゼロである。

  • Delay ブロックが外部リセットもしくはイネーブル端子を持たない。

  • [遅延の長さ]4 以上である。

  • 遅延が以下の数値とデータ型属性のセットのいずれかをもつ。

    • (a) 浮動小数点ではないデータ型 (符号付きの整数、符号なしの整数、固定小数点または boolean など) をもつ実数スカラー

    • (b) 浮動小数点ではないデータ型を使用する実数部および虚数部をもつ複素数スカラー

    • (c) 各要素が上記の (a) または (b) のいずれかのベクトル

  • RAMSizeRAMMappingThreshold の値以上である。RAMSize は、DelayLength * WordLength * VectorLength * Complexity の積です。

    • DelayLength は、Delay ブロックで指定される遅延数です。

    • WordLength は、遅延のデータ型を表すビット数です。

    • VectorLength は、Delay ブロックへの入力のベクトル長です。

    • Complexity は、複素数データ型の場合は 2、実数データ型の場合は 1 です。

    詳細については、RAM マッピングのしきい値を参照してください。

いずれかの条件が偽の場合、遅延は他の遅延とマージして単一 RAM にマッピングされない限り、HDL コード内のシフト レジスタにマッピングされます。詳細は、複数の遅延の RAM へのマッピングを参照してください。

この実装パラメーターは Simulink Discrete ライブラリの Delay ブロックおよび DSP System Toolbox Signal Operations ライブラリの Delay (DSP System Toolbox) ブロックで利用できます。

複数の遅延の RAM へのマッピング

HDL Coder では、同じ長さの複数の遅延を 1 つの遅延にマージしてから、単一の RAM にマップすることもできます。この最適化により以下の利点が得られます。

  • 単一 RAM 上の占有領域の増加

  • 同一 HDL コードの重複を最小にする、アドレス生成ロジックの共有

  • "個別の" 遅延がしきい値を満たさない場合の遅延の RAM へのマッピング

以下の規則により複数の遅延を 1 つの遅延にマージできるかどうかが制御されます。

  • 遅延は以下を満たさなければなりません。

    • サブシステムの階層で同じレベルにある。

    • 同一のコンパイルされたサンプル時間を使用する。

    • UseRAMon に設定されているか、ストリームまたはリソース共有によって生成される。

    • ResetType の設定が同じで、none 以外に設定されている。

  • マージされた遅延の合計語長が 128 ビットを超えない。

  • マージされた遅延の RAMSizeRAMMappingThreshold の値以上である。RAMSize は、DelayLength * WordLength * VectorLength * Complexity の積です。

複数の遅延をブロック RAM にマップする例

このモデルの RAMMappingThreshold100 ビットです。

Delay および Delay1 ブロックは以下の条件を満たすことで、マージされ、生成された HDL コード内のデュアル ポート RAM にマッピングされます。

  • 両方の遅延ブロックが以下のとおりである。

    • 階層内で同じレベルにある。

    • 同一のコンパイルされたサンプル時間を使用する。

    • [HDL ブロック プロパティ] ダイアログ ボックスの [UseRAM][on] に設定されている。

    • [ResetType] の設定が同じで、[default] になっている。

  • マージされた遅延の総語長が 128 ビット制限より少ない 28 ビットである。

  • マージされた遅延の RAMSize が、マッピングのしきい値 100 ビットを超える 112 ビット (遅延 4 つ * 語長 28 ビット) である。

このモデルの HDL コードを生成するときに、HDL Coder は RAM マッピングを指定する追加のファイルを生成します。HDL Coder はこれらのファイルを他の生成された HDL ファイルと同じソースの場所、たとえば hdlsrc フォルダーに保存します。

ストリーミングおよび分散型パイプライン方式の影響

Delay ブロックの UseRAMoff の場合、HDL Coder は既定で遅延とシフト レジスタをマップします。ただし、以下の条件下において、本製品は UseRAM の設定を on に変更し、遅延を RAM にマッピングすることを試みます。

  • Delay ブロックをもつサブシステムのストリームが "有効" になっている。

  • Delay ブロックをもつサブシステムの分散型パイプライン方式が "無効" になっている。

Delay ブロックをもつサブシステムに対して分散型パイプライン方式が "有効" になっているとします。

  • UseRAMoff の場合、Delay ブロックはリタイミングに使用されます。

  • UseRAMon の場合、Delay ブロックはリタイミングに使用されません。HDL Coder では、RAM マッピング対象としてマークされた遅延は分割されません。

    2 つの Delay ブロック、3 つの Constant ブロック、3 つの Product ブロックをもつ次のサブシステムについて考えてみます。

    右側の Delay ブロックの UseRAMon の場合、その遅延はリタイミングに使用されません。

次の表は、HDL Coder でどのような場合に遅延がシフト レジスタではなく RAM にマップされるかをまとめています。

Delay ブロックの UseRAM の設定Delay ブロックをもつサブシステムの最適化が有効
分散型パイプライン方式のみストリーミングのみ分散型パイプライン方式とストリーミングの両方
オンはいはいはい
オフいいえはい。シフト レジスタの代わりに RAM にマッピングすることで面積効率の高い設計が提供されるため。いいえ

VariablesToPipeline

警告

VariablesToPipeline は推奨されません。代わりに coder.hdl.pipeline を使用してください。

VariablesToPipeline パラメーターを使用すると、1 つ以上の MATLAB 変数の出力にパイプライン レジスタを挿入できます。変数のリストをスペースで区切った文字ベクトルとして指定します。

MATLAB 式のパイプラインも参照してください。