В этом примере показано, как запрограммировать автономный FPGA с вашим проектом MATLAB, используя рабочий процесс FPGA «под ключ».
Конечным устройством в этом примере является плата разработки Xilinx ® Virtex-5 ML506.
В этом примере функция 'mlhdlc _ ip _ core _ led _ blinking' моделирует счетчик, который мигает светодиодами на плате FPGA.
Два входных порта, Blink_frequency и Blink_direction, являются портами управления, которые определяют частоту и направление мигания светодиода.
Можно настроить входные значения оборудования с помощью кнопок на плате разработки Xilinx ® Virtex-5 ML506. Порт выхода функции проекта, 'LED', соединяется с оборудованием LED.
design_name = 'mlhdlc_turnkey_led_blinking'; testbench_name = 'mlhdlc_turnkey_led_blinking_tb';
Рассмотрим проект MATLAB
type(design_name);
function [LED, Read_back] = mlhdlc_turnkey_led_blinking(Blink_frequency, Blink_direction) % % Copyright 2013-2015 The MathWorks, Inc. persistent freqCounter LEDCounter if isempty(freqCounter) freqCounter = 0; LEDCounter = 255; end if Blink_frequency <= 0 Blink_frequency = 0; elseif Blink_frequency >= 15 Blink_frequency = 15; end blinkFrequencyOut = LookupTable(Blink_frequency); if blinkFrequencyOut == freqCounter freqMatch = 1; else freqMatch = 0; end freqCounter = freqCounter + 1; if freqMatch freqCounter = 0; end if Blink_direction LED = 255 - LEDCounter; else LED = LEDCounter; end if LEDCounter == 255 LEDCounter = 0; elseif freqMatch LEDCounter = LEDCounter + 1; end Read_back = LED; end function y = LookupTable(idx) s = 2.^(26:-1:11)'; y = s(idx+1); end
type(testbench_name);
% % Copyright 2013-2015 The MathWorks, Inc. for i=1:16 [yout, ~] = mlhdlc_turnkey_led_blinking(i-1, 0); [yout2, ~] = mlhdlc_turnkey_led_blinking(i-1, 1); end
Выполните следующие строки кода, чтобы скопировать необходимые файлы примера во временную папку.
mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_turnkey_led_blinking']; % Create a temporary folder and copy the MATLAB files. cd(tempdir); [~, ~, ~] = rmdir(mlhdlc_temp_dir, 's'); mkdir(mlhdlc_temp_dir); cd(mlhdlc_temp_dir); copyfile(fullfile(mlhdlc_demo_dir, [design_name,'.m*']), mlhdlc_temp_dir); copyfile(fullfile(mlhdlc_demo_dir, [testbench_name,'.m*']), mlhdlc_temp_dir);
coder -hdlcoder -new mlhdlc_turnkey_led_blinking_prj
Затем добавьте файл 'mlhdlc _ tenkkey _ led _ blinking.m' к проекту в качестве функции MATLAB и 'mlhdlc _ tenkey _ led _ blinking _ tb.m' в качестве испытательного стенда MATLAB.
Более полное руководство по созданию и заполнению проектов MATLAB HDL Coder см. в разделе «Начало работы с MATLAB в HDL».
1. Щелкните правой кнопкой мыши задачу Задать входные типы и выберите Запустить эту задачу.
2. В задаче преобразования фиксированных точек нажмите Advanced и установите запас прочности для sim min/max (%) равным 0.
3. Установите предлагаемый тип переменной freqCounter в беззнаковое 27-битное целое число путем ввода числового типа (0, 27, 0) в его столбец «Предлагаемый тип».
4. Слева щелкните правой кнопкой мыши задачу преобразования фиксированных точек и выберите Запустить эту задачу.
В Избранной Целевой задаче Генерации кода выберите рабочий процесс Под ключ FPGA и правление Xilinx Virtex-5 ML506 развития следующим образом:
1. Для рабочего процесса выберите FPGA «Под ключ».
2. Для параметра Platform выберите Xilinx Virtex-5 ML506 плату разработки. Если вашего целевого устройства нет в списке, выберите Получить больше для загрузки пакета поддержки. Кодер автоматически устанавливает семейство чипов, устройство, пакет и скорость в соответствии с выбором вашей платформы.
3. Для тактовой частоты FPGA введите 100 в поле «Вход» и «Система».
4. В задаче Set Target Interface сопоставьте входной и выходной порты проекта с интерфейсами на целевом устройстве путем установки полей в столбце Target Platform Interfaces следующим образом:
Blink_frequency_1 на кнопки пользователя N-E-S-W-C [0:4]
Blink_direction на кнопки пользователя N-E-S-W-C [0:4]
Светодиодные индикаторы общего назначения [0:7]
Вы можете оставить порт 'Read _ back' несопоставленным.
Можно сгенерировать код, выполнить синтез и анализ, а также загрузить проект на целевой компьютер с помощью настроек по умолчанию:
1. Для группы задач Синтез и анализ снимите флажок Пропустить этот шаг опции.
2. Для группы задач Загрузить в цель снимите флажок Пропустить этот шаг опции.
3. Щелкните правой кнопкой мыши Загрузить в цель > Сгенерировать программный файл и выберите Выполнить в выбранную задачу.
4. Если ваш целевой компьютер подключен и готов к программированию, выберите подтасовку Program Target Device и нажатия кнопки Запуска.
Для очистки временной папки проекта можно запустить следующие команды.
mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos'); mlhdlc_temp_dir = [tempdir 'mlhdlc_turnkey_led_blinking']; clear mex; cd (mlhdlc_demo_dir); rmdir(mlhdlc_temp_dir, 's');