Управляйте осциллографом балансировки задержки

В этом примере показано, как сбалансировать задержки определенных частей проекта, не балансируя задержки на целом проекте.

Введение

Можно использовать опцию 'BalanceDelays', чтобы сбалансировать дополнительные задержки, введенные HDL Coder™ для определенных реализаций блока и оптимизации. Эта опция уровня модели управляет задержкой, балансирующейся для целой модели. Однако для определенных проектов, можно хотеть сбалансировать задержки только некоторых частей проекта. Например, в проекте, содержащем информационный канал и путь к управлению, балансировка задержки должна быть применена только на информационном канале проекта, i.e., пути, требующие синхронизации данных. В этом примере показано, как использовать уровень подсистемы, опция 'BalanceDelays' обеспечивает мелкомодульное управление о том, как HDL Coder балансирует задержки отдельных подсистем.

Мы используем два примера, чтобы продемонстрировать использование этой функции уровня подсистемы:

  1. hdlcoder_localdelaybalancing.slx показывает, как отключить задержку, балансирующуюся на пользовательских путях к управлению.

  2. hdlcoder_localdelaybalancing_sharing.slx показывает, как пользователь может применить оптимизацию HDL как разделение ресурсов в присутствии сложных путей к управлению, которые требуют тщательно ограниченной балансировки задержки.

Пример 1: Ограничение Задержки, Балансирующейся к информационному каналу

Модель в качестве примера, "hdlcoder_localdelaybalancing.slx", имеет две подсистемы под hdlcoder_localdelaybalancing/Subsystem: param_control и symmetric_fir, содержа управляющую логику и информационный канал, соответственно.

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

Каждая подсистема имеет один блок, который имеет тот выходной конвейерный регистр, чтобы достигнуть хороших результатов синхронизации.

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

Когда глобальная переменная, уровень модели, опция 'BalanceDelays' установлена в 'on', затем задерживается, балансировка вставляет соответствие с задержками на обоих путь к управлению, а также информационный канал, как показано в модели валидации.

hdlset_param('hdlcoder_localdelaybalancing', 'BalanceDelays', 'on');
hdlset_param('hdlcoder_localdelaybalancing', 'GenerateValidationModel', 'on');
makehdl('hdlcoder_localdelaybalancing/Subsystem');
load_system('gm_hdlcoder_localdelaybalancing_vnl');
set_param('gm_hdlcoder_localdelaybalancing_vnl', 'SimulationCommand', 'update');
open_system('gm_hdlcoder_localdelaybalancing_vnl/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.
### Starting HDL check.
### 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 0: 1 cycles.
### Output port 1: 1 cycles.
### Output port 2: 1 cycles.
### Generating new validation model: <a href="matlab:open_system('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.
### Creating HDL Code Generation Check Report file:///tmp/BR2020bd_1444674_32127/publish_examples3/tpeebd210a/hdlsrc/hdlcoder_localdelaybalancing/Subsystem_report.html
### HDL check for 'hdlcoder_localdelaybalancing' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

В этом проекте в качестве примера только информационный канал, symmetric_fir, требует синхронизации данных. Выходные параметры от param_control являются коэффициентами к КИХ-фильтру и не должны синхронизироваться друг с другом или с обработанными данными. Превращение балансировки с задержкой выключения на управляющей логике поэтому сохраняет ресурсы. Для того, чтобы достигнуть этого, уровень модели, опцией 'BalanceDelays' должен быть 'off' и уровень подсистемы, опции 'BalanceDelays' должны быть установлены соответственно на пути к управлению и информационном канале.

hdlset_param('hdlcoder_localdelaybalancing', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing/Subsystem/param_control', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing/Subsystem/symmetric_fir', 'BalanceDelays', 'on');

Теперь, когда HDL-код сгенерирован, балансировка задержки только активна в подсистеме информационного канала и не вставляет задержек подсистемы пути к управлению.

bdclose('gm_hdlcoder_localdelaybalancing_vnl');
makehdl('hdlcoder_localdelaybalancing/Subsystem');
load_system('gm_hdlcoder_localdelaybalancing_vnl');
set_param('gm_hdlcoder_localdelaybalancing_vnl', 'SimulationCommand', 'update');
open_system('gm_hdlcoder_localdelaybalancing_vnl/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.
### Starting HDL check.
### Generating new validation model: <a href="matlab:open_system('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.
### Creating HDL Code Generation Check Report file:///tmp/BR2020bd_1444674_32127/publish_examples3/tpeebd210a/hdlsrc/hdlcoder_localdelaybalancing/Subsystem_report.html
### HDL check for 'hdlcoder_localdelaybalancing' complete with 0 errors, 2 warnings, and 0 messages.
### HDL code generation complete.

Заметьте, что симуляция модели валидации теперь показывает несоответствия, потому что модель валидации не компенсирует задержку, вставленную оптимизацией, или блокирует реализации.

Пример 2: локализованная балансировка задержки и разделение ресурсов

Оптимизация разделения ресурсов сохраняет использование области в итоговой реализации HDL, за счет представления цикла задержки для каждой группы совместного использования. Эта дополнительная задержка обычно балансируется во время балансировки задержки так, чтобы численные данные и функциональность алгоритма были сохранены. Одно из ограничений разделения ресурсов - то, что оно не может быть применено на подсистему в обратной связи. Таким образом, если разделение ресурсов будет задано для подсистемы в цикле, то оптимизация перестанет работать. Можно наблюдать это в hdlcoder_localdelaybalancing_sharing.slx, где hdlcoder_localdelaybalancing_sharing/Subsystem/Subsystem в обратной связи.

bdclose('all');
load_system('hdlcoder_localdelaybalancing_sharing');
open_system('hdlcoder_localdelaybalancing_sharing/Subsystem');

Однако в этом проекте, можно знать, что обратная связь редко используется, поскольку управляющий сигнал вызывает блок switch, 'hdlcoder_localdelaybalancing_sharing/Subsystem/Subsystem/Switch', чтобы выбрать главный вход, путь прямого распространения, наиболее часто. Это пользовательское понимание подразумевает, что хорошо продолжать разделение ресурсов в этой подсистеме и игнорировать обратную связь в родительской подсистеме. В таких случаях, если вы хотите проигнорировать обратную связь во время балансировки задержки, вы должны задержка при выключении, балансирующаяся в подсистеме, содержащей обратную связь. Это позволяет HDL Coder(TM) проигнорировать обратную связь и возобновить разделение ресурсов.

hdlset_param('hdlcoder_localdelaybalancing_sharing', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing_sharing/Subsystem', 'BalanceDelays', 'off');
hdlset_param('hdlcoder_localdelaybalancing_sharing/Subsystem/Subsystem', 'BalanceDelays', 'on');
makehdl('hdlcoder_localdelaybalancing_sharing/Subsystem');
load_system('gm_hdlcoder_localdelaybalancing_sharing');
set_param('gm_hdlcoder_localdelaybalancing_sharing_vnl', 'SimulationCommand', 'update');
### Generating HDL for 'hdlcoder_localdelaybalancing_sharing/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_localdelaybalancing_sharing', { 'HDL Code Generation' } )">hdlcoder_localdelaybalancing_sharing</a> for HDL code generation parameters.
### Starting HDL check.
### Generating new validation model: <a href="matlab:open_system('gm_hdlcoder_localdelaybalancing_sharing_vnl')">gm_hdlcoder_localdelaybalancing_sharing_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_localdelaybalancing_sharing'.
### MESSAGE: The design requires 2 times faster clock with respect to the base rate = 0.1.
### Working on hdlcoder_localdelaybalancing_sharing/Subsystem/Subsystem as hdlsrc/hdlcoder_localdelaybalancing_sharing/Subsystem_block.vhd.
### Working on Subsystem_tc as hdlsrc/hdlcoder_localdelaybalancing_sharing/Subsystem_tc.vhd.
### Working on hdlcoder_localdelaybalancing_sharing/Subsystem as hdlsrc/hdlcoder_localdelaybalancing_sharing/Subsystem.vhd.
### Generating package file hdlsrc/hdlcoder_localdelaybalancing_sharing/Subsystem_pkg.vhd.
### Creating HDL Code Generation Check Report file:///tmp/BR2020bd_1444674_32127/publish_examples3/tpeebd210a/hdlsrc/hdlcoder_localdelaybalancing_sharing/Subsystem_report.html
### HDL check for 'hdlcoder_localdelaybalancing_sharing' complete with 0 errors, 2 warnings, and 1 messages.
### HDL code generation complete.

Заметьте, что мало того, что совместное использование преуспевает во внутренней подсистеме, но и локальная задержка, балансирующаяся также, успешно выполняется в этой подсистеме путем вставки соответствия с задержками на входных параметрах к сумматору.

open_system('gm_hdlcoder_localdelaybalancing_sharing_vnl/Subsystem/Subsystem');