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 ブロック プロパティ] ダイアログ ボックスからサブシステムの適応パイプラインを設定するには、次の手順に従います。
サブシステムを右クリックして [HDL コード][HDL ブロック プロパティ] を選択します。
[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 ブロックを分散または吸収するのかどうかを設定するには、以下のようにします。
サブシステムを右クリックして [HDL コード][HDL ブロック プロパティ] を選択します。
[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 ブロック プロパティ] ダイアログ ボックスを使用してサブシステムの遅延の均衡化を設定するには、以下のようにします。
サブシステムを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[BalanceDelays] の [inherit]、[on] または [off] を選択します。
コマンド ラインからサブシステムの遅延の均衡化を設定するには、hdlset_param
を使用します。たとえば、サブシステム my_dut
の遅延の均衡化を無効にするには、次のようにします。
hdlset_param('my_dut', 'BalanceDelays', 'off')
hdlset_param
も参照してください。ClockRatePipelining
ClockRatePipelining
サブシステム パラメーターにより、モデル内のサブシステムのクロックレート パイプラインを設定できます。
クロックレート パイプラインの設定 | 説明 |
---|---|
'inherit' (既定の設定) | 親サブシステムのクロックレート パイプライン設定を使用します。このサブシステムが最上位のサブシステムの場合、モデルのクロックレート パイプライン設定を使用します。 |
'on' | このサブシステムにクロックレート パイプラインを挿入します。 |
'off' | 親サブシステムでクロックレート パイプラインが有効になっている場合でも、このサブシステムにクロックレート パイプラインを挿入しません。 |
モデル内のサブシステムのクロックレート パイプラインを無効にするには、そのサブシステムの ClockRatePipelining
を off
に設定します。
モデル レベルのクロックレート パイプラインを設定する方法については、Clock-rate pipeliningを参照してください。
サブシステムのクロックレート パイプラインの設定
[HDL ブロック プロパティ] ダイアログ ボックスを使用してサブシステムのクロックレート パイプラインを設定するには、以下のようにします。
サブシステムを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 を設定するには、次のようにします。
Multiport Switch ブロックを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 の最適化が自動的に選択されます。必要な加算器の数に基づいて、最も面積効率の高い実装を得られる最適化が選択されます。 |
ConstMultiplierOptimization
パラメーターは、次のブロックで使用できます。
Gain
Stateflow® Chart
Truth Table
MATLAB Function
MATLAB System
ConstrainedOutputPipeline
ConstrainedOutputPipeline
パラメーターを使用して、ブロック出力に配置するレジスタの非負の個数を指定します。
HDL Coder は、制約を満たすために設計内の既存の遅延を移動します。新しいレジスタは追加されません。制約を満たすにはレジスタが不足している場合は、出力レジスタの必要な数と実際の数の差がレポートされます。設計に遅延を追加するには、入力パイプラインまたは出力パイプラインを使用します。
制約付き出力パイプラインで指定したレジスタは、分散型パイプライン方式では再分布されません。
制約付き出力パイプラインの指定方法
GUI を使用してブロックの制約付き出力パイプラインを指定するには、以下のようにします。
ブロックを右クリックし、[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 を使用して配置されたサブシステム内のパイプラインを分布します。 |
ヒント
パイプライン レジスタを挿入した場合、最初は出力データが無効の状態になることがあります。初期の無効なサンプルによってテスト ベンチでエラーが発生しないように、これらのサンプルに対して出力チェックを無効にします。詳細については、出力データのチェックを無視 (サンプル数) を参照してください。
モデル内のサブシステムの分散型パイプラインを有効にするには、そのサブシステムの DistributedPipelining
を on
に設定します。
モデル レベルの分散型パイプラインの設定方法については、Distributed pipeliningを参照してください。
サブシステムの分散型パイプラインの設定
[HDL ブロック プロパティ] ダイアログ ボックスを使用してサブシステムの分散型パイプラインを設定するには、以下のようにします。
サブシステムを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 を使用します。 メモ
|
'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
の設定を親サブシステムまで伝播します。
フラットにしたサブシステムに Gain、Product または Product of Elements ブロックが含まれる場合、それらがもつ既定以外の DSPStyle
設定は維持され、既定の DSPStyle
設定は、フラットにしたサブシステムの DSPStyle
設定に置換されます。
生成されたコード内の合成属性
合成属性の生成コードは次に依存します。
ターゲット言語
DSPStyle
値SynthesisTool
値
次の表は、生成されたコードにおける合成属性の例を示しています。
DSPStyle の値 | TargetLanguage の値 | SynthesisTool の値 | |
---|---|---|---|
'Altera Quartus II' | 'Xilinx ISE' 'Xilinx Vivado' | ||
'none' | 'Verilog' |
|
|
'VHDL' |
|
| |
'on' | 'Verilog' |
|
|
'VHDL' |
|
| |
'off' | 'Verilog' |
|
|
'VHDL' |
|
|
合成属性の指定の要件
SynthesisTool
プロパティを使用して、合成ツールを指定しなければなりません。
合成属性の指定方法
[HDL ブロック プロパティ] ダイアログ ボックスを使用して合成属性を指定するには、次の手順に従います。
ブロックを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 |
関数のインスタンス化可能なコードの生成方法
[HDL ブロック プロパティ] ダイアログ ボックスを使用して [InstantiateFunctions] パラメーターを設定するには、以下のようにします。
MATLAB Function ブロックを右クリックします。
[HDL コード] 、 [HDL ブロック プロパティ] を選択します。
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 |
'on' | カスケードの段ごとに VHDL |
LoopOptimization
LoopOptimization
を使用すると、MATLAB Function ブロックから生成されたコード内でループのストリームまたは展開が可能になります。ループ ストリーミングは面積を最適化し、ループ展開は速度を最適化します。
メモ
MATLAB Function ブロックの MATLAB Datapath
アーキテクチャを指定する場合、実行できるのはループの展開のみです。ループのストリームを実行するために、[StreamingFactor] を指定することでストリーミングの最適化を使用できます。MATLAB Datapath アーキテクチャを使用した、MATLAB Function ブロック境界を越えた HDL 最適化を参照してください。
LoopOptimization の設定 | 説明 |
---|---|
'none' (既定の設定) | ループを最適化しません。 |
'Unrolling' | ループを展開します。 |
'Streaming' | ループをストリームします。 |
ループ用の MATLAB Function ブロックの最適化方法
[HDL ブロック プロパティ] ダイアログ ボックスを使用してループの最適化を選択するには、次の手順に従います。
MATLAB Function ブロックを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 の設定 | マッピングの動作 |
---|---|
| 永続配列は生成された HDL コード内でレジスタにマッピングされます。 |
| 永続配列変数は 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 のプライベート プロパティの値が外部入力に依存している。
たとえば、次のコードでは
bigarray
がu
に依存していないため、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 にマッピングする] の動作が使用されます。 |
| ブロックのルックアップ テーブル (LUT) は FPGA のロジック スライスにマッピングされます。 |
| ブロックのルックアップ テーブル (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 コード生成]、[グローバル設定]、[一般] タブの [パイプラインの接尾辞] オプションを使用します。代わりに、makehdl
で PipelinePostfix
プロパティを使用することもできます。例については、パイプラインの接尾辞を参照してください。
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 値 |
Quartus | ramstyle |
|
Xilinx | ram_style |
|
Microchip | syn_ramstyle |
|
この設定の値を指定すると、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
を設定するには、次を行います。
RAM ブロックを右クリックします。
[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 のサイズは、4kb
、8kb
、16kb
および 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 を使用してブロックのリセット ロジックの生成を抑制するには、次の手順に従います。
ブロックを右クリックし、[HDL コード]、[HDL ブロック プロパティ] を選択します。
[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 の設定 | マッピングの動作 |
---|---|
| 遅延は、一例を除いて、生成された HDL コード内のシフト レジスタにマッピングされます。詳細は、ストリーミングおよび分散型パイプライン方式の影響を参照してください。 |
| 以下の条件が真の場合、遅延はデュアル ポート 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 つの遅延にマージできるかどうかが制御されます。
遅延は以下を満たさなければなりません。
サブシステムの階層で同じレベルにある。
同一のコンパイルされたサンプル時間を使用する。
UseRAM
がon
に設定されているか、ストリームまたはリソース共有によって生成される。ResetType
の設定が同じで、none
以外に設定されている。
マージされた遅延の合計語長が 128 ビットを超えない。
マージされた遅延の
RAMSize
がRAMMappingThreshold
の値以上である。RAMSize
は、DelayLength * WordLength * VectorLength * Complexity
の積です。
複数の遅延をブロック RAM にマップする例
このモデルの RAMMappingThreshold
は 100
ビットです。
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 ブロックの UseRAM
が off
の場合、HDL Coder は既定で遅延とシフト レジスタをマップします。ただし、以下の条件下において、本製品は UseRAM
の設定を on
に変更し、遅延を RAM にマッピングすることを試みます。
Delay ブロックをもつサブシステムのストリームが "有効" になっている。
Delay ブロックをもつサブシステムの分散型パイプライン方式が "無効" になっている。
Delay ブロックをもつサブシステムに対して分散型パイプライン方式が "有効" になっているとします。
UseRAM
がoff
の場合、Delay ブロックはリタイミングに使用されます。UseRAM
がon
の場合、Delay ブロックはリタイミングに使用されません。HDL Coder では、RAM マッピング対象としてマークされた遅延は分割されません。2 つの Delay ブロック、3 つの Constant ブロック、3 つの Product ブロックをもつ次のサブシステムについて考えてみます。
右側の Delay ブロックの
UseRAM
がon
の場合、その遅延はリタイミングに使用されません。
次の表は、HDL Coder でどのような場合に遅延がシフト レジスタではなく RAM にマップされるかをまとめています。
Delay ブロックの UseRAM の設定 | Delay ブロックをもつサブシステムの最適化が有効 | ||
---|---|---|---|
分散型パイプライン方式のみ | ストリーミングのみ | 分散型パイプライン方式とストリーミングの両方 | |
オン | はい | はい | はい |
オフ | いいえ | はい。シフト レジスタの代わりに RAM にマッピングすることで面積効率の高い設計が提供されるため。 | いいえ |
VariablesToPipeline
警告
VariablesToPipeline
は推奨されません。代わりに coder.hdl.pipeline
を使用してください。
VariablesToPipeline パラメーターを使用すると、1 つ以上の MATLAB 変数の出力にパイプライン レジスタを挿入できます。変数のリストをスペースで区切った文字ベクトルとして指定します。
MATLAB 式のパイプラインも参照してください。