exponenta event banner

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

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

Введение

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

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

  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

Если для параметра «BalureDelays» глобального уровня модели установлено значение «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 являются коэффициентами для КИХ-фильтра и не должны синхронизироваться друг с другом или с обработанными данными. Поэтому отключение балансировки задержки в управляющей логике экономит ресурсы. Для этого параметр «BalureDelays» на уровне модели должен быть «выключен», а параметры «BalureDelays» на уровне подсистемы должны быть установлены соответствующим образом на пути данных и пути управления.

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: Балансировка локализованной задержки и совместное использование ресурсов

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

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

Однако в этой конструкции может быть известно, что петля обратной связи используется редко, так как управляющий сигнал заставляет блок переключения, 'hdlcoder _ localdelaybalancing _ sharing/Subsystem/Subsystem/Switch', выбирать верхний вход, путь передачи, большую часть времени. Это понимание пользователя подразумевает, что хорошо продолжать совместное использование ресурсов в этой подсистеме и игнорировать цикл обратной связи в родительской подсистеме. В таких случаях, если вы хотите игнорировать петли обратной связи во время балансировки задержки, вы должны отключить балансировку задержки в подсистеме, содержащей петлю обратной связи. Это позволяет кодеру HDL игнорировать цикл обратной связи и продолжить совместное использование ресурсов.

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');