exponenta event banner

Начало работы с рабочим процессом FPGA под ключ

В этом примере показано, как программировать автономный 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);

Создание нового проекта HDL Coder™

coder -hdlcoder -new mlhdlc_turnkey_led_blinking_prj

Затем добавьте файл «mlhdlc _ turkey _ led _ blinking.m» в проект в качестве функции MATLAB и «mlhdlc _ turkey _ led _ blinking _ tb.m» в качестве испытательного стенда MATLAB.

Более подробное руководство по созданию и заполнению проектов кодера MATLAB HDL см. в разделе Начало работы с процессом MATLAB в HDL.

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

1. Щелкните правой кнопкой мыши задачу Определение типов ввода и выберите Выполнить эту задачу.

2. В задаче Преобразование фиксированной точки (Fixed-Point Conversion) нажмите кнопку Дополнительно (Advanced) и установите для параметра Запас прочности для sim min/max (%) значение 0.

3. Задайте предлагаемый тип переменной freqCounter как беззнаковое 27-битовое целое число, введя числовой тип (0, 27, 0) в столбец «Предлагаемый тип».

4. Слева щелкните правой кнопкой мыши на задаче «Преобразование фиксированных точек» и выберите «Выполнить эту задачу».

Сопоставить порты проектирования с целевым интерфейсом

В задаче Select Code Generation Target выберите рабочий процесс FPGA под ключ и плату разработки Xilinx Virtex-5 ML506 следующим образом:

1. В поле Workflow (Рабочий процесс) выберите FPGA «Под ключ».

2. Для параметра «Платформа» выберите плату разработки Xilinx Virtex-5 ML506. Если конечного устройства нет в списке, выберите Получить дополнительные сведения для загрузки пакета поддержки. Кодер автоматически устанавливает семейство микросхем, устройство, пакет и скорость в зависимости от выбранной платформы.

3. Для тактовой частоты FPGA в полях «Вход» и «Система» введите значение 100.

4. В задаче Set Target Interface сопоставьте входные и выходные порты проекта интерфейсам на целевом устройстве, установив поля в столбце Target Platform Interfaces следующим образом:

  1. Blink_frequency_1 к кнопкам пользователя N-E-S-W-C [0:4]

  1. Blink_direction к кнопкам пользователя N-E-S-W-C [0:4]

  1. Светодиодные индикаторы общего назначения [0:7]

Порт Read _ back можно оставить несопоставленным.

Создание файла программирования и загрузка на оборудование

Можно создать код, выполнить синтез и анализ, а также загрузить проект на целевое оборудование, используя настройки по умолчанию:

1. Для группы задач Синтез и анализ снимите флажок Пропустить этот шаг.

2. Для группы задач Загрузить в конечный объект снимите флажок Пропустить этот шаг.

3. Щелкните правой кнопкой мыши Download to Target > Generate Programming File и выберите Run to Selected Task.

4. Если оконечное оборудование подключено и готово к программированию, выберите подзадачу Program Target Device и нажмите Run.

Очистка созданных файлов

Для очистки временной папки проекта можно выполнить следующие команды.

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');