exponenta event banner

Распределенная вставка конвейера для функциональных блоков MATLAB

В этом примере показано, как оптимизировать сгенерированный код HDL для функциональных блоков MATLAB с помощью оптимизации распределенного конвейера. Распределенная конвейерная обработка - это оптимизация Coder™ HDL, которая улучшает генерируемый код HDL из функциональных блоков MATLAB, моделей Simulink ® или диаграмм Stateflow ®. Использование распределенной конвейерной обработки обеспечивает более высокую тактовую частоту устройства FPGA.

Модель цепочки множителей

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

open_system('hdlcoder_distpipe_multiplier_chain')
set_param('hdlcoder_distpipe_multiplier_chain','SimulationCommand','Update')

HDL_DUT Подсистема - это DUT, для которого требуется создать код HDL. Подсистема управляет функциональным блоком MATLAB mult_chain.

open_system('hdlcoder_distpipe_multiplier_chain/HDL_DUT')

Для просмотра цепочки умножения откройте функциональный блок MATLAB.

open_system('hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain')

Применение оптимизации распределенных трубопроводов

1. Укажите генерацию двух ступеней трубопровода для функционального блока MATLAB.

ml_subsys = 'hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain';
hdlset_param(ml_subsys, 'OutputPipeline', 2)

2. Укажите MATLAB Datapath архитектура. Эта архитектура рассматривает функциональный блок MATLAB как обычную подсистему. Затем можно применить различные оптимизации к функциональным блокам MATLAB с другими блоками в модели Simulink ®.

hdlset_param(ml_subsys, 'architecture', 'MATLAB Datapath');

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

hdlset_param('hdlcoder_distpipe_multiplier_chain', ...
                'HierarchicalDistPipe', 'on', 'OptimizationReport', 'on')
hdlset_param('hdlcoder_distpipe_multiplier_chain/HDL_DUT', 'DistributedPipelining', 'on');
hdlset_param(ml_subsys, 'DistributedPipelining', 'on');

4. Создание кода HDL для HDL_DUT подсистема.

makehdl('hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain')

По умолчанию кодер HDL генерирует код VHDL в hdlsrc папка.

Анализ результатов оптимизации

В отчете Распределенная конвейерная обработка (Distributed Pipelining) видно, что генератор кода переместил регистры конвейера. Чтобы увидеть эффекты оптимизации, откройте созданную модель. gm_hdlcoder_distpipe_multiplier_chain и перейдите к HDL_DUT Подсистема.

MATLAB Datapath архитектура создает подсистему вместо функционального блока MATLAB. Затем оптимизация может распределить регистры трубопровода и единичную задержку, добавленную в подсистему, для оптимизации цепочки множителей и улучшения синхронизации. Откройте окно mult_chain Подсистема.

См. также

Связанные темы