项目背景(具体步骤直接跳到下面目录)
最近实验室要加速一种图像重建算法,别的实验室都是用1660GPU加速的,我们实验室想搞点不一样的,让我调研看看有没有什么有创新的加速方法。一开始看了KV260,感觉性能一般,如果拿这个做速度大概率比不过GPU,最多也就有一个小型化的创新点。又看了XILINX新出的VERSAL系列,好像挺厉害,但无奈官方板子贵的离谱,看了一圈只有ALINX他们家出了一款基于VE2302的板子,但是没有加速平台可用,必须要自己一点一点从vivado上搭建。性能可能会超过1660GPU。为了成功说服课题组给我买这个板子,我决定先用手头的ZYNQ7020从头搭建一个加速平台,先跑通一遍!
XILINX加速开发现在都是使用vitis软件,但是ZYNQ7000实在太老了,vitis对7000系列自定义平台支持很差,或者说没有,而且没有官方DEMO,用vitis去开发zynq7020加速简直是在摸着石头过河。摸了半个月都没摸出来,算了,直接退回SDSoC , SDSoC可以说是vitis的前身,只用于嵌入式平台的加速开发,SDAceel是用于ALVEO系列那种主机加速应用开发的。
建议看官严格根据本教程走,否则会出各种奇怪的报错,折磨心性。流程之繁琐复杂令人咋舌,坑之多令人忍俊不禁,还好我替大家走了一遭,跟着本教程按部就班即可完成。(完成一部分,正在编写中。。。)
目录
ZYNQ7020自定义板卡 在SDSoC平台上配置xfopencv加速的流程:
想在自定义板卡上运行xfopencv和opencv库,则必须要经过以下步骤:
①在vivado上搭建自定义硬件平台。
②基于该硬件平台,使用petalinux工具生成linux系统(用裸机不能实现,必须搭建嵌入式linux系统)
③基于petalinux生成的一些文件,在SDSoC里面创建自定义软件平台。
④基于该软件平台开发加速应用。
软件环境:sdx2018.2版本,petalinux2018.2,ubuntu16.04.3 (版本必须一致,一个数字都不能有差。如果用别的版本,一定要看官方手册里面的兼容系统,惨痛教训!)
一、vivado自定义硬件平台
①创建blockdesign (创建blockdesign这里Xilinx官方介绍的还是很详细的,看不懂英文的可以CSDN一下别的,比较简单。官方教程:https://github.com/Xilinx/SDSoC-Tutorials/blob/2018.2-Tutorials/platform-creation-tutorial/Lab1-Creating-DSA-for-Zynq-7000-SoC-Processor-Design.md )
- 添加ZYNQ处理器
- 添加clock wizard
- 添加复位模块
- 添加concat模块
②设置PFM属性并导出dsa文件
设置时钟PFM:注意时钟编号从0开始。
set_property PFM.CLOCK {\
clk_out1 {id "0" is_default "false" proc_sys_reset "proc_sys_reset_0"} \
clk_out2 {id "1" is_default "true" proc_sys_reset "proc_sys_reset_1" } \
clk_out3 {id "2" is_default "false" proc_sys_reset "proc_sys_reset_2"} \
clk_out4 {id "3" is_default "false" proc_sys_reset "proc_sys_reset_3"} \
} [get_bd_cells /clk_wiz_0]
设置AXI接口PFM:(很长一条,直接复制)
set_property PFM.AXI_PORT {M_AXI_GP0 {memport "M_AXI_GP"} M_AXI_GP1 {memport "M_AXI_GP"} S_AXI_ACP {memport "S_AXI_ACP" sptag "ACP" memory "processing_system7_0 ACP_DDR_LOWOCM"} S_AXI_HP0 {memport "S_AXI_HP" sptag "HP0" memory "processing_system7_0 HP0_DDR_LOWOCM"} S_AXI_HP1 {memport "S_AXI_HP" sptag "HP1" memory "processing_system7_0 HP1_DDR_LOWOCM"} S_AXI_HP2 {memport "S_AXI_HP" sptag "HP2" memory "processing_system7_0 HP2_DDR_LOWOCM"} S_AXI_HP3 {memport "S_AXI_HP" sptag "HP3" memory "processing_system7_0 HP3_DDR_LOWOCM"} } [get_bd_cells /processing_system7_0]
设置中断PFM:
set intVar []
for {set i 0} {$i < 16} {incr i} { lappend intVar In$i {} }
set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_0]
设置平台名称:
set_property PFM_NAME "xilinx.com:ZYNQ7020pfm:ZYNQ7020pfm:1.0" [get_files PYNQ.bd]
导出dsa文件:该文件名一定要和PFM_NAME里面的平台名一样!!!
windows:
write_dsa –force D:/projects/xilinxprj/verion201802/vivado/ZYNQ7020pfm/ZYNQ7020pfm.dsa -include_bit
validate_dsa D:/projects/xilinxprj/verion201802/vivado/ZYNQ7020pfm/ZYNQ7020pfm.dsa
ubuntu:
write_dsa -force /home/szy/xilinxprj/vivado/zynq7020pfm/zynq7020pfm.dsa -include_bit
validate_dsa /home/szy/xilinxprj/vivado/zynq7020pfm/zynq7020pfm.dsa
二、petalinux工具生成嵌入式linux
假设你已经安装好petalinux工具
petalinux-create --type project --template zynq --name zynq7020plnx
在设备树文件
<petalinux-project>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
中添加以下代码
/include/ "system-conf.dtsi"
/ {
xlnk {
compatible = "xlnx,xlnk-1.0";
};
};
cd zynq7020plnx/
petalinux-config --get-hw-description ../zynq7020pfm/
//配置启动参数
DTG Settings --->
Kernel Bootargs --->
[] generate boot args automatically(OFF)
user set kernel bootargs( console=ttyPS0,115200 earlyprintk quiet )
网络不好的,在这里可参考下面设置本地文件包路径:
(要先下载文件包,很多教程,不详细介绍了)
Yocto Settings --->
Add pre-mirror url ---> pre-mirror url path
Local sstate feeds settings ---> local sstate feeds url
save -> ok -> exit 连按数次esc退出到命令行界面
petalinux-config -c rootfs
//添加stdc++库的支持:
Filesystem Packages --->
misc --->
gcc-runtime --->
libstdc++(ON)
//添加opencv库
packagegroup-petalinux ---> packagegroup-petalinux-opencv下使能packagegroup-petalinux-opencv
save -> ok -> exit 连按数次esc退出到命令行界面
petalinux-config -c kernel
//配置内核
Device Drivers --->
Generic Driver Options --->
Size in Mega Bytes(256)
[*] Staging drivers--->
[*] Xilinx APF Accelerator driver --->
[*] Xilinx APF DMA engines support
save -> ok -> exit 连按数次esc退出到命令行界面
petalinux-build
经过以上步骤,在images/linux里面就有了所有我们需要的文件

image.ub: 一些文件库的镜像
u-boot.elf: 启动文件
zynq_fsbl.elf: 第一阶段引导文件
system.dtb: 设备树文件,包含了最开始设置的xlnk信息
三、SDSoC创建自定义软件平台
四、SDSoC创建加速应用
注意坑,安装完SDSoC后,会在桌面生成sdx快捷图标。
但是我提前设置了开启在控制台自动设置SYSROOT环境变量,从快捷图标点进去不会设置环境变量,导致一直报找不到某些文件的错误,你看它提醒的多贴心:“可能会引起预料之外的错误” 😭

1293

被折叠的 条评论
为什么被折叠?



