exponenta event banner

Петлевая потоковая передача для уменьшения площади

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

Введение

Цикл MATLAB ® for генерирует цикл FOR_GENERATE в VHDL. Такие петли всегда пространственно разворачиваются для выполнения аппаратными средствами. Другими словами, тело цикла программного обеспечения реплицируется столько раз аппаратно, сколько итераций цикла. Это приводит к неэффективному использованию области.

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

Проектирование MATLAB

Код MATLAB, используемый в этом примере, реализует простой фильтр FIR. В этом примере также показано тестовое средство MATLAB, выполняющее фильтр.

design_name = 'mlhdlc_fir';
testbench_name = 'mlhdlc_fir_tb';
  1. Проектирование: mlhdlc_fir

  2. Испытательный стенд: 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 или выводимые циклы из матричных/векторных операторов) в аппаратные циклы, удобные для области.

Выполнение преобразования с фиксированной точкой и создание кода HDL

Щелкните правой кнопкой мыши на шаге «Создание кода». Выберите опцию «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');