В этом примере показано, как оптимизировать сгенерированный код 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 Подсистема.

Проверка настроек функционального блока MATLAB