В этом примере показано, как использовать оптимизацию отображения ОЗУ в Coder™ HDL для отображения постоянных матричных переменных в блок RAM в аппаратном обеспечении.
Одной из привлекательных особенностей записи кода MATLAB является простота создания, доступа, модификации и манипулирования матрицами в MATLAB.
При обработке такого кода MATLAB кодер HDL отображает эти матрицы на провода или регистры в HDL. Например, локальные временные матричные переменные сопоставляются с проводами, тогда как постоянные матричные переменные сопоставляются с регистрами.
Последнее имеет тенденцию быть неэффективным отображением, когда размер матрицы велик, поскольку количество доступных ресурсов регистра ограничено. Это также усложняет синтез, размещение и маршрутизацию.
Современные FPGA имеют блочные RAM, которые предназначены для больших матриц. Кодер HDL использует преимущества этой функции и автоматически отображает матрицы в блок RAM для повышения эффективности области. Для некоторых конструкций отображение этих постоянных матриц в RAM является обязательным для реализации конструкции. Современные средства синтеза могут быть не в состоянии синтезировать конструкции, когда большие матрицы отображаются в регистры, тогда как размер проблемы является более управляемым, когда те же самые матрицы отображаются в RAM.
design_name = 'mlhdlc_sobel'; testbench_name = 'mlhdlc_sobel_tb';
Проектирование MATLAB: mlhdlc_sobel
MATLAB Testbench: mlhdlc_sobel_tb
Входное изображение: stop_sign
Выполните следующие строки кода для копирования файлов примеров во временную папку.
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

Выполните следующую команду для создания нового проекта.
coder -hdlcoder -new mlhdlc_ram
Затем добавьте файл «mlhdlc _ sobel.m» в проект в качестве функции MATLAB и «mlhdlc _ sobel _ tb.m» в качестве испытательного стенда MATLAB.
Более подробное руководство по созданию и заполнению проектов кодера MATLAB HDL см. в разделе Начало работы с MATLAB в Workflow-процессе HDL.
Запустите помощник по рабочим процессам.
Флажок «Сопоставить постоянные переменные массива с RAM» необходимо включить, чтобы сопоставить постоянные переменные для блокирования RAM в сгенерированном коде.

В помощнике по рабочим процессам щелкните правой кнопкой мыши шаг «Создание кода». Выберите опцию «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');