Сопоставьте матрицы, чтобы блокировать RAM, чтобы уменьшать область

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

Введение

Одной из привлекательных функций записи кода MATLAB является простота создания, доступа, изменения и управления матрицами в MATLAB.

При обработке такого кода MATLAB HDL Coder сопоставляет эти матрицы с проводами или регистрами в HDL. Например, локальные временные матричные переменные сопоставлены с проводами, тогда как персистентные матричные переменные сопоставлены с регистрами.

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

Современные FPGAs показывают блок RAM, которые спроектированы, чтобы иметь большие матрицы. HDL Coder использует в своих интересах эту функцию и автоматически сопоставляет матрицы с блоком RAM, чтобы повысить эффективность области. Для определенных проектов отображение этих персистентных матриц к RAM обязательно, если проект должен быть понят. Современные инструменты синтеза не могут смочь синтезировать проекты, когда большие матрицы сопоставлены с регистрами, тогда как проблемный размер более управляем, когда те же матрицы сопоставлены с RAM.

Проект MATLAB

design_name = 'mlhdlc_sobel';
testbench_name = 'mlhdlc_sobel_tb';

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

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

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

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

% copy the design files to the temporary directory
copyfile(fullfile(mlhdlc_demo_dir, [design_name,'.m*']), mlhdlc_temp_dir);
copyfile(fullfile(mlhdlc_demo_dir, [testbench_name,'.m*']), mlhdlc_temp_dir);

Симулируйте проект

Симулируйте проект с испытательным стендом до генерации кода, чтобы убедиться, что нет никаких ошибок периода выполнения.

mlhdlc_sobel_tb

Создайте новый проект HDL Coder™

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

coder -hdlcoder -new mlhdlc_ram

Затем добавьте файл 'mlhdlc_sobel.m' в проект как функция MATLAB и 'mlhdlc_sobel_tb.m' как испытательный стенд MATLAB.

Обратитесь к Началу работы с MATLAB к Рабочему процессу HDL для более полного примера при создании и заполнении проектов HDL Coder MATLAB.

Включите оптимизацию отображения RAM

Запустите советника по вопросам рабочего процесса.

Флажок 'Map persistent array variables to RAMs' должен быть включен, чтобы сопоставить персистентные переменные с блоком RAM в сгенерированном коде.

Запустите преобразование фиксированной точки и генерацию HDL-кода

В Советнике по вопросам Рабочего процесса щелкните правой кнопкой по шагу 'Code Generation'. Выберите опцию, 'Запущенную к выбранной задаче', чтобы запустить все шаги с начала через генерацию HDL-кода.

Исследуйте сгенерированный код

Исследуйте сообщения в логарифмическом окне, чтобы видеть файлы RAM, сгенерированные наряду с проектом.

Предупреждающее сообщение появляется для каждой персистентной матричной переменной, не сопоставленной с RAM.

Исследуйте отчет ресурса

Смотрите на сгенерированный отчет ресурса, который показывает количество выведенных RAM следующим 'Отчет Использования ресурса...' ссылка в окне сгенерированного кода.

Дополнительные примечания по отображению RAM

  • Персистентные матричные переменные доступы должны быть в безусловных областях, i.e., вне кого-либо, если еще, переключите случай или код цикла for.

  • Функции MATLAB могут иметь любое количество матриц RAM.

  • Все матричные переменные в MATLAB, которые объявляются персистентные и соответствуют пороговым критериям, сопоставлены с RAM.

  • Предупреждение показывают, когда персистентная матрица не становится сопоставленной с RAM.

  • Зависимый чтения записывает данные, что циклы не позволены: вы не можете вычислить данные о записи в зависимости от данных, считанных из матрицы.

  • Персистентные матрицы не могут быть скопированы в целом или получены доступ как sub матрица: матричный доступ (чтение-запись) предоставляется только на одном элементах матрицы.

  • Отображение персистентных матриц с ненулевыми начальными значениями к RAM не поддерживается.

Очистите Сгенерированные Файлы

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

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