基于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创建一个新工程
输入工程名,这里以Yolo_demo为例
连续点击Next到下图所示的Solution Configuration界面
点击Part Selection中的 … ,进入如下界面,Package选择clg400,Speed grade选择-1,最终选择xc7z020clg400-1,点击ok,返回到上一界面,点击Finish完成初始化
将提供的hls文件夹下的labels文件夹拷贝到项目工程目录下,将hls文件夹下的src和tb文件夹下的文件也拷到相同的目录下,如下所示。
在Explorer界面右击Source,选择Add Files
返回到上一级目录,选择刚拷贝进来的cnn.cpp和cnn.h文件。
在Explorer界面右击Test Bench,选择Add Files,将除了cnn.cpp和cnn.h之外的文件添加进来,结果如下图所示。
在Explorer界面右击Test Bench,选择Add Folder,将labels文件夹添加进来,结果如下图所示。
点击Vivado HLS界面左上角的Project,选择Project Settings,进行顶层函数的设置。
点击左栏中的Synthesis,然后点击右栏中Top Function的Browse,选择cnn.cpp中的YOLO2_FPGA函数作为顶层函数,如下图所示,然后点击ok
点击Run C Simulation进行C仿真,对弹出的弹窗不进行勾选直接点击ok
C仿真结果如下所示
C仿真成功后下面进行C综合,点击Run C Synthesis,如下图所示
进行C综合后,点击Export RTL导出IP,硬件描述语言选择Verilog,之后点击OK
至此,Vivado HLS工具成功导出Yolo_v2的IP,IP的路径为.\Yolo_demo\Yolov_demo\solution1\impl\ip
2 实验二:在Vivado工具中完成Yolo_v2的Block Design
打开Vivado 2018.3工具,点击Create Project创建一个新项目
输入工程名,这里以Yolo_demo_vivado为例
点击Next,选择RTL Project,然后一路Next至Default Part界面,Package选择clg400,speed选择-1,然后选择xc7z020clg400-1,点击Next,最后点击Finish。如下图所示
点击PROJECT MANAGER→Settings来进行IP核的添加
点击Project Settings→IP→Repository,点击IP Repositories下的+号
选择HLS生成的IP的路径,实验一中已提及,结果如下,选择ok
点击IP INTEGRATOR→Create Block Design,创建一个图形化设计,设计名称使用默认即可
将提供文档中vivado文件夹下的yolov2.tcl文件拷贝到项目工程目录下,如下图所示
在Vivado中的Tcl Console中输入Tcl命令:source C:/Users/pc/Desktop/Yolo_Meterial/Yolo_demo_vivado/yolov2.tcl 本文将tcl文件放于此绝对路径中,实验中应根据tcl文件位置将绝对路径进行修改,如下图所示,输完后按回车键即可
完成后的Block Design如下图所示:
[注意]如果Vivado版本不是2018.3,可用Notepad工具打开yolov2.tcl文件进行修改,将版本相关的设置语句修改再次尝试一下,如下图所示
在Source栏中右键单击当前的设计文件,选择Create HDL Wrapper…
接着选择Let Vivado manage wrapper and auto-update,单击ok,生成顶层文件
在Source栏中右击Constraints,选择Add Sources,添加相关的约束文件
点击Add Files,将提供的vivado文件夹下的PYNQ.xdc文件导入
单击Flow Navigator下的Generate Bitstream,在弹出窗口单击Yes
在弹出Launch Runs窗口中,Number of jobs和电脑配置相关,可修改为能够选择的最大数。单击OK,之后生成Bitstream文件的过程需要等待十分钟左右
当Bitstream生成完成后,弹出Bitstream Generation Completed窗口,单击Cancel
至此,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连接电脑和开发板,使用网线连接开发板与电脑上网所使用的路由器,启动开发板。参考资料
3.2 实验步骤
稍等片刻,开发板左侧彩灯闪烁后,打开Chrome浏览器,输入pynq:9090,显示jupyter界面,在Password 栏中,输入密码xilinx ,单击Log in ,打开jupyter。单击New->Folder,创建新文件夹
对文件夹重命名,此处以Yolo_Test为例,并进入Yolo_Test文件夹
单击右上角Upload上传pynq文件夹中提供的文件以及Vivado生成的bit文件和tcl文件,并单击蓝色Upload上传,如下图所示:
上传完成后,点击yolov2.ipynb进入notebook,并多次点击Run运行程序,即可在jupyter notebook上看到目标检测的效果。