В этом примере показано, как проверить сгенерированный 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, используемый в этом примере, реализует простой симметричный конечная импульсная характеристика и использует 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
Чтобы создать новый проект, введите следующую команду:
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.
Запустите советник по рабочим процессам. В Рабочий процесс Advisor щелкните правой кнопкой мыши шаг 'Генерации HDL-кода'. Выберите опцию «Run to selected task», чтобы выполнить все шаги от начала до генерации HDL-кода.
Исследуйте сгенерированный HDL-код, щелкнув по ссылкам на панели журнала Workflow Advisor.
Выберите шаг «Проверить с косимуляцией».
Установите флажок «Сгенерировать испытательный стенд косимуляции». Это действие включит другие варианты в диалоговом окне, позволяющие вам выбрать для сравнения логгирование выходов, выбор предпочтительных Симуляторов HDL и моделирование сгенерированных испытательных стендов косимуляции. Установите оба оставшихся флажка и выберите предпочтительные Симуляторы HDL.
Выберите «графический интерфейс пользователя» в качестве Симулятора HDL режима выполнения.
Щелкните «Запуском» и наблюдайте графики, сравнивающие выходные параметры косимуляции с выходными параметрами Системного объекта с фиксированной точкой. Также обратите внимание на переходы сигнала в Симулятор HDL средства просмотра формы волны.
Информацию о настройке платы FPGA и компьютера для связи в процессе моделирования FPGA в контуре см. в симуляции «Настройка платы разработки цикл».
Выберите шаг «Verify цикл» на левой панели Workflow Advisor.
Установите все 3 флажка (для генерации испытательного стенда FPGA-in-the-Loop, выходного логгирования, симуляции сгенерированного испытательного стенда FIL.
Выберите плату разработки FPGA по вашему выбору.
Нажмите «Запуск» и наблюдайте графики, сравнивающие выходные параметры ПЛИС с выходными параметрами Системного объекта с фиксированной точкой.
Выполните следующие команды, чтобы очистить временную папку проекта.
clear mex; cd (hdlverif_demo_dir); rmdir(mlhdlv_temp_dir, 's');