Сгенерируйте скрипт программного интерфейса, чтобы зондировать и ядро IP HDL быстрого прототипирования

Когда вы запускаете рабочий процесс элемента кода аппаратного программного обеспечения для платформ SoC, вы генерируете ядро IP HDL для алгоритма DUT и затем интегрируете ядро IP в исходный проект. Смотрите Рабочий процесс Элемента кода аппаратного программного обеспечения для Платформ SoC.

К быстрому прототипированию и тесту ядро IP HDL на целевом компьютере, можно сгенерировать скрипт программного интерфейса. Скрипт содержит порты DUT и информацию об отображении интерфейса, который использование HDL Coder™ создать драйверы AXI и получить доступ к ядру IP HDL.

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

Сгенерируйте программный интерфейс

При выполнении рабочего процесса Генерации Ядра IP можно сгенерировать скрипт программного интерфейса и модель от HDL Workflow Advisor пользовательский интерфейс или в командной строке.

От пользовательского интерфейса, в Embedded System Integration> задача Generate Software Interface, устанавливают флажок Generate MATLAB software interface script.

Когда вы запускаете рабочий процесс Генерации Ядра IP к задаче Generate Software Interface и устанавливаете флажок Generate MATLAB software interface script, два файла MATLAB сгенерированы:

  • gs_modelName_setup.m, который является скриптом настройки, который добавляет ведомое устройство AXI4 и AXI4-потоковые интерфейсы. Скрипт также содержит объекты порта DUT, которые имеют имя порта, направление, тип данных и информацию об отображении интерфейса. Скрипт затем сопоставляет порты DUT с соответствующими интерфейсами.

  • gs_modelName_interface.m, то, которое создает целевой объект, инстанцирует скрипта настройки gs_modelName_setup.m, и затем подключения к целевому компьютеру. Скрипт затем отправляет чтение и команды записи к сгенерированному ядру IP HDL.

Если вы предназначаетесь для автономных плат FPGA, вы не можете сгенерировать модель программного интерфейса. Вместо этого можно сгенерировать скрипт программного интерфейса и протестировать ядро IP при помощи Ведущего драйвера AXI MATLAB.

  1. В задаче Set Target Reference Design, набор Insert JTAG MATLAB as AXI Master к на. Запустите рабочий процесс к задаче Generate Software Interface.

  2. В задаче Generate Software Interface установите флажок Generate Software interface script и запустите эту задачу.

В командной строке экспортируйте настройки HDL Workflow Advisor в скрипт, и затем используйте эти свойства с объектом Workflow Configuration. Этот скрипт задает выполнение задачи программного интерфейса путем генерации модели и скрипта. Если вы пропускаете задачу путем установки RunTaskGenerateSoftwareInterface на ложь, то модель и скрипт не сгенерированы. Смотрите Конфигурируют и Рабочий процесс Генерации Ядра IP Запуска со Скриптом.

% Export Workflow Configuration Script

% ...

%% Load the Model
load_system('hdlcoder_led_blinking');

%% Model HDL Parameters
% Set Model HDL parameters

% ...

hdlset_param('hdlcoder_led_blinking', 'SynthesisTool', 'Xilinx Vivado');
hdlset_param('hdlcoder_led_blinking', 'Workflow', 'IP Core Generation');

% ...

% Set Workflow tasks to run
hWC.RunTaskGenerateSoftwareInterface = true;
hWC.GenerateSoftwareInterfaceModel = true;
hWC.GenerateSoftwareInterfaceScript = true;

% ...

%% Run the workflow
hdlcoder.runWorkflow('hdlcoder_led_blinking/led_counter', hWC);

Скрипт программного интерфейса

Для быстрого прототипирования и тестирования базовой функциональности IP HDL, используйте скрипт программного интерфейса. Скриптом является файл MATLAB, который сгенерирован на основе исходного проекта и табличных настроек интерфейса целевой платформы. Это содержит команды, которые позволяют вам соединиться с целевым компьютером, и записать в или читать из сгенерированного ядра IP из MATLAB. Для автономных плат FPGA используйте скрипт интерфейса сгенерированного программного обеспечения, чтобы проверить базовую функциональность IP HDL при помощи Ведущего устройства AXI MATLAB.

Скрипт программного интерфейса имеет то же имя как ваша исходная модель с префиксным gs_ и постфиксный _interface. Скрипт инстанцирует функции настройки, которая сгенерирована, когда вы включаете генерацию скрипта программного интерфейса. Например, этот код показывает функцию настройки, сгенерированную для модели hdlcoder_sfir_fixed_stream.slx, с исходным проектом и целевой платформой соединяют интерфейсом с табличными ранее заданными настройками. Функция настройки содержит команды для ведомого устройства AXI4 и AXI4-потоковых интерфейсов, что использование HDL Coder, чтобы управлять портами DUT в сгенерированном ядре IP HDL, которые сопоставлены с соответствующими интерфейсами.

function gs_hdlcoder_sfir_fixed_stream_setup(hFPGA)
%--------------------------------------------------------------------------
% Software Interface Script Setup
% 
% Generated with MATLAB 9.10 (R2021a) at 09:13:05 on 10/07/2020.
% This function was created for the IP Core generated from design 'hdlcoder_sfir_fixed_stream'.
% 
% Run this function on an "fpga" object to configure it with 
% the same interfaces as the generated IP core.
%--------------------------------------------------------------------------

%% AXI4-Lite
addAXI4SlaveInterface(hFPGA, ...
	"InterfaceID", "AXI4-Lite", ...
	"BaseAddress", 0xA0000000, ...
	"AddressRange", 0x10000);

hPort_h_in1 = hdlcoder.DUTPort("h_in1", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,16,10), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4-Lite", ...
	"IOInterfaceMapping", "0x100");

hPort_h_in2 = hdlcoder.DUTPort("h_in2", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,16,10), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4-Lite", ...
	"IOInterfaceMapping", "0x104");

hPort_h_in3 = hdlcoder.DUTPort("h_in3", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,16,10), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4-Lite", ...
	"IOInterfaceMapping", "0x108");

hPort_h_in4 = hdlcoder.DUTPort("h_in4", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,16,10), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4-Lite", ...
	"IOInterfaceMapping", "0x10C");

mapPort(hFPGA, [hPort_h_in1, hPort_h_in2, hPort_h_in3, hPort_h_in4]);

%% AXI4-Stream
addAXI4StreamInterface(hFPGA, ...
	"InterfaceID", "AXI4-Stream", ...
	"WriteEnable", true, ...
	"WriteFrameLength", 1024, ...
	"ReadEnable", true, ...
	"ReadFrameLength", 1024);

hPort_x_in_data = hdlcoder.DUTPort("x_in_data", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,16,10), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4-Stream");

hPort_y_out_data = hdlcoder.DUTPort("y_out_data", ...
	"Direction", "OUT", ...
	"DataType", numerictype(1,32,20), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4-Stream");

mapPort(hFPGA, [hPort_x_in_data, hPort_y_out_data]);

end

Это - функция настройки в качестве примера для модели с шиной, сопоставленной с ведомым интерфейсом AXI4. Как показано в скрипте, элементы шины представлены как подпорты hdlcoder.DUTPort объекты.

function gs_AXI4SlaveMultipleBus_setup(hFPGA)
%--------------------------------------------------------------------------
% Software Interface Script Setup
% 
% Generated with MATLAB 9.10 (R2021a) at 16:20:32 on 16/11/2020.
% This function was created for the IP Core generated from design 'AXI4SlaveMultipleBus'.
% 
% Run this function on an "fpga" object to configure it with the same interfaces as the generated IP core.
%--------------------------------------------------------------------------

%% AXI4
addAXI4SlaveInterface(hFPGA, ...
	"InterfaceID", "AXI4", ...
	"BaseAddress", 0x400D0000, ...
	"AddressRange", 0x10000);

hPort_bus1_in_scalar_in1 = hdlcoder.DUTPort("scalar_in1", ...
	"Direction", "IN", ...
	"DataType", numerictype('single'), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4", ...
	"IOInterfaceMapping", "0x100");

hPort_bus1_in_scalar_in2 = hdlcoder.DUTPort("scalar_in2", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,8,0), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4", ...
	"IOInterfaceMapping", "0x104");

hPort_bus1_in_scalar_in3 = hdlcoder.DUTPort("scalar_in3", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,32,0), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4", ...
	"IOInterfaceMapping", "0x108");

hPort_bus1_in_scalar_in4 = hdlcoder.DUTPort("scalar_in4", ...
	"Direction", "IN", ...
	"DataType", numerictype(1,16,10), ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4", ...
	"IOInterfaceMapping", "0x10C");

hPort_bus1_in_vector_in = hdlcoder.DUTPort("vector_in", ...
	"Direction", "IN", ...
	"DataType", numerictype(0,32,0), ...
	"Dimension", [1 2], ...
	"IOInterface", "AXI4", ...
	"IOInterfaceMapping", "0x110");

hPort_bus1_in = hdlcoder.DUTPort("bus1_in", ...
	"Direction", "IN", ...
	"DataType", "Bus", ...
	"Dimension", [1 1], ...
	"IOInterface", "AXI4", ...
	"SubPorts", [hPort_bus1_in_scalar_in1, hPort_bus1_in_scalar_in2, hPort_bus1_in_scalar_in3, hPort_bus1_in_scalar_in4, hPort_bus1_in_vector_in]);

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

%--------------------------------------------------------------------------
% Software Interface Script
% 
% Generated with MATLAB 9.10 (R2020b) at 09:13:10 on 10/07/2020.
% This script was created for the IP Core generated from design 'hdlcoder_sfir_fixed_stream'.
% 
% Use this script to access DUT ports in the design mapped to compatible IP core interfaces.
% You can write to input ports in the design and read from output ports directly from MATLAB.
%
% To write to input ports, use the "writePort" command and specify port name and input data. 
% The input data will be cast to the DUT port's data type before writing. 
%
% To read from output ports, use the "readPort" command and specify the port name. 
% The output data will be returned with the same data type as the DUT port.
%
% Use the "release" command to release MATLAB's control of the hardware resources.
%--------------------------------------------------------------------------

%% Create fpga object
hFPGA = fpga("Xilinx");

%% Setup fpga object
% This function configures "fpga" object with same interfaces as the generated IP core
gs_hdlcoder_sfir_fixed_stream_setup(hFPGA);

%% Write/read DUT ports
% Uncomment the following lines to write/read DUT ports in the generated IP Core.
% Update the example data in the write commands with meaningful data to write to the DUT.
%% AXI4-Lite
writePort(hFPGA, "h_in1", zeros([1 1]));
writePort(hFPGA, "h_in2", zeros([1 1]));
writePort(hFPGA, "h_in3", zeros([1 1]));
writePort(hFPGA, "h_in4", zeros([1 1]));

%% AXI4-Stream
writePort(hFPGA, "x_in_data", zeros([1 1024]));
data_y_out_data = readPort(hFPGA, "y_out_data");

%% Release hardware resources
release(hFPGA)

См. прототипный проект FPGA на оборудовании с живыми данными при помощи Команд MATLAB

Это - скрипт программного интерфейса в качестве примера, чтобы читать и записать данные для моделей, которые имеют типы данных шины, сопоставленные с ведомыми интерфейсами AXI4.

Чтобы записать во вход шины, вы можете также:

  • Запишите в отдельные подпорты путем определения полного имени подпорта, такие как bus1_in.scalar_in1.

  • Запишите в целую шину путем определения имени верхнего порта, такого как bus1_in. Передайте данные, которые будут записаны как struct, зарегистрированные имена которого совпадают с именами подпорта. Не все имена подпорта должны быть частью struct. Подпорты без соответствующих полей struct пропущены при записи в порт.

Чтобы читать из входа шины, вы можете также:

  • Считайте отдельный подпорт путем определения полного имени подпорта, такого как bus1_out.scalar.in1.

  • Считайте целый вход шины путем определения имени верхнего порта, такого как bus1_out.

%--------------------------------------------------------------------------
% Software Interface Script
% 
% Generated with MATLAB 9.10 (R2021a) at 16:20:33 on 16/11/2020.
% This script was created for the IP Core generated from design 'AXI4SlaveMultipleBus'.
% 
% Use this script to access DUT ports in the design that were mapped to compatible IP core interfaces.
% You can write to input ports in the design and read from output ports directly from MATLAB.
% To write to input ports, use the "writePort" command and specify the port name and input data. The input data will be cast to the DUT port's data type before writing.
% To read from output ports, use the "readPort" command and specify the port name. The output data will be returned with the same data type as the DUT port.
% Use the "release" command to release MATLAB's control of the hardware resources.
%--------------------------------------------------------------------------

%% Create fpga object
hFPGA = fpga("Xilinx");

%% Setup fpga object
% This function configures the "fpga" object with the same interfaces as the generated IP core
gs_AXI4SlaveMultipleBus_setup(hFPGA);

%% Write/read DUT ports
% Uncomment the following lines to write/read DUT ports in the generated IP Core.
% Update the example data in the write commands with meaningful data to write to the DUT.
%% AXI4

% There are two ways to write a DUT bus ports
% (1). Prepare a struct value and write it to the whole bus port.
writePort(hFPGA, "bus1_in", struct());
% (2). Prepare a value for each member of the bus and write it individually.
writePort(hFPGA, "bus1_in.scalar_in1", zeros([1 1]));
writePort(hFPGA, "bus1_in.scalar_in2", zeros([1 1]));
writePort(hFPGA, "bus1_in.scalar_in3", zeros([1 1]));
writePort(hFPGA, "bus1_in.scalar_in4", zeros([1 1]));
writePort(hFPGA, "bus1_in.vector_in", zeros([1 2]));

Смотрите также

Объекты

Функции

Похожие темы