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

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

Введение

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

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

MATLAB- Проекта

Код MATLAB, используемый в этом примере, реализует простой конечная импульсная характеристика. Этот пример также показывает тестовый набор 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 Coder см. в разделе «Начало работы с MATLAB в HDL».

Включите Цикл потоковую передачу

Циклическая оптимизация потоковой передачи в HDL Coder преобразует программные циклы (или написанные явным образом с помощью оператора 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');