Cosimulation и FPGA в цикле в рабочем процессе MATLAB-to-HDL

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

Требования и необходимые условия

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

  • MATLAB

  • Fixed-Point Designer™

  • HDL Verifier™

  • Программное обеспечение проекта FPGA (Xilinx® ISE® или Vivado® проектируют набор или программное обеспечение проекта Intel® Quartus® II),

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

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

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

Необходимые условия:

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

Проект MATLAB

Код MATLAB, используемый в этом примере, реализует простой симметричный КИХ-фильтр и использует dsp.Delay Системный объект для состояния модели. Этот пример также показывает испытательный стенд 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™

Чтобы создать новый проект, введите следующую команду:

кодер-hdlcoder - новый mlhdlv_cosimFIL_prj

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

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

Задайте типы входных данных

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

Запустите преобразование фиксированной точки и генерацию HDL-кода

Запустите Советника по вопросам Рабочего процесса. В Советнике по вопросам Рабочего процесса щелкните правой кнопкой по шагу 'HDL Code Generation'. Выберите опцию, 'Запущенную к выбранной задаче', чтобы запустить все шаги с начала через генерацию HDL-кода.

Исследуйте сгенерированный HDL-код путем щелчка по ссылкам в логарифмической панели Советника по вопросам Рабочего процесса.

Сгенерируйте испытательный стенд Cosimulation и запущенный HDL Cosimulation

Выберите шаг "Verify with Cosimulation".

Установите флажок, пометил "Generate cosimulation test bench". То действие включит другой выбор в диалоговом окне, позволяя вам выбрать регистрировать выходные параметры для сравнения, выбирать ваш предпочтительный симулятор HDL и симулировать сгенерированный cosimulation испытательный стенд. Проверяйте оба из остающихся флажков и выберите ваш предпочтительный симулятор HDL.

Выберите "GUI" как режим выполнения симулятора HDL.

Нажмите "Run" и наблюдайте графики, сравнивающие выходные параметры cosimulation к выходным параметрам Системного объекта фиксированной точки. Также отметьте переходы сигнала в средстве просмотра формы волны симулятора HDL.

Настройте свою макетную плату FPGA

Относитесь, чтобы Настроить Макетную плату FPGA для получения информации о подготовке вашей платы FPGA и компьютера, чтобы связаться для FPGA в симуляции цикла.

Сгенерируйте FPGA в цикле (FIL) испытательный стенд и запущенная симуляция FIL

Выберите шаг "Verify with FPGA in the Loop" в панели левой стороны Советника по вопросам Рабочего процесса.

Установите все 3 флажка (для FPGA в генерации испытательного стенда цикла, выведите логгирование, симуляцию сгенерированного испытательного стенда FIL.

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

Нажмите "Run" и наблюдайте графики, сравнивающие выходные параметры FPGA к выходным параметрам Системного объекта фиксированной точки.

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

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

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