PYNQ-Z2部署LeNet加速器,记录一次成功的复现


前言

这是一个开源项目,项目地址:CNN on PYNQ

软件

vivado hls 2018.2
vivado 2018.2

硬件

Xilinx PYNQ-Z2


一、下载好项目代码

下载好作者的源代码:https://github.com/awai54st/PYNQ-Classification/tree/master
以及其提供的pynq镜像文件:https://pan.baidu.com/s/1c2EmMvY或者https://drive.google.com/open?id=1A9MrN_zzbHYiIHJvnNQYFc3sXqWZBb6o

二、生成LeNet IP

1.打开vivado hls命令行

Windows键+S,搜索vivado hls,在出现的备选项里面选择对应版本的vivado hls,我这里用的是2018.2
在这里插入图片描述

2.切换到你的工程所在目录

cd <你的项目存放路径>\PYNQ-Classification-master\hw\script_design_flow\LeNet_wrapper

3.运行run_lenet.tcl脚本

vivado_hls -f run_lenet.tcl

4.运行run_cifar_10.tcl脚本

cd <你的项目存放路径>\PYNQ-Classification-master\hw\script_design_flow\CIFAR_10_wrapper
vivado_hls -f run_cifar_10.tcl

第3、第4步分别生成了Lenet和cifar10的IP,这里注意一下,即使你只想复现Lenet,也要将cifar10的IP生成出来,因为下一步打开复现后的vivado工程时,默认使用的是cifar10,如果它的IP未生成,将会报错

5.可能遇到的问题

在生成IP的时候可能会遇到

ERROR: [IMPL 213-28] Failed to generate IP.
command ‘ap_source’ returned error code

这样的错误,可以参考xilinx官方给出的方案解决:https://support.xilinx.com/s/article/76960?language=en_US
我最终是将下载下来的文件夹中的automg_patch_20220104.tcl文件放到xilinx的 /xilinx/Vivado/版本号/common/scripts/目录下解决了这个问题(这里的路径自行比对)

三、还原PYNQ_ARCH工程并生成.bit文件

1.拷贝 PYNQ board files到vivado的安装路径(这一步不确定是否有必要)

下面这段文字摘自参考博客的原文

vivado里面没有PYNQ的board files,也就是开始vivado工程的时候,我们选择板子看不到PYNQ。原作者使用的是Arty-z7-20 board files,在这里图方便也就继续沿用。
把PYNQ-Classification/tools/PYNQ_BOARD_FILES/arty-z7-20/ 这个文件夹,拷贝到
C:\Xilinx\Vivado<版本号>\data\boards\board_files

2.打开vivado命令行

Windows键+S,搜索vivado hls,在出现的备选项里面选择对应版本的vivado
在这里插入图片描述

3.利用tcl还原工程文件

切换到tcl所在文件夹,在vivado命令行中输入

cd cd C:/<你的工程存放路径>/PYNQ-Classification-master/hw/base_project

还原工程

source pynq_arch.tcl

可以看到该路径下多出了PYNQ_ARCH文件夹

4.打开vivado软件(GUI)

在vivado中打开上一步还原的PYNQ_ARCH工程
在这里插入图片描述

5.open block design并且替换IP

在vivado GUI界面左侧的导航窗口点击open block design
在这里插入图片描述
在打开的Block Design里面将cifar10的IP替换成LeNet
在这里插入图片描述
原工程红框里的是cifar10,将其替换成LeNet,连线保持一致
添加方法是右击空白处,选择Add IP,在弹出的搜索框搜索lenet,将Lenet IP用鼠标左键拖到原理图中来
在这里插入图片描述

6.生成bitstram

按顺序run synthesis、run implementation、generate bitstream

在这里插入图片描述

7. 导出 Block Design

在vivado界面左侧导航窗口点击 IP INTEGRATOR,再点击界面左上角File。依次选择Export、Export Block Design
在这里插入图片描述
到此为止,我们已经生成了后续要用的.bit文件和.tcl文件

四、上板测试

1.将作者提供的镜像文件烧入pynq-z2的TF卡中

将下载好的镜像压缩包解压,会出现一个.iso的文件,通过烧录软件将该镜像烧入SD卡
在这里插入图片描述
我这里选择的是balenaEtcher软件,Flash from file选择要烧录的镜像,select target选择要烧入的SD卡,flash!开始烧录

2.启动pynq

将TF卡插入pynq-z2,将板子右上角的跳冒选择SD卡启动
在这里插入图片描述
pynq的基础入门可以参考xilinx给出的workshop:https://github.com/Xilinx/PYNQ_Workshop
打开pynq的电源,等待一段时间(需要好几分钟启动)

3.通过Jupyter notebook访问pynq

将电脑与pynq通过网线连接,将电脑的用于连接pynq的网卡的ip设置在192.168.2.x网段,比如说192.168.2.100,pynq的ip是192.168.2.99,同一个网段下才能访问
在浏览器输入192.168.2.99:9090
在这里插入图片描述
密码是xilinx

4.将生成的.bit和.tcl文件导入到Jupyter Notebook

将前面生成的.bit和.tcl文件拷贝到PYNQ_CNN/Theano/Lenet/Bitstream路径下
在这里插入图片描述
.bit文件在…\hw\base_project\PYNQ_ARCH\PYNQ_ARCH.runs\impl_1路径下,.tcl文件在…\hw\base_project\PYNQ_ARCH路径下
拷贝之前可以先将两个文件重命名,保持文件名一致

5.代码复现

打开conv_fpag.py,修改第140行,改成自己上传的.bit文件
在这里插入图片描述
Using a Caffe Pretrained Network - LeNet5.ipynb就是最终测试代码
在这里,作者对比了用arm核以及用FPGA跑LeNet的速度和准确度

参考内容

在复现的时候我参考了这篇博客:https://zhuanlan.zhihu.com/p/41372775
在解决vivado hls生成IP的时候我参考了这篇博客:https://blog.csdn.net/u014798590/article/details/122312505

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值