В этом примере показано, как использовать оптимизацию отображения RAM в HDL Coder™, чтобы сопоставить персистентные матричные переменные с блоком RAM в оборудовании.
Одной из привлекательных функций записи кода MATLAB является простота создания, доступа, изменения и управления матрицами в MATLAB.
При обработке такого кода MATLAB HDL Coder сопоставляет эти матрицы с проводами или регистрами в HDL. Например, локальные временные матричные переменные сопоставлены с проводами, тогда как персистентные матричные переменные сопоставлены с регистрами.
Последний склонен быть неэффективным отображением, когда матричный размер является большим, поскольку количество доступных ресурсов регистра ограничивается. Это также усложняет синтез, размещение и маршрутизацию.
Современные FPGAs показывают блок RAM, которые спроектированы, чтобы иметь большие матрицы. HDL Coder использует в своих интересах эту функцию и автоматически сопоставляет матрицы с блоком RAM, чтобы повысить эффективность области. Для определенных проектов отображение этих персистентных матриц к RAM обязательно, если проект должен быть понят. Современные инструменты синтеза не могут смочь синтезировать проекты, когда большие матрицы сопоставлены с регистрами, тогда как проблемный размер более управляем, когда те же матрицы сопоставлены с RAM.
design_name = 'mlhdlc_sobel'; testbench_name = 'mlhdlc_sobel_tb';
Проект MATLAB: mlhdlc_sobel
Испытательный стенд MATLAB: 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 для более полного примера при создании и заполнении проектов HDL Coder MATLAB.
Запустите советника по вопросам рабочего процесса.
Флажок 'Map persistent array variables to RAMs' должен быть включен, чтобы сопоставить персистентные переменные с блоком RAM в сгенерированном коде.
В Советнике по вопросам Рабочего процесса щелкните правой кнопкой по шагу 'Code Generation'. Выберите опцию, 'Запущенную к выбранной задаче', чтобы запустить все шаги с начала через генерацию HDL-кода.
Исследуйте сообщения в логарифмическом окне, чтобы видеть файлы 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');