В этом примере показано, как задать и указать пользовательскую плату и исходный проект для рабочего процесса ядра процессора IP глубокого обучения. Если у вас есть система, которая имеет предварительную обработку и постобработку блоков проекта под тестом (DUT), можно выполнить итерации на тех блоках, чтобы улучшать производительность и использование ресурса при помощи HDL Coder™. Создайте пользовательский исходный проект, который включает блоки DUT и определение для вашего пользовательского ядра процессора IP глубокого обучения.
Сначала создайте пользовательскую плату и исходный проект. Укажите ядро процессора IP глубокого обучения в своей пользовательской плате и исходном проекте. Разверните ядро процессора IP глубокого обучения в свою пользовательскую плату путем генерации пользовательского потока битов. Используйте MATLAB®, чтобы взаимодействовать через интерфейс с ядром процессора IP глубокого обучения.
Изображение показывает рабочий процесс, чтобы развернуть ядро процессора IP глубокого обучения в пользовательскую плату.
Укажите пользовательскую плату в HDL Workflow Advisor.
1. Создайте файл регистрации плат с именем hdlcoder_board_customization.m
и добавьте его в путь MATLAB. hdlcoder_board_customization.m
функция должна возвратить второй выходной параметр для рабочего процесса. Установите рабочий процесс на:
workflow = hdlcoder.Workflow.DeepLearningProcessor;
function [boardList, workflow] = hdlcoder_board_customization % Board plugin registration file % 1. Any registration file with this name on MATLAB path will be picked up % 2. Registration file returns a cell array pointing to the location of % the board plugins % 3. Board plugin must be a package folder accessible from MATLAB path, % and contains a board definition file
% Copyright 2019 The MathWorks, Inc.
boardList = { ... 'DLZCU102.plugin_board', ... 'DLZC706.plugin_board', ... };
workflow = hdlcoder.Workflow.DeepLearningProcessor;
end
2. Создайте файл определения платы.
% Copyright 2019 The MathWorks, Inc.
% Board definition of ZCU102 function hB = plugin_board
% Construct board object
hB = hdlcoder.Board;
hB.BoardName = 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit';
% FPGA device information hB.FPGAVendor = 'Xilinx'; hB.FPGAFamily = 'Zynq UltraScale+'; hB.FPGADevice = 'xczu9eg-ffvb1156-2-e'; hB.FPGAPackage = ''; hB.FPGASpeed = '';
% Tool information hB.SupportedTool = {'Xilinx Vivado'};
% FPGA JTAG chain position
hB.JTAGChainPosition = 1;
%% Add interfaces % Standard "External Port" interface hB.addExternalPortInterface( ... 'IOPadConstraint', {'IOSTANDARD = LVCMOS18'});
% GPIO LEDs hB.addExternalIOInterface( ... 'InterfaceID', 'LEDs General Purpose', ... 'InterfaceType', 'OUT', ... 'PortName', 'GPIO_LED', ... 'PortWidth', 8, ... 'FPGAPin', {'AG14', 'AF13', 'AE13', 'AJ14', 'AJ15', 'AH13', 'AH14', 'AL12'}, ... 'IOPadConstraint', {'IOSTANDARD = LVCMOS33'});
Укажите пользовательский исходный проект в HDL Workflow Advisor.
1. Создайте регистрационный файл с именем исходного проекта hdlcoder_ref_design_customization.m
содержание списка плагинов исходного проекта сопоставлено с платой SoC.
function [rd, boardName] = hdlcoder_ref_design_customization % Reference design plugin registration file % 1. The registration file with this name inside of a board plugin folder % will be picked up % 2. Any registration file with this name on MATLAB path will also be picked up % 3. The registration file returns a cell array pointing to the location of % the reference design plugins % 4. The registration file also returns its associated board name % 5. Reference design plugin must be a package folder accessible from % MATLAB path, and contains a reference design definition file
% Copyright 2019 The MathWorks, Inc.
rd = {... 'DLZCU102.matlab_libiio_3axi4_master_2019_1.plugin_rd', ... };
boardName = 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit';
end
2. Создайте файл определения исходного проекта.
function hRD = plugin_rd % Reference design definition
% Copyright 2019-2020 The MathWorks, Inc.
% Construct reference design object hRD = hdlcoder.ReferenceDesign('SynthesisTool','Xilinx Vivado');
hRD.ReferenceDesignName = 'AXI-Stream DDR Memory Access : 3-AXIM'; hRD.BoardName = 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit';
% Tool information hRD.SupportedToolVersion = {'2019.1','2019.2','2020.1'};
%% Add custom design files % add custom Vivado design hRD.addCustomVivadoDesign( ... 'CustomBlockDesignTcl','system_top.tcl');
% Add constraint files hRD.CustomConstraints = {'ZCU102_DDR4.xdc'};
% Post Create Project Callback function to improve timing closure
hRD.PostCreateProjectFcn = @DLZCU102.matlab_libiio_3axi4_master_2019_1.callback_PostCreateProject;
% Add HDL Verifier JTAG as AXI Master IP from support package msg = message('hdlcommon:plugin:IPRepositoryHDLVerifierXilinxNotFound').getString; hRD.addIPRepository( ... 'IPListFunction','hdlverifier.fpga.vivado.iplist', ... 'NotExistMessage', msg);
% Add AXI4-Stream to AXI4-Master DDR Access IP hRD.addIPRepository( ... 'IPListFunction','hdlcoder.fpga.vivado.hdlcoder_axis2axim_iplist', ... 'NotExistMessage', 'AXI4-Stream to AXI4-Master IP not found.');
%% Add interfaces % add clock interface hRD.addClockInterface( ... 'ClockConnection', 'core_clkwiz/clk_out1', ... 'ResetConnection', 'sys_dut_rstgen/peripheral_aresetn',... 'DefaultFrequencyMHz', 50,... 'MinFrequencyMHz', 5,... 'MaxFrequencyMHz', 500,... 'ClockModuleInstance', 'core_clkwiz',... 'ClockNumber', 1);
% add AXI4 and AXI4-Lite slave interfaces hRD.addAXI4SlaveInterface( ... 'InterfaceConnection', 'axi_cpu_interconnect/M03_AXI', ... 'BaseAddress', {'0xA0000000','0x00A0000000'}, ... 'MasterAddressSpace', {'hdlverifier_axi_master_0/axi4m','sys_cpu/Data'}, ... 'InterfaceType', 'AXI4', ... 'IDWidth', 13);
3. Добавьте информацию о процессоре глубокого обучения в файл исходного проекта. Файл плагина исходного проекта должен содержать информацию о целевом интерфейсе и ядре процессора IP глубокого обучения, пробеле адреса памяти для ядра процессора IP глубокого обучения и команде, чтобы подтвердить исходный проект.
% Deep learning specific properties hRD.registerDeepLearningTargetInterface("JTAG"); hRD.registerDeepLearningTargetInterface("Ethernet"); hRD.registerDeepLearningMemoryAddressSpace(0x80000000, 0x20000000); % 512 MB
hRD.ResourcesUsed.LogicElements = 35000; hRD.ResourcesUsed.DSP = 3; hRD.ResourcesUsed.RAM = 77.5;
Завершенная плата и регистрационные файлы исходного проекта для Xilinx® Zynq® Ultrascale + (R) плата MPSoC ZCU102 могут быть найдены в,
supportpackages\R2021b\toolbox\dnnfpga\supportpackages\xilinx\boards
и
supportpackages\R2021b\toolbox\dnnfpga\supportpackages\xilinx\boards\+DLZCU102
.
Для получения дополнительной информации о том, как настроить, задайте и укажите пользовательскую плату, относятся к Началу работы с Предназначением для Zynq UltraScale + Платформа MPSoC (HDL Coder).
hdlcoder.ReferenceDesign
| registerDeepLearningMemoryAddressSpace
| registerDeepLearningTargetInterface
| validateReferenceDesignForDeepLearning