В этом примере показано, как проверить сгенерированный 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, используемый в этом примере, реализует простой симметричный КИХ-фильтр и использует 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
Чтобы создать новый проект, введите следующую команду:
кодер-hdlcoder - новый mlhdlv_cosimFIL_prj
Затем добавьте файл 'mlhdlc_sysobj_ex.m' в проект как функция MATLAB и 'mlhdlc_sysobj_ex_tb.m' как Испытательный стенд MATLAB.
Можно обратиться к Началу работы с MATLAB к примеру по Рабочему процессу HDL для более полного примера при создании и заполнении проектов HDL Coder MATLAB.
Для этого Системного объекта MATLAB с плавающей точкой все входные параметры удваивают Скаляр. Задайте их использование, как таковое выпадающих меню предусмотрело функцию MATLAB.
Запустите Советника по вопросам Рабочего процесса. В Советнике по вопросам Рабочего процесса щелкните правой кнопкой по шагу 'HDL Code Generation'. Выберите опцию, 'Запущенную к выбранной задаче', чтобы запустить все шаги с начала через генерацию HDL-кода.
Исследуйте сгенерированный HDL-код путем щелчка по ссылкам в логарифмической панели Советника по вопросам Рабочего процесса.
Выберите шаг "Verify with Cosimulation".
Установите флажок, пометил "Generate cosimulation test bench". То действие включит другой выбор в диалоговом окне, позволяя вам выбрать регистрировать выходные параметры для сравнения, выбирать ваш предпочтительный симулятор HDL и симулировать сгенерированный cosimulation испытательный стенд. Проверяйте оба из остающихся флажков и выберите ваш предпочтительный симулятор HDL.
Выберите "GUI" как режим выполнения симулятора HDL.
Нажмите "Run" и наблюдайте графики, сравнивающие выходные параметры cosimulation к выходным параметрам Системного объекта фиксированной точки. Также отметьте переходы сигнала в средстве просмотра формы волны симулятора HDL.
Относитесь, чтобы Настроить Макетную плату FPGA для получения информации о подготовке вашей платы FPGA и компьютера, чтобы связаться для FPGA в симуляции цикла.
Выберите шаг "Verify with FPGA in the Loop" в панели левой стороны Советника по вопросам Рабочего процесса.
Установите все 3 флажка (для FPGA в генерации испытательного стенда цикла, выведите логгирование, симуляцию сгенерированного испытательного стенда FIL.
Выберите макетную плату FPGA по вашему выбору.
Нажмите "Run" и наблюдайте графики, сравнивающие выходные параметры FPGA к выходным параметрам Системного объекта фиксированной точки.
Запустите следующие команды, чтобы очистить временную папку проекта.
clear mex; cd (hdlverif_demo_dir); rmdir(mlhdlv_temp_dir, 's');