Распределённая конвейеризация: оптимизация скорости

В этом примере показано, как использовать распределённую конвейеризацию для оптимизации проекта для скорости в HDL Coder.

Введение

Распределённая конвейеризация является оптимизацией всей подсистемы, поддерживаемой HDL Coder для достижения высокого оборудования тактовой частоты. Путем включения 'Distributed Pipelining' кодер перераспределяет входные конвейерные регистры, выходной конвейерный регистр подсистемы и регистры в подсистеме в соответствующие положения, чтобы минимизировать комбинаторную логику между регистрами и максимизировать тактовую частоту чипа, синтезированного из сгенерированного HDL-кода.

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

bdclose all;
load_system('sfir_fixed');
open_system('sfir_fixed/symmetric_fir');

Установка выходного этапа трубопровода

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

В этом примере регистр выходного трубопровода подсистемы установлен на 5.

Модель генерации кода явно отражает вставленный регистр в выходных портах подсистемы (выделен оранжевым цветом).

hdlset_param('sfir_fixed/symmetric_fir', 'OutputPipeline', 5);
makehdl('sfir_fixed/symmetric_fir');
open_system('gm_sfir_fixed/symmetric_fir');
set_param('gm_sfir_fixed', 'SimulationCommand', 'update');
### Generating HDL for 'sfir_fixed/symmetric_fir'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('sfir_fixed', { 'HDL Code Generation' } )">sfir_fixed</a> for HDL code generation parameters.
### Running HDL checks on the model 'sfir_fixed'.
### Begin compilation of the model 'sfir_fixed'...
### Applying HDL optimizations on the model 'sfir_fixed'...
### 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: 5 cycles.
### Output port 2: 5 cycles.
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'sfir_fixed'.
### Working on sfir_fixed/symmetric_fir as hdlsrc/sfir_fixed/symmetric_fir.vhd.
### Generating package file hdlsrc/sfir_fixed/symmetric_fir_pkg.vhd.
### Code Generation for 'sfir_fixed' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples1/tp8fdc0684/hdlsrc/sfir_fixed/symmetric_fir_report.html
### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

Настройка распределённой конвейеризации

Распределённая конвейеризация является одной из опций блока подсистемы. После включения регистры в подсистеме, включая выходные регистры конвейера и входные регистры конвейера, будут изменены для достижения наилучшей тактовой частоты. Это эквивалентно синхронизации на уровне подсистемы.

Модель генерации кода явно отражает распределенные регистры в подсистеме (выделена оранжевым цветом).

hdlset_param('sfir_fixed/symmetric_fir', 'DistributedPipelining', 'on');
makehdl('sfir_fixed/symmetric_fir');
open_system('gm_sfir_fixed/symmetric_fir');
set_param('gm_sfir_fixed', 'SimulationCommand', 'update');
### Generating HDL for 'sfir_fixed/symmetric_fir'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('sfir_fixed', { 'HDL Code Generation' } )">sfir_fixed</a> for HDL code generation parameters.
### Running HDL checks on the model 'sfir_fixed'.
### Begin compilation of the model 'sfir_fixed'...
### Applying HDL optimizations on the model 'sfir_fixed'...
### 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: 5 cycles.
### Output port 2: 5 cycles.
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'sfir_fixed'.
### Working on sfir_fixed/symmetric_fir as hdlsrc/sfir_fixed/symmetric_fir.vhd.
### Generating package file hdlsrc/sfir_fixed/symmetric_fir_pkg.vhd.
### Code Generation for 'sfir_fixed' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples1/tp8fdc0684/hdlsrc/sfir_fixed/symmetric_fir_report.html
### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

Возможности распределённой конвейеризации по иерархиям подсистем

Поскольку 'Distributed Pipelining' является параметром уровня подсистемы, различные подсистемы на разных уровнях иерархии могут задавать различные значения ступеней трубопровода и различные настройки 'Distributed Pipelining'. По умолчанию кодер распределяет только регистры указанной подсистемы в этой подсистеме, а не через подсистемы нижнего уровня. Если требуется распределение между иерархиями, пользователи могут задать значение 'Distributed Pipelining' для более низких подсистем на ' on ', затем включить глобальную опцию 'Ierarchical Distributed Pipelining'. Когда локальные и глобальные опции включены, вся подсистема, включая подсистемы нижнего уровня, будет рассматриваться как единая подсистема при распределении регистров.

bdclose all;