【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作

02 PYNQ镜像制作

  • 前言
  • 一、vivado硬件设计
  • 二、ubuntu镜像制作
  • 三、Win32DiskImage烧写镜像
  • 四、上板启动
  • 总结


前言


由于 PYNQ 官网中没有适配 ZYNQ_MINI 开发板的现成的PYNQ镜像,我们需要用 vivado 自己设计硬件部分,然后下载与板子无关的预构建文件 PYNQ rootfs,在ubuntu系统中制作适配 ZYNQ_MINI 开发板的 PYNQ 镜像。

软件与系统的环境版本

  • Windows 11
  • VMware Workstation 17 Pro
  • Ubuntu 18.04.6
  • Vivado 2020.1
  • PetaLinux 2020.1
  • PYNQ rootfs arm v2.6.0

Ubuntu、Vivado、PetaLinux、PYNQ的版本必须与上文一致,不然可能会出现版本不适配的问题!

  • Ubuntu 18.04.6 官网下载链接:https://releases.ubuntu.com/
  • PYNQ rootfs arm v2.6.0 下载链接:https://discuss.pynq.io/t/i-am-looking-for-pynq-rootfs-arm-v2-6-img-download/5783 (官网里已经找不到这个古老的版本了,我是在社区里找到的,非常滴珍贵!)

一、vivado硬件设计


打开vivado,新建工程文件,选择器件;点击左边栏IP INTEGRATOR -> Create Block Design新建一个 bd 文件(block design),添加一个 ZYNQ 模块并进行配置。具体配置需参考手上的开发板的硬件原理图、资料,以及项目的具体需求,此处不详细展开。

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第1张图片
为了能够控制外设,还需添加 AXI_GPIO 模块。本项目需添加两个 axi_gpio 模块,一个宽度为4位的用于控制四个 LED 灯,一个宽度为1位的用于控制 key1 按键。(双击创建的axi_gpio模块即可进入下图的设置界面)

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第2张图片
点击左边栏 RTL ANALYSIS -> Open Elaborated Design ,打开如下界面,在底部设置 GPIO 连接外设的对应管脚。具体管脚请查看具体开发板的硬件原理图、手册等资料。

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第3张图片
点击左边栏的 run synthesis 进行综合(一直点OK即可,综合完成后会弹窗提示要不要 run Implementation,直接点右下角 cancel 即可),点击顶部工具栏 File -> Export ,选择 Export Hardware,导出得到.xsa文件;再选择 Export Bitstream File,导出得到.bit文件。(.xsa文件在Linux系统下解压可得到一堆文件,包括.hwh、.tcl)这些文件即为描述该开发板的硬件文件,需要用 它们 + PYNQ rootfs 来制作适配该开发板的 PYNQ 镜像。

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第4张图片


二、ubuntu镜像制作


打开终端,输入以下命令下载PYNQ组件

git clone https://github.com/Xilinx/PYNQ.git
cd PYNQ
git checkout v2.6.0
git checkout -b fzu3

使用 ls 命令查看 PYNQ 文件夹内容,如下则说明下载成功:

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第5张图片
输入 vim ~/.bashrc 命令配置环境变量,使得每次启动终端时,自动加载好制作镜像所需的环境:

bashrc

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第6张图片
其中三个 source 后的路径要根据自己下载的vivado、petalinux、vitis的路径进行更改

export PATH="$PATH:/home/hoko/.local/lib/python3.6/site-packages"
source /home/hoko/Downloads/Vivado/2020.1/settings64.sh
source /home/hoko/Downloads/PetaLinux/2020.1/settings.sh
source /home/hoko/Downloads/Vitis/2020.1/settings64.sh
export PATH=/opt/qemu/bin:/opt/crosstool-ng/bin:$PATH

在 PYNQ/sdbuild/scripts 目录打开终端,输入 source setup_host.sh 命令设置一些环境变量和shell函数,为后续的编译工作做准备:

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第7张图片
将 bionic.arm.2.6.0_2020_10_19.img (即前言里提到的PYNQ rootfs arm 文件)复制到 PYNQ/sdbuild/prebuilt目录下;

PYNQ/boards/目录下新建文件夹 fzu3
fzu3文件夹中新建两个文件夹 base、petalinux_bsp
petalinux_bsp文件夹中新建文件夹 hardware_project

将 vivado硬件设计部分导出的 .bit 文件重命名为 base.bit放到 base 文件夹里
将 .xsa 文件重命名为 fzu3.xsa放到 hardware_project 文件夹里

fzu3文件夹中新建 fzu3.spec 文件,填入如下内容:

ARCH_fzu3 := arm
BSP_fzu3 :=
BITSTREAM_fzu3 := base/base.bit
FPGA_MANAGER_fzu3 := 1
STAGE4_PACKAGES_fzu3 := pynq ethernet

上述流程完成,在 PYNQ/sdbuild 文件夹中运行如下命令即可开始构建镜像:

make BOARDS=fzu3 PREBUILT=./prebuilt/bionic.arm.2.6.0_2020_10_19.img

构建镜像
但不出意外的话,构建是不会成功的 T_T,我至少构建了五次才最终成功…

  下面我将列出绝大多数文章都没有说明,是我自己上网搜索 debug 总结出来的在上述构建镜像步骤之前的细节设置(也许你不用设置也能构建成功,但下面的坑我是每个都踩了一遍…):

  • Ubuntu 系统语言设置为英文!
  • Ubuntu 得连接外网,并保证流量充足,完整编译一次镜像大约要消耗10G流量!
  • Ubuntu 在装好vivado、petalinux等东西之后,最好还得剩下 20G 以上的磁盘空间!
  • Ubuntu 设置 sudo 免密码!
  • 在下载的PYNQ文件夹中,全局搜索“ gitsm:// ”,如果有搜到,请将其更改为“ https:// ”或者“ http:// ”!(建议使用 VSCode 做这件事)

在构建之前,可以使用 make checkenv 命令对个软件环境的版本进行确认和检查,没有问题再开始构建。

如果构建过程出现bug,则debug 完成后先运行如下命令将上次构建的镜像清除,再开始重新构建镜像

make delete
make unmount
make clean

最后一步,God bless you!


三、Win32DiskImage烧写镜像


镜像制作成功后,会在 sdbuild 文件夹中生成 output 文件夹,fzu3-2.6.0.img 即为 PYNQ 镜像文件。

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第8张图片
TF卡插入电脑,格式化之后,将 fzu3-2.6.0.img 复制到 Windows 系统下,使用 Win32DiskImager 工具将镜像烧写到TF 卡上(TF卡建议 16G 以上)。


四、上板启动


用网线、UART、DEBUG线将笔记本与开发板相连接,将 TF 卡插入开发板的 TF1 卡槽里,拨动拨码开关设置 BOOT 为 TF 卡启动,按电源按钮上电:


关闭 Windows 防火墙,打开 MobaXterm,使用网口和串口登录。用户默认密码是xilinx。

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第9张图片
打开笔记本浏览器,输入网址 http://pynq,输入默认登录密码 xilinx 即可进入 jupyter notebook 开发页面,进行 python 代码的编写。本项目需要用到Overlay库对开发板的硬件进行控制,因此还要将.hwh、.bit、.tcl 文件放在 control.py 所在的文件夹目录下注意这三个文件的命名要保持一致

【基于Xilinx Zynq7000的PYNQ框架项目】02 PYNQ镜像制作_第10张图片


总结


对于 PYNQ-Z1、Z2 等常见的开发板,PYNQ官网已经给出了编译好的镜像,直接使用即可。对于该文 ZYNQ_ECO 这样的非主流板子,则需要像本文一样自己设计硬件部分,然后结合预制 PYNQ 根镜像来为板子定制一个 PYNQ 镜像。至此,该项目最难的(个人认为)为 ZYNQ_MINI 开发板量身定制一个 PYNQ 镜像的部分就完成啦!这篇博客也是得到了跟我共同完成该项目的林同学的大力支持,向他表示感谢!


有不清楚的地方,欢迎大家在评论区交流~

您的关注、点赞与收藏,是我持续创作优质博客的最大动力!

本项目系列文章:
【基于Xilinx ZYNQ7000的PYNQ框架项目】——01人脸识别项目介绍与展示

【基于xilinx Zynq7000的PYNQ框架项目】03 Socket实现开发板和电脑的实时视频传输并存储图片

【基于Xilinx ZYNQ7000的PYNQ框架项目】04开发板上运行人脸识别模型

【基于Xilinx ZYNQ7000的PYNQ框架项目】05使用Overlay库和python父子进程实现开发板按键控制LED灯流水或熄灭

我的个人主页:小黄能吃辣的CSDN主页

你可能感兴趣的:(单片机,嵌入式硬件,ubuntu,课程设计,经验分享,软件工程,python)