Этот пример показывает, как использовать оптимизацию потоковой передачи цикла уровня проекта в HDL Coder™, чтобы оптимизировать область.
Цикл for MATLAB® генерирует цикл 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 для более полного примера при создании и заполнении проектов HDL Coder MATLAB.
Оптимизация потоковой передачи цикла в HDL Coder преобразовывает циклы программного обеспечения (или записанный явным образом использование оператора цикла for или выведенные циклы от матричных/векторных операторов) к благоприятным для области аппаратным циклам.
Щелкните правой кнопкой по шагу 'Code Generation'. Выберите опцию, 'Запущенную к выбранной задаче', чтобы запустить все шаги с начала через генерацию HDL-кода.
Когда вы синтезируете проект с оптимизацией потоковой передачи цикла, вы видите сокращение ресурсов области в отчете ресурса. Попытайтесь генерировать HDL-код с и без оптимизации.
Отчет ресурса без оптимизации потоковой передачи цикла:
Отчет ресурса с включенной оптимизацией потоковой передачи цикла:
Циклы будут переданы потоком, только если они - регулярные вложенные циклы. Регулярная структура вложенного цикла задана как та где:
Ни один из циклов на любом уровне вложения не появляется в условной области потока, т.е. никакой цикл не может быть встроен в если еще или области переключателя еще.
Индексные переменные цикла монотонно увеличиваются.
Общее количество итераций циклической структуры является ненулевым.
Нет никаких компенсационных циклов на том же уровне вложенной иерархии.
Запустите следующие команды, чтобы очистить временную папку проекта.
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');