Косимуляция и цикл в рабочем процессе MATLAB-to-HDL

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

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

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

  • MATLAB

  • Fixed-Point Designer

  • HDL Verifier

  • Программное обеспечение для разработки FPGA (Xilinx ® ISE ® или Vivado ® или ПО для разработки Intel ® Quartus ® II)

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

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

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

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

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

MATLAB- Проекта

Код MATLAB, используемый в этом примере, реализует простой симметричный конечная импульсная характеристика и использует dsp. Задержка системного объекта в состояние модели. Этот пример также показывает испытательный стенд 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 Coder см. учебник «Начало работы с MATLAB в HDL-процессе» (HDL Coder).

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

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

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

Запустите советник по рабочим процессам. В Рабочий процесс Advisor щелкните правой кнопкой мыши шаг 'Генерации HDL-кода'. Выберите опцию «Run to selected task», чтобы выполнить все шаги от начала до генерации HDL-кода.

Исследуйте сгенерированный HDL-код, щелкнув по ссылкам на панели журнала Workflow Advisor.

Сгенерируйте Испытательный стенд косимуляции и запустите косимуляцию HDL

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

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

Выберите «графический интерфейс пользователя» в качестве Симулятора HDL режима выполнения.

Щелкните «Запуском» и наблюдайте графики, сравнивающие выходные параметры косимуляции с выходными параметрами Системного объекта с фиксированной точкой. Также обратите внимание на переходы сигнала в Симулятор HDL средства просмотра формы волны.

Настройте свой совет по разработке FPGA

Информацию о настройке платы FPGA и компьютера для связи в процессе моделирования FPGA в контуре см. в симуляции «Настройка платы разработки цикл».

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

Выберите шаг «Verify цикл» на левой панели Workflow Advisor.

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

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

Нажмите «Запуск» и наблюдайте графики, сравнивающие выходные параметры ПЛИС с выходными параметрами Системного объекта с фиксированной точкой.

Очистка сгенерированных файлов

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

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