В этом примере показано, как использовать потоковую оптимизацию цикла уровня проектирования в HDL- Coder™ для оптимизации области.
Цикл MATLAB ® for генерирует цикл FOR_GENERATE в VHDL. Такие циклы всегда пространственно разворачиваются для выполнения в оборудовании. Другими словами, тело программного цикла реплицируется столько же раз в оборудовании, сколько и количество итераций цикла. Это приводит к неэффективному использованию области.
Оптимизация потоковой передачи цикла создает альтернативную реализацию программного цикла, где тело цикла совместно используется в оборудовании. Вместо пространственной репликации копий тела цикла, HDL- Coder™ создает один аппаратный образец тела цикла, который мультиплексируется во времени через итерации цикла.
Код MATLAB, используемый в этом примере, реализует простой конечная импульсная характеристика. Этот пример также показывает тестовый набор 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 Coder см. в разделе «Начало работы с MATLAB в HDL».
Циклическая оптимизация потоковой передачи в HDL Coder преобразует программные циклы (или написанные явным образом с помощью оператора 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');