主要内容

deployCalibrationBitstream

类:dlhdl.ProcessorConfig
包:dlhdl

部署校验比特流和生成校准数据文件

自从R2022b

描述

例子

deployCalibrationBitstream (processorConfigObject,bitstreamPath)部署生成的比特流buildCalibrationBitstream并生成一个calibrationData.mat文件,其中包含的读写延迟值对应于不同的数据目标硬件板破裂长度。

输入参数

全部展开

处理器配置,指定为一个dlhdl.ProcessorConfig对象。

返回的路径生成的位流文件buildCalibrationBitstream方法,指定为一个特征向量。

例子

全部展开

这个例子展示了如何创建自定义,生成自定义的深度学习处理器IP核心板。在这个例子中:

  • 创建一个定制的董事会和参考设计

  • 估计网络性能和资源利用率

  • 生成一个定制的处理器和比特流

  • 部署网络通过使用定制的比特流

部署网络的图像显示了过程一个定制的董事会和检索的预测网络部署。

workflow.png

下面的例子使用了Xilinx®Kintex®UltraScale™KCU105董事会。董事会包含这些块:

  • 系统复位块——用来喂养的时钟和复位信号的设计。

  • 内存接口生成器(MIG) IP块——用于生成内存控制器和Xilinx fpga接口。

  • MATLAB JTAG AXI经理块,用MATLAB访问板载内存位置。更多细节,请参阅设置AXI经理(高密度脂蛋白校验)

生成的深度学习处理器IP核心融入你的参考设计。更多细节,请参阅董事会和参考设计登记制度(高密度脂蛋白编码器)

这张图片显示生成的深度学习处理器IP核dl_processor0集成到参考设计。

注册自定义的板

定义一个定制的SoC的接口和属性。注册Xilinx®Kintex®UltraScale™KCU105板:

1。创建一个委员会登记文件的名字hdlcoder_board_customization.m并将其添加到MATLAB路径。的hdlcoder_board_customization.m函数必须返回一个输出。有关更多信息,请参见注册一个定制的董事会(高密度脂蛋白编码器)

设置目标工作流DeepLearningProcessor。对其他目标信息工作流支持的HDL编码器™,明白了万博1manbetx工作流在高密度脂蛋白工作流顾问(高密度脂蛋白编码器)

函数(boardList、工作流)= hdlcoder_board_customization%板插件注册文件% 1。任何注册文件与这个名字在MATLAB路径将会捡起% 2。注册文件返回一个单元阵列指向的位置%的插件% 3。板插件必须包文件夹从MATLAB访问路径,%和包含一个定义文件%% 2022年版权MathWorks公司。
boardList = {“DLKCU105.plugin_board”,};工作流= hdlcoder.Workflow.DeepLearningProcessor;结束

2。创建定义文件。生成一个深度学习处理器,您必须定义ExternalMemorySize。该属性定义了目标板的DDR内存大小。

% 2022年版权MathWorks公司。
%董事会KCU105的定义函数hB = plugin_board ()
%建立董事会对象hB = hdlcoder.Board;
hB。BoardName =“Xilinx Kintex-Ultrascale KCU105评估板的;
% FPGA设备信息hB。FPGAVendor =“Xilinx”;hB。FPGAFamily =“KintexU”;hB。FPGADevice =“xcku040-ffva1156-2-e”;hB。FPGAPackage =;hB。FPGASpeed =;
%的工具信息hB。万博1manbetxSupportedTool = {“Xilinx Vivado”};
% FPGA JTAG链的位置hB。JTAGChainPosition = 1;
%外部DDR内存字节的大小hB。ExternalMemorySize = 0 x80000000;% 2 GB
%添加接口%的标准“外部端口”界面hB.addExternalPortInterface (“IOPadConstraint”,{“IOSTANDARD = LVCMOS18”});
%定义外部I / O接口板hB.addExternalIOInterface (“InterfaceID”,led通用的,“InterfaceType”,“出”,“PortName”,gpl授权的,“PortWidth”8“FPGAPin”,{“AP8”,“H23”,“P20”,“P21”,“N22”,“锰”,“R23”,“P23”},“IOPadConstraint”,{“IOSTANDARD = LVCMOS18”});
%定义外部I / O接口板hB.addExternalIOInterface (“InterfaceID”,“用户”按钮,“InterfaceType”,“在”,“PortName”,“铅”,“PortWidth”, 1“FPGAPin”,{“AE10”},“IOPadConstraint”,{“IOSTANDARD = LVCMOS18”});

注册自定义的参考设计

定义自定义的接口和属性SoC设计参考。创建一个自定义参考设计:

1。创建一个参考设计注册文件命名hdlcoder_ref_design_customization.m包含与董事会相关的参考设计的插件列表。有关更多信息,请参见注册一个定制的参考设计(高密度脂蛋白编码器)

函数[rd, boardName] = hdlcoder_ref_design_customization%参考设计插件注册文件% 1。具有该名称的注册文件内部董事会插件文件夹中%将捡起% 2。任何注册文件与这个名字在MATLAB路径也会捡起% 3。注册文件返回一个单元阵列指向的位置%的参考设计插件% 4。注册文件还返回相关董事会的名字% 5。参考设计插件必须可以从一个包文件夹% MATLAB路径,包含一个参考设计定义文件%% 2022年版权MathWorks公司。
rd = {“DLKCU105.matlab_3axi4_master_2020_1.plugin_rd”,};
boardName =“Xilinx Kintex-Ultrascale KCU105评估板的;
结束

2。创建参考设计定义文件。生成一个深度学习处理器IP核心,您必须定义这三个AXI4主界面:

  • AXI4主激活数据

  • AXI4主重量数据

  • AXI4主调试

函数hRD = plugin_rd ()%参考设计的定义
% 2022年版权MathWorks公司。
%构造设计对象的引用hRD = hdlcoder.ReferenceDesign (“SynthesisTool”,“Xilinx Vivado”);
hRD。ReferenceDesignName =“AXI-Stream DDR内存访问:3-AXIM”;hRD。BoardName =“Xilinx Kintex-Ultrascale KCU105评估板的;
%的工具信息hRD。万博1manbetxSupportedToolVersion = {“2020.1”,“2020.2”};
%添加自定义设计文件
%添加自定义Vivado设计hRD.addCustomVivadoDesign (“CustomBlockDesignTcl”,“system_top.tcl”,“VivadoBoardPart”,“xilinx.com: kcu105: part0:1.0”);
%增加高密度脂蛋白校验JTAG AXI大师从支持IP包万博1manbetxhRD.addIPRepository (“IPListFunction”,“hdlverifier.fpga.vivado.iplist”,“NotExistMessage”,“IP库中没有找到。”);
%添加接口
%添加时钟接口hRD.addClockInterface (“ClockConnection”,“system_0 / clk_out1”,“ResetConnection”,“system_0 / peripheral_aresetn”,“DefaultFrequencyMHz”,125,“MinFrequencyMHz”10“MaxFrequencyMHz”,250,“ClockNumber”, 1“ClockModuleInstance”,“system_0 / clk_wiz_0”);
%添加AXI4和AXI4-Lite奴隶接口%这个奴隶接口用于这次DDR4和深度学习之间的IPhRD.addAXI4SlaveInterface (“InterfaceConnection”,“system_0 / M_AXI”,“BaseAddress”,“0 x44a00000”,“MasterAddressSpace”,“system_0 / hdlverifier_axi_manager_0 / axi4m”,“InterfaceType”,“AXI4”);
% AXI4主界面层与马克斯激活数据数据位宽为512hRD.addAXI4MasterInterface (“InterfaceID”,“AXI4主激活数据”,“Read万博1manbetxSupport”,真的,“Write万博1manbetxSupport”,真的,“MaxDataWidth”,512,“AddrWidth”32岁的“InterfaceConnection”,“axi_interconnect_0 / S01_AXI”,“TargetAddressSegments”{{“ddr4_0 / C0_DDR4_MEMORY_MAP / C0_DDR4_ADDRESS_BLOCK”hex2dec (“80000000”),hex2dec (“80000000”}});
% AXI4主界面层重量数据和最大数据位宽为512hRD.addAXI4MasterInterface (“InterfaceID”,“AXI4主重量数据”,“Read万博1manbetxSupport”,真的,“Write万博1manbetxSupport”,真的,“MaxDataWidth”,512,“AddrWidth”32岁的“InterfaceConnection”,“axi_interconnect_0 / S02_AXI”,“TargetAddressSegments”{{“ddr4_0 / C0_DDR4_MEMORY_MAP / C0_DDR4_ADDRESS_BLOCK”hex2dec (“80000000”),hex2dec (“80000000”}});
% AXI4主界面的调试器最大数据位宽为512hRD.addAXI4MasterInterface (“InterfaceID”,“AXI4主调试”,“Read万博1manbetxSupport”,真的,“Write万博1manbetxSupport”,真的,“MaxDataWidth”,512,“AddrWidth”32岁的“InterfaceConnection”,“axi_interconnect_0 / S03_AXI”,“TargetAddressSegments”{{“ddr4_0 / C0_DDR4_MEMORY_MAP / C0_DDR4_ADDRESS_BLOCK”hex2dec (“80000000”),hex2dec (“80000000”}});

3所示。参考设计插件文件必须包含的信息接口和深度学习目标处理器IP核心、内存地址空间的深度学习处理器IP核,和一个命令来验证参考设计。文件还要求信息资源消耗的参考设计。这些信息资源评估期间使用。深度学习处理器信息添加到参考设计文件:

%深度学习特定的属性hRD.registerDeepLearningTargetInterface (“JTAG”);hRD。registerDeepLearningMemoryAddressSpace (0 x80000000 0 x80000000);% 2 gb
%资源利用率的信息hRD.ResourcesUsed。LogicElements = 30500;hRD.ResourcesUsed。DSP = 3;hRD.ResourcesUsed。RAM = 26.5;

性能评估

减少所需的时间来设计和部署自定义深度学习网络,满足性能要求通过分析层延迟在部署网络。

估计性能的网络定制板通过收集从自定义校准数据板,通过:

  1. 生成一个校验比特流

  2. 部署校验比特流到目标定制

  3. 获取外部内存事务延迟

创建一个处理器配置对象。

hPC = dlhdl.ProcessorConfig;

指定TargetPlatform。这个自动设置SynthesisToolChipFamily, SynthesisToolDeviceName,ReferenceDesign属性。

高性能计算。TargetPlatform =“Xilinx Kintex-Ultrascale KCU105评估板的;

设置目标频率。

高性能计算。TargetFrequency = 100;

这个示例使用ResNet-18 pretrained网络。更多细节,请参阅resnet18。设置深度学习网络:

网= resnet18;

适合这个设计到目标,减少并行卷积处理器内核线程conv模块9。

setModuleProperty (hPC,“conv”,“ConvThreadNumber”9);

Xilinx Vivado路径设置为你的设计工具使用hdlsetuptoolpath函数,然后建立校验比特流。

hdlsetuptoolpath (“ToolName”,“Xilinx Vivado”,“路径”,“C: \ Xilinx \ Vivado \ 2020.2 \ bin \ vivado.bat ');bitstreamPath = buildCalibrationBitstream (hPC);

比特流部署到硬件和获得外部,内部内存事务延迟。您可以使用这些值来获得更好的估计层延迟。

bitstreamPath deployCalibrationBitstream (hPC);

deployCalibrationBitstream保存校准数据从硬件结构CalibrationData财产的dlhdl.ProcessorConfig对象。函数也可以节省校准数据作为MAT-file名称calibrationData.mat。你可以这个数据加载到一个新的dlhdl.ProcessorConfig对象通过输入:

负载(“calibrationData.mat”);高性能计算。CalibrationData = calData;

估计网络定制的处理器的性能配置。

estimatePerformance (hPC,净);

MicrosoftTeams-image (1) . png

资源评估

确认生成bistream和网络适合你的目标定义,通过使用estimateResources估算的资源利用率。学习如何评估您的自定义的资源利用,明白了估计资源利用率为自定义董事会和参考设计

为自定义生成定制的比特流处理器配置

为自定义生成一个比特流处理器配置hPC

dlhdl.buildProcessor (hPC);

在比特流文件和相关垫定位文件慢性消耗病\ dlhdl_prj \,在那里慢性消耗病是你的当前工作目录。比特流文件的名称dlprocessor.bit。垫文件的名称dlprocessor.mat。使用的比特流生成支持Xilinx董事会,复制万博1manbetxdlprocessor.bitdlprocessor.mat文件到当前工作目录。

部署定制的比特流和网络上运行的预测

生成比特流后,部署网络和网络上运行的预测。有关更多信息,请参考在FPGA原型深入学习网络和SoC设备页面。原型为例,看看骑自行车和行人分类利用FPGA

创建目标对象

创建一个目标对象与目标设备的供应商的名字。指定的接口连接主机使用的目标设备接口名称-值对。这个例子使用JTAG接口连接到目标。

hT = dlhdl.Target (“Xilinx”,“界面”,“JTAG”)

创建工作流对象ResNet-18网络

创建一个对象dlhdl.Workflow类。指定网络、比特流的名称和目标对象。

hW = dlhdl.Workflow (“网络”净,“比特流”,“dlprocessor.bit”,“目标”hT);

编制网络

运行编译的函数dlhdl.Workflow对象。

编译(hW)

部署FPGA比特流

部署网络在Xilinx KCU105 Kintex硬件,运行部署的函数dlhdl.Workflow对象。

部署(hW)

预测网络运行

加载示例图像。

img = imread (“sampleImage1.png”);imshow (img);

图像上运行一个预测。的结果输出参数包含前一层的输出ClassificationOutputLayer速度包含表分析器。

(因此,速度)=预测(hW img,“配置文件”,“上”);

MicrosoftTeams-image (2) . png

得到的输出类的预测。

[价值,idx] = max(结果);一会= net.Layers . class(结束);类名(idx)

版本历史

介绍了R2022b