Используя рабочий процесс генерации ядра IP из MATLAB: мигание LED

В этом примере показано, как использовать MATLAB® HDL Workflow Advisor, чтобы сгенерировать пользовательское ядро IP HDL, которое мигает светодиодами на плате FPGA. Сгенерированное ядро IP может использоваться на платформе Xilinx® Zynq®, или на любом FPGA Xilinx с процессором MicroBlaze.

Введение

Можно использовать MATLAB, чтобы спроектировать, симулировать, и проверить приложение, выполнить то, что - если сценарии с алгоритмами, и оптимизируют параметры. Можно затем подготовить проект к аппаратной и программной реализации на Zynq-7000 AP SoC путем решения, какие системные элементы будут выполняться программируемой логикой, и какие системные элементы будут работать на Cortex-A9 ARM®.

Используя ведомый рабочий процесс, показанный в этом примере, можно автоматически сгенерировать код VHDL® для программируемой логики с помощью HDL Coder™, экспортировать информацию об оборудовании от автоматически сгенерированного проекта EDK до проекта SDK для интегрирования рукописного кода С для процессора ARM и реализовать проект на Платформе Xilinx Zynq.

Этим примером является пошаговое руководство, которое помогает ввести вас рабочему процессу элемента кода HW/SW. В этом рабочем процессе вы выполняете следующие шаги:

  1. Настройте свое оборудование Zynq и инструменты.

  2. Разделите свой проект для аппаратной и программной реализации.

  3. Сгенерируйте ядро IP HDL использование HDL Workflow Advisor MATLAB.

  4. Интегрируйте ядро IP в проект EDK Xilinx и программируйте оборудование Zynq.

Для получения дополнительной информации обратитесь к другим более усовершенствованным примерам и документации HDL Coder.

Требования

  1. Xilinx ISE 14.4

  2. Оценочный комплект Xilinx Zynq-7000 SoC ZC702, запускающий Linux®, отображает в Основном Целенаправленном Исходном проекте 14.4

  3. Пакет поддержки HDL Coder для платформы Xilinx Zynq

Настройте оборудование Zynq и инструменты

1. Настройте оценочный комплект Xilinx Zynq ZC702. Выполните шаги настройки оборудования в примере HDL Coder, "Начинающем с Рабочим процессом Элемента кода HW/SW для Платформы Xilinx Zynq".

2. Настройте инструмент path синтеза ISE Xilinx с помощью следующей команды в окне команды MATLAB. Используйте свой собственный путь к установке ISE, когда вы запустите команду.

hdlsetuptoolpath('ToolName', 'Xilinx ISE', 'ToolPath', 'C:\Xilinx\14.4\ISE_DS\ISE\bin\nt64\ise.exe');

Разделите свой проект для аппаратной и программной реализации

Первый шаг рабочего процесса элемента кода HW/SW Zynq должен решить который части вашего проекта реализовать на программируемой логике, и который части работать на процессоре ARM.

Сгруппируйте части своего алгоритма, который вы хотите реализовать на программируемой логике в функцию MATLAB. Эта функция является контуром вашего раздела оборудования/программного обеспечения. Весь код MATLAB в этой функции будет реализован на программируемой логике. Необходимо обеспечить код С, который реализует код MATLAB вне этой функции, чтобы работать на процессоре ARM.

В этом примере функция mlhdlc_ip_core_led_blinking реализована на оборудовании. Это моделирует счетчик, который мигает светодиодами на плате FPGA. Два входных порта, Blink_frequency и Blink_direction, являются портами управления, которые определяют частоту мигания LED и направление. Можно настроить входные значения аппаратной подсистемы с помощью быстрых опций во включенном встроенном программном обеспечении, 'mlhdlc_ip_core_led_blinking_driver.c' и 'mlhdlc_ip_core_led_blinking_driver.h'. Встроенное программное обеспечение, которое работает на процессоре ARM, управляет сгенерированным ядром IP путем записи в интерфейс AXI доступных регистров. Выходной порт аппаратной подсистемы, LED, связывает с оборудованием LED. Выходной порт, Read_Back, может использоваться, чтобы считать данные назад в процессор.

design_name = 'mlhdlc_ip_core_led_blinking';
testbench_name = 'mlhdlc_ip_core_led_blinking_tb';
sw_driver_name = 'mlhdlc_ip_core_led_blinking_driver.c';
sw_driver_header_name = 'mlhdlc_ip_core_led_blinking_driver.h';

Давайте смотреть на проект MATLAB.

type(design_name);
function [LED, Read_back] = mlhdlc_ip_core_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.^(23:-1:8)';
y = s(idx+1);
end
type(testbench_name);

%

%   Copyright 2013-2015 The MathWorks, Inc.

for i=1:16
    [yout, ~] = mlhdlc_ip_core_led_blinking(i-1, 0);
    [yout2, ~] = mlhdlc_ip_core_led_blinking(i-1, 1);
end

Setup для примера

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

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
mlhdlc_temp_dir = [tempdir 'mlhdlc_ip_core_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);

% 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);
copyfile(fullfile(mlhdlc_demo_dir, sw_driver_name), mlhdlc_temp_dir);
copyfile(fullfile(mlhdlc_demo_dir, sw_driver_header_name), mlhdlc_temp_dir);

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

coder -hdlcoder -new mlhdlc_ip_core_led_blinking_prj

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

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

Выберите Code Generation Target

Используя рабочий процесс Генерации Ядра IP в HDL Workflow Advisor позволяет вам автоматически сгенерировать и допускающий повторное использование модуль ядра IP с обеспечением совместного доступа от функции MATLAB. Сгенерированное ядро IP спроектировано, чтобы быть соединенным со встраиваемым процессором на устройстве FPGA. HDL Coder генерирует HDL-код от функции проекта MATLAB, и также генерирует HDL-код для логики интерфейса AXI соединение ядра IP к встраиваемому процессору. Пакеты HDL Coder все сгенерированные файлы в папку ядра IP. Можно затем интегрировать сгенерированное ядро IP с большим FPGA встроенный проект в среде EDK Xilinx.

Выбрать рабочий процесс Генерации ядра IP:

1. Откройте HDL Workflow Advisor и щелкните правой кнопкой по Select Code Generation Target.

2. Для Рабочего процесса выберите IP Core Generation.

Выбор платформы

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

Остающиеся опции специфичны для платы и предусматривают дополнительную возможность интеграции сгенерированного ядра IP в проект Xilinx PlanAhead, синтезируют проект и загружают поток битов на FPGA в HDL Workflow Advisor.

Для Платформы выберите оценочный комплект Xilinx Zynq ZC702. Если у вас нет этой опции, выберите Get больше, чтобы открыть Инсталлятор Пакета Поддержки. В Инсталляторе Пакета Поддержки выберите Xilinx Zynq Platform и следуйте инструкциям, предоставленным Инсталлятором Пакета Поддержки, чтобы завершить установку.

Преобразуйте проект в фиксированную точку

1. Щелкните правой кнопкой по Входной Define задаче Типов и выберите Run This Task.

2. В задаче Преобразования Фиксированной точки нажмите Advanced и установите Запас прочности в течение sim min (%) / макс. (%) к 0.

3. Установите предложенный тип freqCounter переменной к 24-битному целому числу без знака путем ввода numerictype (0, 24, 0) в его 'Предложенном Типе' столбец.

4. Слева, щелкните правой кнопкой по задаче Преобразования Фиксированной точки и выберите Run This Task.

Сконфигурируйте целевой интерфейс

Сопоставьте каждый порт в своей функции проекта MATLAB к одному из целевых интерфейсов ядра IP в Цели Набора Интерфейсная подзадача.

В этом примере входные порты Blink_frequency и Blink_direction сопоставлены с интерфейсом AXI4-Lite, таким образом, HDL Coder™ генерирует интерфейс AXI доступные регистры для них. Выходной порт LED сопоставлен с внешним интерфейсом, светодиодная Общая цель [0:7], который связывает с оборудованием LED на плате Zynq.

Сгенерируйте ядро IP

Щелкните правой кнопкой по генерации HDL-кода, продвигаются и выбирают Run эта задача сгенерировать Ядро IP наряду с Отчетом Ядра IP.

Интегрируйте ядро IP со средой EDK Xilinx

В этой части рабочего процесса вы вставляете свое сгенерированное ядро IP в исходный проект встраиваемой системы, генерируете поток битов FPGA и загружаете поток битов на оборудование Zynq.

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

1. Чтобы объединяться со средой EDK Xilinx, щелкните правой кнопкой по Создать шагу Проекта при 'Интегрировании Встраиваемой системы' и выберите, опция 'Запускают Эту Задачу'. Проект Xilinx PlanAhead с EDK, встроенный проект сгенерирован, и ссылка на проект, предоставлен в диалоговом окне. Можно опционально открыть проект смотреть.

2. Создайте поток битов FPGA на шаге Встраиваемой системы Сборки. Убедитесь, что 'Запущенный процесс сборки внешне' опция проверяется, таким образом, инструмент синтеза Xilinx запустится в отдельном процессе из MATLAB. Ожидайте процесса инструмента синтеза, чтобы закончить запускаться во внешнем командном окне.

3. После того, как поток битов сгенерирован, щелкните правой кнопкой по 'Program Target Device', продвигаются и выбирают Запуск опции Эта Задача программировать оборудование Zynq.

После того, как вы будете программировать оборудование FPGA, LED начинает мигать на вашей плате Zynq.

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

Запустите программное обеспечение на оборудовании Zynq ZC702

Включенные файлы кода С, 'mlhdlc_ip_core_led_blinking_driver.c' и 'mlhdlc_ip_core_led_blinking_driver.h', реализуют простое меню, которое позволяет вам установить частоту мигания LED и направление. Можно использовать их в основанном на Linux проекте SDK.

Для получения инструкций по тому, как интегрировать включенный код С в проект SDK и запустить его на оборудовании Zynq ZC702, обратитесь к документации Xilinx.

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

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

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