exponenta event banner

Отображение матриц в блоки RAM для уменьшения площади

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

Введение

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

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

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

Современные FPGA имеют блочные RAM, которые предназначены для больших матриц. Кодер HDL использует преимущества этой функции и автоматически отображает матрицы в блок 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 см. в разделе Начало работы с MATLAB в Workflow-процессе HDL.

Включить оптимизацию отображения ОЗУ

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

Флажок «Сопоставить постоянные переменные массива с RAM» необходимо включить, чтобы сопоставить постоянные переменные для блокирования RAM в сгенерированном коде.

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

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

Проверка сгенерированного кода

Проверьте сообщения в окне журнала, чтобы увидеть файлы ОЗУ, созданные вместе с конструкцией.

Для каждой переменной постоянной матрицы, не сопоставленной с ОЗУ, появляется предупреждающее сообщение.

Анализ отчета о ресурсах

Просмотрите сгенерированный отчет о ресурсах, в котором показано количество выводимых RAM, по ссылке «Resource Usiculation report...» в окне сгенерированного кода.

Дополнительные примечания по сопоставлению ОЗУ

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

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

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

  • Предупреждение отображается, когда постоянная матрица не отображается в ОЗУ.

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

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

  • Отображение постоянных матриц с ненулевыми начальными значениями в 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');