В этом примере показано, как сбалансировать задержки в определенных частях конструкции, не балансируя задержки во всей конструкции.
Можно использовать опцию «BalureDelays», чтобы сбалансировать дополнительные задержки, введенные Coder™ HDL для определенных реализаций и оптимизаций блоков. Эта опция уровня модели управляет балансировкой задержки для всей модели. Однако для некоторых конструкций может потребоваться сбалансировать задержки только в некоторых частях конструкции. Например, в конструкции, содержащей тракт данных и тракт управления, балансировка задержки должна применяться только к тракту данных конструкции, т.е. трактам, требующим синхронизации данных. В этом примере показано, как использовать опцию «BalureDelays» на уровне подсистемы, которая обеспечивает детализированный контроль того, как кодер HDL балансирует задержки в отдельных подсистемах.
Мы используем два примера, чтобы продемонстрировать использование этой функции уровня подсистемы:
hdlcoder_localdelaybalancing.slx показано, как отключить балансировку задержки на определяемых пользователем путях управления.
hdlcoder_localdelaybalancing_sharing.slx показывает, как пользователь может применять оптимизации HDL, такие как совместное использование ресурсов, при наличии сложных путей управления, которые требуют тщательно ограниченной балансировки задержки.
Примерная модель, «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.

Обратите внимание, что моделирование модели проверки теперь показывает несоответствия, поскольку модель проверки не компенсирует задержки, вставленные оптимизациями или реализациями блоков.
Оптимизация совместного использования ресурсов экономит использование области в окончательной реализации ЛПВП за счет введения цикла задержек для каждой группы совместного использования. Эта дополнительная задержка обычно уравновешивается во время балансировки задержки, так что сохраняются числовые значения и функциональные возможности алгоритма. Одним из ограничений совместного использования ресурсов является невозможность его применения к подсистеме в цикле обратной связи. Таким образом, если для подсистемы в цикле задано совместное использование ресурсов, то оптимизация не будет выполнена. Вы можете наблюдать это в 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');
