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

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

Введение

Можно использовать опцию 'BalanceDelays', чтобы сбалансировать дополнительные задержки, введенные HDL- Coder™ для определенных реализаций и оптимизации блоков. Эта опция уровня модели управляет балансировкой задержки для всей модели. Однако для некоторых проектов может потребоваться сбалансировать задержки только в некоторых частях проекта. Для примера в проекте, содержащем путь данных и путь управления, балансировка задержки должна применяться только к пути данных проекта, т.е. путям, требующим синхронизации данных. В этом примере показано, как использовать опцию уровня подсистемы '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.
### Running HDL checks on the model 'hdlcoder_localdelaybalancing'.
### Begin compilation of the model 'hdlcoder_localdelaybalancing'...
### Applying HDL optimizations 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.
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_localdelaybalancing' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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 являются коэффициентами к конечная импульсная характеристика и не должны синхронизироваться друг с другом или с обработанными данными. Поэтому отключение балансировки задержки на логике управления экономит ресурсы. Для порядка этого должна быть ' off ' опция 'BalanceDelays' уровня модели, и опции '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.
### Running HDL checks on the model 'hdlcoder_localdelaybalancing'.
### Begin compilation of the model 'hdlcoder_localdelaybalancing'...
### Applying HDL optimizations on the model 'hdlcoder_localdelaybalancing'...
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_localdelaybalancing' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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.
### Running HDL checks on the model 'hdlcoder_localdelaybalancing_sharing'.
### Begin compilation of the model 'hdlcoder_localdelaybalancing_sharing'...
### Applying HDL optimizations on the model 'hdlcoder_localdelaybalancing_sharing'...
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_localdelaybalancing_sharing' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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');