基于PYNQ-Z2复现Yolo_v2

参考资料:源项目工程开发板配置

0 使用说明

0.1 简介

本文档主要分为三个部分:
[1] 搭建HLS工程生成Yolo_v2的IP。
[2] 在Vivado中使用生成好的IP进行block design,导出bit文件和tcl文件。
[3] 将相关文件导入至PYNQ-Z2板中,在Jupyter Notebook上进行编程实现。

0.2 所需硬件

 PYNQ-Z2开发板、USB数据线、网线
 SD卡、读卡器

0.3 所需软件

 Vivado 2018.3
 Vivado HLS 2018.3

1 实验一:生成Yolo_v2的IP

1.1 实验任务

使用Vivado HLS软件生成Yolo_v2的IP,供后续使用。

1.2 实验步骤

打开Vivado HLS工具,点击Create New Project创建一个新工程

yolo2 python yolo2 python复现_嵌入式

输入工程名,这里以Yolo_demo为例

yolo2 python yolo2 python复现_fpga_02

连续点击Next到下图所示的Solution Configuration界面

yolo2 python yolo2 python复现_yolo2 python_03

点击Part Selection中的 … ,进入如下界面,Package选择clg400,Speed grade选择-1,最终选择xc7z020clg400-1,点击ok,返回到上一界面,点击Finish完成初始化

yolo2 python yolo2 python复现_IP_04

将提供的hls文件夹下的labels文件夹拷贝到项目工程目录下,将hls文件夹下的src和tb文件夹下的文件也拷到相同的目录下,如下所示。

yolo2 python yolo2 python复现_嵌入式_05

在Explorer界面右击Source,选择Add Files

yolo2 python yolo2 python复现_fpga_06

返回到上一级目录,选择刚拷贝进来的cnn.cpp和cnn.h文件。

yolo2 python yolo2 python复现_IP_07

在Explorer界面右击Test Bench,选择Add Files,将除了cnn.cpp和cnn.h之外的文件添加进来,结果如下图所示。

yolo2 python yolo2 python复现_IP_08

在Explorer界面右击Test Bench,选择Add Folder,将labels文件夹添加进来,结果如下图所示。

yolo2 python yolo2 python复现_fpga_09


点击Vivado HLS界面左上角的Project,选择Project Settings,进行顶层函数的设置。

yolo2 python yolo2 python复现_开发板_10


点击左栏中的Synthesis,然后点击右栏中Top Function的Browse,选择cnn.cpp中的YOLO2_FPGA函数作为顶层函数,如下图所示,然后点击ok

yolo2 python yolo2 python复现_fpga_11

点击Run C Simulation进行C仿真,对弹出的弹窗不进行勾选直接点击ok

yolo2 python yolo2 python复现_yolo2 python_12


C仿真结果如下所示

yolo2 python yolo2 python复现_开发板_13


C仿真成功后下面进行C综合,点击Run C Synthesis,如下图所示

yolo2 python yolo2 python复现_开发板_14


进行C综合后,点击Export RTL导出IP,硬件描述语言选择Verilog,之后点击OK

yolo2 python yolo2 python复现_IP_15


yolo2 python yolo2 python复现_IP_16


至此,Vivado HLS工具成功导出Yolo_v2的IP,IP的路径为.\Yolo_demo\Yolov_demo\solution1\impl\ip

2 实验二:在Vivado工具中完成Yolo_v2的Block Design

打开Vivado 2018.3工具,点击Create Project创建一个新项目

yolo2 python yolo2 python复现_IP_17


输入工程名,这里以Yolo_demo_vivado为例

yolo2 python yolo2 python复现_fpga_18


点击Next,选择RTL Project,然后一路Next至Default Part界面,Package选择clg400,speed选择-1,然后选择xc7z020clg400-1,点击Next,最后点击Finish。如下图所示

yolo2 python yolo2 python复现_开发板_19


点击PROJECT MANAGER→Settings来进行IP核的添加

yolo2 python yolo2 python复现_开发板_20


点击Project Settings→IP→Repository,点击IP Repositories下的+号

yolo2 python yolo2 python复现_yolo2 python_21


选择HLS生成的IP的路径,实验一中已提及,结果如下,选择ok

yolo2 python yolo2 python复现_开发板_22


点击IP INTEGRATOR→Create Block Design,创建一个图形化设计,设计名称使用默认即可

yolo2 python yolo2 python复现_开发板_23


将提供文档中vivado文件夹下的yolov2.tcl文件拷贝到项目工程目录下,如下图所示

yolo2 python yolo2 python复现_fpga_24


在Vivado中的Tcl Console中输入Tcl命令:source C:/Users/pc/Desktop/Yolo_Meterial/Yolo_demo_vivado/yolov2.tcl 本文将tcl文件放于此绝对路径中,实验中应根据tcl文件位置将绝对路径进行修改,如下图所示,输完后按回车键即可

yolo2 python yolo2 python复现_嵌入式_25


完成后的Block Design如下图所示:

yolo2 python yolo2 python复现_嵌入式_26


[注意]如果Vivado版本不是2018.3,可用Notepad工具打开yolov2.tcl文件进行修改,将版本相关的设置语句修改再次尝试一下,如下图所示

yolo2 python yolo2 python复现_IP_27


在Source栏中右键单击当前的设计文件,选择Create HDL Wrapper…

yolo2 python yolo2 python复现_fpga_28


接着选择Let Vivado manage wrapper and auto-update,单击ok,生成顶层文件

yolo2 python yolo2 python复现_fpga_29


在Source栏中右击Constraints,选择Add Sources,添加相关的约束文件

yolo2 python yolo2 python复现_嵌入式_30


点击Add Files,将提供的vivado文件夹下的PYNQ.xdc文件导入

yolo2 python yolo2 python复现_yolo2 python_31


单击Flow Navigator下的Generate Bitstream,在弹出窗口单击Yes

yolo2 python yolo2 python复现_yolo2 python_32


在弹出Launch Runs窗口中,Number of jobs和电脑配置相关,可修改为能够选择的最大数。单击OK,之后生成Bitstream文件的过程需要等待十分钟左右

yolo2 python yolo2 python复现_IP_33


当Bitstream生成完成后,弹出Bitstream Generation Completed窗口,单击Cancel

yolo2 python yolo2 python复现_yolo2 python_34


至此,Vivado部分完成了bit文件和tcl文件的导出,可在./**runs/impl_1文件夹下找到bit和tcl文件,可以拷到项目工程目录下并进行重命名,如yolov2.bit和yolov2.tcl

3 实验三:在PYNQ-Z2板上跑通Yolo_v2

3.1 硬件准备

设置跳帽从SD卡启动,使用Micro USB供电,插入烧写好镜像的SD卡,使用Micro USB连接电脑和开发板,使用网线连接开发板与电脑上网所使用的路由器,启动开发板。参考资料

yolo2 python yolo2 python复现_IP_35

3.2 实验步骤

稍等片刻,开发板左侧彩灯闪烁后,打开Chrome浏览器,输入pynq:9090,显示jupyter界面,在Password 栏中,输入密码xilinx ,单击Log in ,打开jupyter。单击New->Folder,创建新文件夹

yolo2 python yolo2 python复现_IP_36


yolo2 python yolo2 python复现_开发板_37


对文件夹重命名,此处以Yolo_Test为例,并进入Yolo_Test文件夹

yolo2 python yolo2 python复现_嵌入式_38


单击右上角Upload上传pynq文件夹中提供的文件以及Vivado生成的bit文件和tcl文件,并单击蓝色Upload上传,如下图所示:

yolo2 python yolo2 python复现_开发板_39


yolo2 python yolo2 python复现_IP_40


上传完成后,点击yolov2.ipynb进入notebook,并多次点击Run运行程序,即可在jupyter notebook上看到目标检测的效果。

yolo2 python yolo2 python复现_嵌入式_41


yolo2 python yolo2 python复现_IP_42


yolo2 python yolo2 python复现_开发板_43