exponenta event banner

Cosimulation and FPGA-in-the-loop в рабочем процессе MATLAB-to-HDL

В этом примере показано, как проверить сгенерированный код HDL с использованием косимуляции HDL и FPGA-in-the-Loop в качестве шагов в рабочем процессе создания кода HDL для MATLAB-HDL.

Требования и предпосылки

Продукты, необходимые для этого примера:

  • MATLAB

  • Конструктор фиксированных точек

  • Верификатор HDL

  • ПО для проектирования FPGA (ПО для проектирования Xilinx ® ISE ® или Vivado ® или Intel ® Quartus ® II)

  • Одна из поддерживаемых плат и аксессуаров для разработки FPGA

  • Для подключения с использованием Ethernet: Gigabit Ethernet адаптер, установленный на хост-компьютере, Gigabit Ethernet кросс-кабель

  • Для подключения с использованием кабеля JTAG: USB Blaster I или II и драйвера для плат Intel FPGA. Кабель и драйвер Digilent ® JTAG для плат Xilinx FPGA.

Предпосылки:

Программное обеспечение MATLAB ® и FPGA можно установить на компьютере или на сетевом устройстве. Если вы используете программное обеспечение из сети, вам потребуется второй сетевой адаптер, установленный на вашем компьютере, чтобы предоставить частную сеть для платы разработки FPGA. Чтобы узнать, как установить сетевой адаптер, обратитесь к руководству по оборудованию и сети для компьютера.

Проектирование MATLAB

Код MATLAB, используемый в этом примере, реализует простой симметричный фильтр FIR и использует dsp. Задержка объекта System до состояния модели. В этом примере также показан тестовый стенд MATLAB с фильтром.

design_name = 'mlhdlc_sysobj_ex.m';
testbench_name = 'mlhdlc_sysobj_ex_tb.m';
wavefile_name = 'wave.do';

Создание новой папки и копирование соответствующих файлов

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

mlhdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'matlabhdlcoderdemos');
copyfile(fullfile(mlhdlc_demo_dir, design_name), pwd, 'f');
copyfile(fullfile(mlhdlc_demo_dir, testbench_name), pwd, 'f');

Рассмотрим дизайн MATLAB.

type(design_name);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MATLAB design: Symmetric FIR Filter
% 
% Design pattern covered in this example: 
%  Filter states modeled using DSP System object (dsp.Delay)
%  Filter coefficients passed in as parameters to the design
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%   Copyright 2011-2015 The MathWorks, Inc.

%#codegen
function [y_out, delayed_xout] = mlhdlc_sysobj_ex(x_in, h_in1, h_in2, h_in3, h_in4)
% Symmetric FIR Filter

persistent h1 h2 h3 h4 h5 h6 h7 h8;
if isempty(h1)
    h1 = dsp.Delay;
    h2 = dsp.Delay;
    h3 = dsp.Delay;
    h4 = dsp.Delay;
    h5 = dsp.Delay;
    h6 = dsp.Delay;
    h7 = dsp.Delay;
    h8 = dsp.Delay;
end

h1p = step(h1, x_in);
h2p = step(h2, h1p);
h3p = step(h3, h2p);
h4p = step(h4, h3p);
h5p = step(h5, h4p);
h6p = step(h6, h5p);
h7p = step(h7, h6p);
h8p = step(h8, h7p);

a1 = h1p + h8p;
a2 = h2p + h7p;
a3 = h3p + h6p;
a4 = h4p + h5p;

m1 = h_in1 * a1;
m2 = h_in2 * a2;
m3 = h_in3 * a3;
m4 = h_in4 * a4;

a5 = m1 + m2;
a6 = m3 + m4;

% filtered output
y_out = a5 + a6;
% delayout input signal
delayed_xout = h8p;

end
type(testbench_name);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MATLAB test bench for the FIR filter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%   Copyright 2011-2015 The MathWorks, Inc.

clear mlhdlc_sysobj_ex;
 
x_in = cos(2.*pi.*(0:0.001:2).*(1+(0:0.001:2).*75)).';


h1 = -0.1339;
h2 = -0.0838;
h3 = 0.2026;
h4 = 0.4064;

len = length(x_in);
y_out_sysobj = zeros(1,len);
x_out_sysobj = zeros(1,len);
a = 10;

for ii=1:len
    data = x_in(ii);
    % call to the design 'sfir' that is targeted for hardware
    [y_out_sysobj(ii), x_out_sysobj(ii)] = mlhdlc_sysobj_ex(data, h1, h2, h3, h4);    
end


figure('Name', [mfilename, '_plot']);
subplot(2,1,1); 
plot(1:len,x_in); title('Input signal with noise');
subplot(2,1,2);
plot(1:len,y_out_sysobj); title('Filtered output signal');

Моделирование конструкции

Смоделировать конструкцию с помощью тестового стенда до создания кода, чтобы убедиться в отсутствии ошибок во время выполнения.

mlhdlc_sysobj_ex_tb

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

Для создания нового проекта введите следующую команду:

coder -hdlcoder -new mlhdlv_cosimFIL_prj

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

Более подробное руководство по созданию и заполнению проектов кодера MATLAB HDL можно найти в учебном пособии «Начало работы с программой MATLAB-HDL Workflow» (Кодер HDL).

Определение типов входных данных

Для этого объекта системы MATLAB с плавающей запятой все входы являются двойными скалярными. Укажите их как таковые с помощью раскрывающихся меню, предоставляемых для функции MATLAB.

Выполнение преобразования с фиксированной точкой и создание кода HDL

Запустите помощник по рабочим процессам. В помощнике по рабочим процессам щелкните правой кнопкой мыши шаг «Создание кода HDL». Выберите опцию «Run to selected task» для выполнения всех шагов от начала до создания кода HDL.

Проверьте созданный код HDL, щелкнув ссылки на панели журнала помощника по рабочим процессам.

Создание испытательного стенда косимуляции и запуск косимуляции ЛПВП

Выберите шаг «Проверить с косимуляцией».

Установите флажок «Создать стенд для косимуляции». Это действие активирует другие варианты в диалоговом окне, позволяя выбрать запись выходных данных для сравнения, выбрать предпочтительный имитатор ЛПВП и смоделировать созданный стенд для тестирования косимуляции. Установите оба оставшихся флажка и выберите предпочтительный имитатор ЛПВП.

Выберите «GUI» в качестве режима работы имитатора HDL.

Щелкните «Выполнить» (Run) и просмотрите графики, сравнивающие выходы косимуляции с выходами объекта System с фиксированной точкой. Также обратите внимание на переходы сигналов в устройстве просмотра сигналов имитатора ЛПВП.

Настройка платы разработки FPGA

Сведения о настройке платы FPGA и компьютера для обмена данными для моделирования FPGA-in-the-Loop см. в разделе Настройка платы разработки FPGA.

Создание испытательного стенда FPGA-in-the-Loop (FIL) и запуск моделирования FIL

Выберите шаг «Проверить с помощью FPGA-in-the-Loop» на левой панели помощника по рабочим процессам.

Установите все 3 флажка (для формирования тестового стенда FPGA-in-the-Loop, регистрации выходных данных, моделирования сформированного тестового стенда FIL.

Выберите выбранную плату разработки FPGA.

Нажмите «Выполнить» и просмотрите графики сравнения выходов FPGA с выходами объекта System с фиксированной точкой.

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

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

clear mex;
cd (hdlverif_demo_dir);
rmdir(mlhdlv_temp_dir, 's');