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' に設定します。

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

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

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

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

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

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

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

BalanceDelays

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

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

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

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

モデル内の任意のサブシステムの遅延の均衡化を無効にするには、モデルレベルの遅延の均衡化パラメーター BalanceDelays'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'

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

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

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

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

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

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

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

  3. [ClockRatePipelining] で、[inherit][on][off] のいずれかを選択します。

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

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

CodingStyle

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

CodingStyle の設定説明
'ifelse_stmt' (既定値)Verilog コードで if-else ステートメントを生成するか、Multiport Switch ブロックの VHDL コードで when-else ステートメントを生成します。
'case_stmt'Verilog コードで case ステートメントを生成するか、Multiport Switch ブロックの 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 および OutputPipeline パラメーターが与える影響の説明です。

DistributedPipeliningOutputPipeline、nStages結果
'off' (既定の設定)指定なし (nStages の既定値は 0)パイプライン レジスタを挿入しません。
nStages > 0本製品はサブシステム、MATLAB Function ブロックまたは Stateflow チャートの出力で nStages 個の出力レジスタを挿入します。
'on' 指定なし (nStages の既定値は 0)パイプライン レジスタを挿入しません。
DistributedPipelining は無効になります。
nStages > 0本製品はクリティカル パスの解析に基づいて、サブシステム、MATLAB Function ブロックまたは Stateflow チャート内に nStages 個のレジスタを分布します。

分散型パイプライン方式で生成されたコードをさらに最適化するには、可能な場合は RTL の合成中にリタイミングを実行します。

ヒント

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

参考

DotProductStrategy

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

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

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

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

メモ

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

'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' に設定されていなければなりません。詳細については、マスクされたサブシステムからのパラメーター化された HDL コードの生成を参照してください。

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

[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 モードで使用する場合

  • モデル参照の実装。

  • トリガー信号をクロックとして使用が有効な場合の Triggered Subsystem

  • 次のいずれかを含むマスク サブシステム

    • バス。

    • 列挙データ型。

    • Lookup Table ブロック: 1-D Lookup Table2-D Lookup TableCosine HDL OptimizedDirect LookupTable (n-D)PrelookupSine HDL Optimizedn-D Lookup Table

    • MATLAB System ブロック。

    • Stateflow ブロック: ChartState Transition TableSequence Viewer

    • パススルーおよび NOP 実装を使用するブロック。パススルー、No HDL、カスケード実装を参照してください。

メモ

このオプションはコード生成の前にサブシステムの境界を除去します。完全にフラットな階層をもつ HDL コードが生成されるとは限りません。

InputPipeline

InputPipeline により、選択されたブロックに対して入力パイプラインをもつ実装を指定できます。パラメーター値は、生成されたコードの入力パイプライン ステージ数 (パイプラインの深さ) を指定します。

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

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

メモ

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

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

InstantiateFunctions

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

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

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

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

'on'

関数ごとに VHDL entity または Verilog 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

NCO HDL Optimized ブロックはこのパラメーターを無視します。

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; 

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

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

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

    • Complexity は、基本データ型が複素数である配列の場合 2、それ以外では 1 です。

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

RAMMappingThreshold

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

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

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

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

MapToRAM

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

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

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

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

off

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

on

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

OutputPipeline

OutputPipeline により、選択されたブロックに対して出力パイプラインをもつ実装を指定できます。パラメーター値は、生成されたコードの出力パイプライン ステージ数 (パイプラインの深さ) を指定します。

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

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

メモ

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

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

MATLAB Function ブロックの分散型パイプライン挿入も参照してください。

RAMDirective

RAMDirective により、Simulink モデルの RAM ブロックを分散 RAM、ブロック RAM または UltraRAM メモリにマッピングするかどうかを指定できます。この設定の値を選択すると、HDL Coder は HDL コードの ramstyle 属性を生成します。この属性は、設計の RAM ブロックを推定する場合に合成ツールを使用する RAM メモリ単位のタイプを指定します。

RAMDirective 値説明
none (既定の設定)

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

distributed

モデルの RAM ブロックを分散 RAM にマッピングするために HDL 属性を生成します。分散 RAM は LUT で構築されます。これらの RAM は高速ですが、FPGA の多数の LUT スライスを占有します。

次の VHDL コードは、ramstyle 属性が distributed に設定されていることを示します。

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

次の Verilog コードは、ramstyle 属性が distributed に設定されていることを示します。

(* ram_style = "distributed" *)

block

モデルの RAM ブロックをブロック RAM にマッピングするために HDL 属性を生成します。ブロック RAM は、FPGA デバイス上の専用メモリ単位です。使用可能なブロック RAM の数は、HDL コードの展開先である FPGA デバイスによって異なります。ブロック RAM のサイズは、4kb8kb16kb および 32kb です。

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

  • 合成ツールを指定する。ブロック RAM リソースを含む Xilinx デバイスをターゲットとしなければなりません。

    メモ

    ターゲット デバイスにブロック RAM が含まれない場合、合成ツールはこの属性を無視し、RAM を分散 RAM または LUT スライスとして推定する場合があります。

  • ターゲット周波数に 0 より大きい値を入力する。

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

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

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

(* ram_style = "block" *)

ultra

モデルの RAM ブロックを UltraRAM メモリにマッピングするために HDL 属性を生成します。UltraRAM は、ターゲット FPGA 上の専用メモリ ブロックです。使用可能な UltraRAM メモリ単位の数は、HDL コードの展開先である FPGA デバイスによって異なります。UltraRAM 単位はブロック RAM より大きくなければならず、500Mb と同じ大きさのサイズを指定できます。

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

  • 合成ツールとして Xilinx Vivado® を指定する。Virtex® UltraScale+™ などの UltraRAM リソースを含む Xilinx デバイスをターゲットにしなければなりません。

    メモ

    ターゲット デバイスに UltraRAM メモリが含まれない場合、合成ツールはこの属性を無視し、RAM を分散 RAM または LUT スライスとして推定する場合があります。RAM ブロックをブロック RAM に代わりにマッピングするには、[RAMDirective]block に設定します。

  • ターゲット周波数に 0 より大きい値を入力する。

  • 設計の RAM ブロックは、固定読み取り動作に従わなければならず、単一のクロック インターフェイスがなければなりません。[HDL RAMs] ライブラリでは、Dual Port RAM ブロックと Dual Rate Dual Port RAM ブロックを除く、その他すべての RAM ブロックを UltraRAM にマッピングできます。

  • RAM ブロックを指定された初期値にすることはできません。Single Port RAM System などの RAM System ブロックを使用する場合、[Specify the RAM initial value]0 に指定しなければなりません。デバイスのリセット時に、UltraRAM 内のすべてのメモリ位置はゼロに初期化されます。

次の VHDL コードは、ramstyle 属性が ultra に設定されていることを示します。

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

次の Verilog コードは、ramstyle 属性が ultra に設定されていることを示します。

(* ram_style = "ultra" *)

RAM ブロックの RAMDirective の設定

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

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

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

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

  3. [RAMDirective] で、[none][distributed][block] または [ultra] を選択します。

    メモ

    ブロックに固定読み取り動作がないため、Dual Port RAM ブロックには、ultraRAMDirective として指定できません。

コマンド ラインでブロックに対する RAMDirective を設定するには、hdlset_param を使用します。たとえば、サブシステム内の Single Port RAM ブロックの RAMDirectiveultra に設定するには、my_dut は次のようになります。

hdlset_param('my_dut/Single Port RAM', 'RAMDirective', 'ultra');
hdlset_paramも参照してください。

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 のモデル レベルのパラメーターを使用します。詳細については、リセット設定とパラメーターの「リセット タイプ」を参照してください。

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 であり、パラレル データ パスがそのまま実装されます。ストリーミングも参照してください。

UsePipelines

このモードは、Divide モードと Reciprocal モードの Product ブロックで使用できます。ブロックの HDL アーキテクチャを ShiftAdd に設定すると、このプロパティが使用できるようになります。このアーキテクチャは、商を計算するために複数のシフト演算および加算演算を実行する、非回復除算アルゴリズムを使用します。ShiftAdd アーキテクチャでは、ニュートン・ラフソンの近似法と比較して精度が向上しています。

ShiftAdd アーキテクチャを使用する場合、UsePipelines 実装パラメーターを使用して、非回復除算のパイプライン化実装または非パイプライン化実装を使用するかどうかを指定できます。

UsePipelines 設定マッピングの動作

on (既定の設定)

Divide ブロックと Reciprocal ブロックの非回復シフトおよび加算演算のパイプライン化実装を使用します。この設定により、さらなる遅延が設計に追加されますが、ターゲット FPGA デバイスの最大クロック周波数がさらに高くなります。挿入されるパイプラインの数は、アルゴリズムが商または逆数の計算に必要とする反復回数に一致します。

off

Divide ブロックと Reciprocal ブロックの非回復シフト演算および加算演算の非パイプライン化実装を使用します。この設定により、遅延が設計に追加されることはありません。除算および逆数はリソース集約的な演算であるため、ターゲット FPGA でクロック周波数をさらに高くするには [UsePipelines]on に設定します。

Divide ブロックと Reciprocal ブロックの UsePipelines の設定

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

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

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

  3. [UsePipelines] で、[on] または [off] を選択します。

コマンド ラインでブロックに対する UsePipelines を設定するには、hdlset_param を使用します。たとえば、サブシステム内の Divide ブロックの UsePipelines をオフにするには、my_dut は次のようになります。

hdlset_param('my_dut/divide', 'UsePipelines', 'off');
hdlset_paramも参照してください。

UseRAM

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

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

off

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

on

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

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

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

  • [遅延の長さ] が 4 より大きい。

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

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

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

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

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

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

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

    • ComplexLength は、複素信号では 2、それ以外では 1 です。

いずれかの条件が偽の場合、遅延は他の遅延とマージして単一 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 * ComplexLength の積です。

    • DelayLength は、遅延の合計数です。

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

    • VectorLength は、1 つのベクトル遅延がもつ要素数です。VectorLength は、スカラー遅延の場合は 1 です。

    • ComplexLength は、複素遅延では 2、それ以外では 1 です。

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

次のモデルの RAMMappingThreshold は 100 ビットです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VariablesToPipeline

警告

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

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

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