В этом примере показано, как использовать оптимизацию потоковой передачи на уровне проекта в Coder™ HDL для оптимизации области.
Цикл MATLAB ® for генерирует цикл FOR_GENERATE в VHDL. Такие петли всегда пространственно разворачиваются для выполнения аппаратными средствами. Другими словами, тело цикла программного обеспечения реплицируется столько раз аппаратно, сколько итераций цикла. Это приводит к неэффективному использованию области.
Оптимизация потокового цикла создает альтернативную реализацию программного цикла, где тело цикла совместно используется аппаратными средствами. Вместо пространственной репликации копий тела цикла HDL Coder™ создает один аппаратный экземпляр тела цикла, который мультиплексируется во времени по итерациям цикла.
Код MATLAB, используемый в этом примере, реализует простой фильтр FIR. В этом примере также показано тестовое средство MATLAB, выполняющее фильтр.
design_name = 'mlhdlc_fir'; testbench_name = 'mlhdlc_fir_tb';
Проектирование: mlhdlc_fir
Испытательный стенд: mlhdlc_fir_tb
Выполните следующие строки кода, чтобы скопировать необходимые файлы примеров во временную папку.
mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_fir']; % create a temporary folder and copy the MATLAB files cd(tempdir); [~, ~, ~] = rmdir(mlhdlc_temp_dir, 's'); mkdir(mlhdlc_temp_dir); cd(mlhdlc_temp_dir); copyfile(fullfile(mlhdlc_demo_dir, [design_name,'.m*']), mlhdlc_temp_dir); copyfile(fullfile(mlhdlc_demo_dir, [testbench_name,'.m*']), mlhdlc_temp_dir);
Перед созданием кода смоделируйте проект с помощью средства тестирования, чтобы убедиться в отсутствии ошибок во время выполнения.
mlhdlc_fir_tb


Для создания нового проекта введите следующую команду:
coder -hdlcoder -new fir_project
Затем добавьте файл «mlhdlc _ fir.m» в проект в качестве функции MATLAB и «mlhdlc _ fir _ tb.m» в качестве испытательного стенда MATLAB.
Запустите помощник по рабочим процессам.
Более подробное руководство по созданию и заполнению проектов кодера MATLAB HDL см. в разделе Начало работы с MATLAB в Workflow-процессе HDL.
Оптимизация потоковой передачи в кодере HDL преобразует программные циклы (написанные явным образом с использованием оператора for-loop или выводимые циклы из матричных/векторных операторов) в аппаратные циклы, удобные для области.

Щелкните правой кнопкой мыши на шаге «Создание кода». Выберите опцию «Run to selected task» для выполнения всех шагов от начала до создания кода HDL.
При синтезировании конструкции с оптимизацией потоковой передачи цикла в отчете о ресурсах отображается сокращение ресурсов области. Попробуйте создать код HDL с оптимизацией и без нее.
Отчет о ресурсах без оптимизации потоковой передачи по контуру:

Отчет о ресурсах с включенной оптимизацией потока цикла:

Контуры будут передаваться в потоковом режиме только в том случае, если они являются обычными вложенными контурами. Регулярная структура вложенного цикла определяется как одна, где:
Ни один из циклов на любом уровне вложенности не появляется в условной области потока, т.е. ни один цикл не может быть встроен в области if-else или switch-else.
Переменные индекса цикла монотонно увеличиваются.
Общее число итераций структуры цикла не равно нулю.
На одном и том же уровне вложенной иерархии отсутствуют обратные циклы.
Выполните следующие команды для очистки временной папки проекта.
mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_fir']; clear mex; cd (mlhdlc_demo_dir); rmdir(mlhdlc_temp_dir, 's');