ZYNQ7020自定义板卡 在SDSoC平台上配置xfopencv加速(保姆级2024年)

项目背景(具体步骤直接跳到下面目录)

最近实验室要加速一种图像重建算法,别的实验室都是用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环境变量,从快捷图标点进去不会设置环境变量,导致一直报找不到某些文件的错误,你看它提醒的多贴心:“可能会引起预料之外的错误” 😭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PuzzledForest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值