exponenta event banner

Состояние модели с постоянными переменными и системными объектами

В этом примере показано, как использовать постоянные переменные и системные объекты для моделирования состояния и задержек в конструкции MATLAB ® для генерации кода HDL.

Введение

Использование системных объектов для моделирования задержки приводит к сжатому сгенерированному коду.

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

% In order to reuse code implemented in a function with states,
% you need to duplicate functions multiple times to create multiple
% instances of the algorithm with delay.

Изучение кода MATLAB

Рассмотрим реализацию алгоритма Собеля.

Изучите конструкцию, чтобы увидеть, как моделируются задержки и линейные буферы с помощью:

Обратите внимание, что функция filterdelay дублируется различными именами функций в коде mlhdlc _ sobel для создания экземпляра нескольких версий алгоритма в MATLAB для генерации кода HDL.

Реализация линии задержки сложнее при использовании постоянных переменных MATLAB.

Теперь изучите упрощенную реализацию того же алгоритма с использованием системных объектов в «mlhdlc _ sysobj _ sobel».

При использовании в рамках ограничений генерации кода HDL dsp. Объекты задержки всегда отображаются в регистры. Чтобы постоянные переменные выводились как регистры, необходимо внимательно прочитать переменную перед ее записью, чтобы сопоставить ее с регистром.

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

demo_files = {...
    'mlhdlc_sysobj_sobel', ...
    'mlhdlc_sysobj_sobel_tb', ...
    'mlhdlc_sobel', ...
    'mlhdlc_sobel_tb'
    };

Создание новой папки и копирование соответствующих файлов

Выполните следующие строки кода, чтобы скопировать необходимые файлы примеров во временную папку.

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_delay_modeling'];

% create a temporary folder and copy the MATLAB files
cd(tempdir);
[~, ~, ~] = rmdir(mlhdlc_temp_dir, 's');
mkdir(mlhdlc_temp_dir);
cd(mlhdlc_temp_dir);

for ii=1:numel(demo_files)
    copyfile(fullfile(mlhdlc_demo_dir, [demo_files{ii},'.m*']), mlhdlc_temp_dir);
end

Известные ограничения

Для предопределенных системных объектов HDL Coder™ поддерживает только метод step и не поддерживает методы output и update.

При поддержке только пошагового метода задержки не могут использоваться при моделировании путей обратной связи. Например, следующая часть кода MATLAB не может поддерживаться с помощью dsp. Задержать объект System.

%#codegen
function y = accumulate(u)
persistent p;
if isempty(p)
   p = 0;
end
y = p;
p = p + u;

Создание нового проекта кодера HDL

Для создания нового проекта введите следующую команду:

coder -hdlcoder -new mlhdlc_sobel

Затем добавьте файл «mlhdlc _ sobel.m» в проект в качестве функции MATLAB и «mlhdlc _ sobel _ tb.m» в качестве испытательного стенда MATLAB.

Более подробное руководство по созданию и заполнению проектов кодера MATLAB HDL см. в разделе Начало работы с MATLAB в Workflow-процессе HDL.

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

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

Проверьте созданный код HDL, щелкнув гиперссылки в окне Журнал генерации кода.

Теперь создайте новый проект для проекта системного объекта:

coder -hdlcoder -new mlhdlc_sysobj_sobel

Добавьте файл «mlhdlc _ sysobj _ sobel.m» в проект в качестве функции MATLAB и «mlhdlc _ sysobj _ sobel _ tb.m» в качестве испытательного стенда MATLAB.

Повторите шаги создания кода и проверьте сгенерированный код MATLAB и HDL с фиксированной точкой.

Дополнительные примечания:

Можно моделировать целочисленную задержку с помощью dsp. Задержать объект, установив значение свойства Length больше 1. Эти объекты задержки будут отображены в регистры сдвига в сгенерированном коде.

Если опция оптимизации «Сопоставить переменные постоянного массива с RAM» включена, системные объекты задержки будут сопоставлены с блоками RAM при следующих условиях:

  • Свойство InitityConditions dsp. Задержка устанавливается равной нулю.

  • Тип входных данных задержки не является плавающей точкой.

  • Значение RAMSize (DelayLength * InputWordLength) больше или равно значению «RAM Mapping Threshold».

Очистка созданных файлов

Выполните следующие команды для очистки временной папки проекта.

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_delay_modeling'];
clear mex;
cd (mlhdlc_demo_dir);
rmdir(mlhdlc_temp_dir, 's');