Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

遅延の均衡化のスコープの制御

この例では、設計全体の遅延は均衡化せずに、設計の特定の部分の遅延を均衡化する方法を示します。

BalanceDelays HDL ブロック プロパティを使用すると、プログラムにより遅延を均衡化し、HDL Coder™ によって特定のブロック実装や最適化に対して導入される追加の遅延を均衡化できます。モデル内の個々のサブシステムまたは特定のブロックで、このプロパティを有効または無効にできます。たとえば、データ パスとコントロール パスを含む設計では、データの同期が必要なパスなど、設計のデータ パスにのみ遅延の均衡化を適用できます。ブロックまたはサブシステム レベルで BalanceDelays を使用して、HDL Coder が遅延を均衡化する方法と場所を制御できます。hdlcoder_localdelaybalancing.slx では、ユーザー定義の安定したコントロール パスに対する遅延の均衡化を無効にする方法を示します。

遅延の均衡化をデータ パスに制約

モデル例 hdlcoder_localdelaybalancing.slx には、テスト対象デバイス (DUT) サブシステム hdlcoder_localdelaybalancing/Subsystem の下に 2 つのサブシステム param_controlsymmetric_fir があり、それぞれ制御ロジックとデータ パスが含まれます。

open_system('hdlcoder_localdelaybalancing');
open_system('hdlcoder_localdelaybalancing/Subsystem');

タイミングの結果を最適化するために、各サブシステムに 1 つの出力パイプライン レジスタをもつブロックが 1 つあります。

hdldispblkparams('hdlcoder_localdelaybalancing/Subsystem/param_control/And');
hdldispblkparams('hdlcoder_localdelaybalancing/Subsystem/symmetric_fir/Add');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
HDL Block Parameters ('hdlcoder_localdelaybalancing/Subsystem/param_control/And')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Implementation

	Architecture : default

Implementation Parameters

	OutputPipeline : 1


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
HDL Block Parameters ('hdlcoder_localdelaybalancing/Subsystem/symmetric_fir/Add')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Implementation

	Architecture : Linear

Implementation Parameters

	OutputPipeline : 1

検証モデルの生成を有効にし、関数 makehdl を使用して HDL コードを生成します。

hdlset_param('hdlcoder_localdelaybalancing', 'GenerateValidationModel', 'on');
makehdl('hdlcoder_localdelaybalancing/Subsystem');
### Generating HDL for 'hdlcoder_localdelaybalancing/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_localdelaybalancing', { 'HDL Code Generation' } )">hdlcoder_localdelaybalancing</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_localdelaybalancing'.
### Begin compilation of the model 'hdlcoder_localdelaybalancing'...
### Working on the model 'hdlcoder_localdelaybalancing'...
### The code generation and optimization options you have chosen have introduced additional pipeline delays.
### The delay balancing feature has automatically inserted matching delays for compensation.
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 1 cycles.
### Output port 2: 1 cycles.
### Output port 3: 1 cycles.
### Working on... <a href="matlab:configset.internal.open('hdlcoder_localdelaybalancing', 'GenerateModel')">GenerateModel</a>
### Begin model generation 'gm_hdlcoder_localdelaybalancing' ....
### Rendering DUT with optimization related changes (IO, Area, Pipelining)...
### Model generation complete.
### Delay absorption obstacles can be diagnosed by running this script: <a href="matlab:run('hdlsrc/hdlcoder_localdelaybalancing/highlightDelayAbsorption')">hdlsrc/hdlcoder_localdelaybalancing/highlightDelayAbsorption.m</a>
### To clear highlighting, click the following MATLAB script: <a href="matlab:run('hdlsrc/hdlcoder_localdelaybalancing/clearhighlighting.m')">hdlsrc/hdlcoder_localdelaybalancing/clearhighlighting.m</a>
### Generating new validation model: <a href="matlab:open_system('hdlsrc/hdlcoder_localdelaybalancing/gm_hdlcoder_localdelaybalancing_vnl')">gm_hdlcoder_localdelaybalancing_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_localdelaybalancing'.
### Working on hdlcoder_localdelaybalancing/Subsystem/param_control/params as hdlsrc/hdlcoder_localdelaybalancing/params.vhd.
### Working on hdlcoder_localdelaybalancing/Subsystem/param_control as hdlsrc/hdlcoder_localdelaybalancing/param_control.vhd.
### Working on hdlcoder_localdelaybalancing/Subsystem/symmetric_fir as hdlsrc/hdlcoder_localdelaybalancing/symmetric_fir.vhd.
### Working on hdlcoder_localdelaybalancing/Subsystem as hdlsrc/hdlcoder_localdelaybalancing/Subsystem.vhd.
### Code Generation for 'hdlcoder_localdelaybalancing' completed.
### Creating HDL Code Generation Check Report file:///tmp/Bdoc23b_2355056_2699742/tp0b936db3/hdlcoder-ex13756842/hdlsrc/hdlcoder_localdelaybalancing/Subsystem_report.html
### HDL check for 'hdlcoder_localdelaybalancing' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.

検証モデルを読み込んで更新し、生成されたモデルのレイアウトを再配置して、param_control サブシステムに対する検証モデルを開きます。

load_system('gm_hdlcoder_localdelaybalancing_vnl');
set_param('gm_hdlcoder_localdelaybalancing_vnl', 'SimulationCommand', 'update');
arrangeLayout('gm_hdlcoder_localdelaybalancing_vnl/Subsystem/param_control')
open_system('gm_hdlcoder_localdelaybalancing_vnl/Subsystem/param_control');

検証モデルに示すように、遅延の均衡化は既定でグローバルに有効になっており、コントロール パスとデータ パスの両方に一致する遅延を挿入します。検証モデルの詳細については、生成されたモデルと検証モデルを参照してください。

この例では、データの同期が必要なのは、データ パスである symmetric_fir だけです。param_control サブシステムへの入力 u1 から u4 は、FIR フィルターへの係数である定数入力です。これらの係数の DUT サブシステムを通る入力パスは安定しており、互いに同期したり、処理されたデータと同期したりする必要はありません。その結果、制御ロジックへの定数入力をもつ入力端子の遅延の均衡化を無効にして、ハードウェア リソースに保存することができます。これを達成するために、DUT サブシステムの Inport ブロック u1 から u4 までの HDL ブロック プロパティ BalanceDelaysoff に設定します。安定したパスは DUT サブシステムの下位階層まで伝播するため、param_control または symmetric_fir サブシステム内の下位レベルの Inport ブロックに対してこのプロパティを無効にする必要はありません。

hdlset_param('hdlcoder_localdelaybalancing/Subsystem/u1', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing/Subsystem/u2', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing/Subsystem/u3', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing/Subsystem/u4', 'BalanceDelays', 'off');

検証モデルを閉じ、関数 makehdl を使用して HDL コードを生成し、param_control サブシステムに対する新しい検証モデルを開きます。

bdclose('gm_hdlcoder_localdelaybalancing_vnl');
hdlset_param('hdlcoder_localdelaybalancing', 'ValidationModelNameSuffix', '_vnl_DBoff')
makehdl('hdlcoder_localdelaybalancing/Subsystem');
load_system('gm_hdlcoder_localdelaybalancing_vnl_DBoff');
set_param('gm_hdlcoder_localdelaybalancing_vnl_DBoff', 'SimulationCommand', 'update');
Simulink.BlockDiagram.expandSubsystem('gm_hdlcoder_localdelaybalancing_vnl_DBoff/Subsystem/param_control/params');
open_system('gm_hdlcoder_localdelaybalancing_vnl_DBoff/Subsystem/param_control');
### Generating HDL for 'hdlcoder_localdelaybalancing/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_localdelaybalancing', { 'HDL Code Generation' } )">hdlcoder_localdelaybalancing</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_localdelaybalancing'.
### Begin compilation of the model 'hdlcoder_localdelaybalancing'...
### Working on the model 'hdlcoder_localdelaybalancing'...
### The code generation and optimization options you have chosen have introduced additional pipeline delays.
### The delay balancing feature has automatically inserted matching delays for compensation.
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 1 cycles.
### Output port 2: 1 cycles.
### Output port 3: 1 cycles.
### Working on... <a href="matlab:configset.internal.open('hdlcoder_localdelaybalancing', 'GenerateModel')">GenerateModel</a>
### Begin model generation 'gm_hdlcoder_localdelaybalancing' ....
### Rendering DUT with optimization related changes (IO, Area, Pipelining)...
### Model generation complete.
### Delay absorption obstacles can be diagnosed by running this script: <a href="matlab:run('hdlsrc/hdlcoder_localdelaybalancing/highlightDelayAbsorption')">hdlsrc/hdlcoder_localdelaybalancing/highlightDelayAbsorption.m</a>
### To clear highlighting, click the following MATLAB script: <a href="matlab:run('hdlsrc/hdlcoder_localdelaybalancing/clearhighlighting.m')">hdlsrc/hdlcoder_localdelaybalancing/clearhighlighting.m</a>
### Generating new validation model: <a href="matlab:open_system('hdlsrc/hdlcoder_localdelaybalancing/gm_hdlcoder_localdelaybalancing_vnl_DBoff')">gm_hdlcoder_localdelaybalancing_vnl_DBoff</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_localdelaybalancing'.
### Working on hdlcoder_localdelaybalancing/Subsystem/param_control/params as hdlsrc/hdlcoder_localdelaybalancing/params.vhd.
### Working on hdlcoder_localdelaybalancing/Subsystem/param_control as hdlsrc/hdlcoder_localdelaybalancing/param_control.vhd.
### Working on hdlcoder_localdelaybalancing/Subsystem/symmetric_fir as hdlsrc/hdlcoder_localdelaybalancing/symmetric_fir.vhd.
### Working on hdlcoder_localdelaybalancing/Subsystem as hdlsrc/hdlcoder_localdelaybalancing/Subsystem.vhd.
### Code Generation for 'hdlcoder_localdelaybalancing' completed.
### Creating HDL Code Generation Check Report file:///tmp/Bdoc23b_2355056_2699742/tp0b936db3/hdlcoder-ex13756842/hdlsrc/hdlcoder_localdelaybalancing/Subsystem_report.html
### HDL check for 'hdlcoder_localdelaybalancing' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.

これで、遅延の均衡化がデータ パスのサブシステムでのみアクティブになり、生成されたモデルとコードのコントロール パスのサブシステムには遅延が含まれなくなります。

関連する例

詳細