1.1 PYNQ介绍
PYNQ(Python Productivity for Zynq)是Xilinx 推出的一个开放源代码框架,它允许使用 Python 语言和库来 快速构建高性能的嵌入式应用程序。PYNQ 主要目标是简化嵌入式系统设计人员在应用程序中利用 Xilinx 器件的独特 优势的过程。具体来说,PYNQ 通过提供可编程逻辑电路作为硬件库(称为 overlay),以及使用 Python 对嵌入式处 理器和 overlay 进行编程的能力,来提高设计人员的生产力。这些 overlay 类似于软件库,可以通过应用程序编程接 口(API)访问,并且设计为可配置和在多个应用程序中重复使用。
PYNQ 框架包括三个主要部分:
1、 硬件层:包括 FPGA 设计和 PS 与 PL 的协同交互,称为 overlay,可以生成不同的 bitstream 文件,并通过软件 API 调用。
2、 软件层:运行在 ZYNQ 的 PS 中,主要由 Ubuntu 操作系统和 Python 构成,PYNQ 的 API 库连接软硬件,允许通过 Python 访问 FPGA 侧的处理单元。
3、 应用层:主要由运行在 Python 之上的 Jupyter Notebook 和 IPython 构成,提供基于浏览器的交互式计算环境。
PYNQ 并不是通过 Python 语言直接对 FPGA 进行编程,而是为软件开发者提供了访问 FPGA 资源的 Python 接口。这意味着 Python 开发者可以忽略底层实现细节,通过 Python 轻松访问 FPGA,动态加载预编译好的 FPGA 应用,就像调用函数一样去调用通过 FPGA 加速的应用或访问连接到 FPGA 的外设。这使得软件工程师能够轻松享受 FPGA 的并行计算和可灵活配置的诸多好处。至于 FPGA 应用的开发,仍然需要专业的硬件工程师使用专业工具如 Vivado 进行。
1.2 下载pynq文件系统
一个完整的 pynq 会由两部分组成,一是 Linux 的启动文件,由 bit 文件,uboot,内核,设备树等组成等组成,二是 Linux 的根文件目录,也就是文件系统,本小节下载的即是 pynq 的文件系统。 下载链接:https://www.uisrc.com/t-5649.html,找到 pynq 相关的内容,下载 PYNQ_image_arm.zip 或 PYNQ_image_arm64.zip。依据板卡的系列选择,zynq7000 系列选择 PYNQ_image_arm.zip,zynq mpsoc 系列选择PYNQ_image_arm64.zip。 下面以zynq mpsoc系列的板卡F20-4EV为演示板卡。
1.3 移植pynq
下载好本文档对应的资料包 PYNQ Appendix.zip,解压后展开路径 PYNQ Appendix - Chapter 4,内含四个文件夹,分别是 boot、soc_dts、soc_hw、soc_prj、soc_sdk,这些文件夹的作用如下:
• soc_prj:制作pynq所需的vivado工程,该工程已编译,仅当作参考用。
• soc_hw:vivado导出的xsa文件,用来给vitis新建平台工程。
• soc_sdk:vitis工程,用于生成fsbl等linux启动所需文件,该工程已编译,仅当作参考用。
• soc_dts:linux的设备树文件,对应本章的soc_prj工程,用于移植系统时产生设备树文件。
• boot:使用以上工程编译好的启动文件,烧卡后直接拖入sd卡boot分区即可用来启动系统。
上述 vivado、vitis 工程均基于 2021.1 版本开发。
打开 soc_sdk 文件夹,依据路径找到下述三个文件:
• system_wrapper.bit: \soc_sdk\soc_base\hw\
• fsbl.elf: \soc_sdk\soc_base\export\soc_base\sw\soc_base\boot
• pmufw.elf \soc_sdk\soc_base\export\soc_base\sw\soc_base\boot
打开 VMware Workstation,启动 uisrc-ubuntu64x 虚拟机,此时虚拟机内应该有开发包 uisrc-lab-xlnx,关于虚拟机的安装以及开发环境部署如果有不清楚的请参考《米联客2024版ZYNQ-MPSOC-Linux(基础入门篇)》教程,这边就不赘述了。将上述三个文件复制粘贴到虚拟机内系统的路径:/home/uisrc/uisrc-lab-xlnx/boards/mzux/ubuntu/output/files 下:
打开 soc_dts 文件夹,将两个设备树文件夹复制粘贴到虚拟机内系统的路径:/home/uisrc/uisrc-lab-xlnx/boards/mzux/ubuntu/output/files,若提示覆盖则全部同意,此时 kernel-dts 与 uboot-dts下应该有了设备树文件:
进入目录/uisrc-lab-xlnx/scripts后右击,选择 Open in Terminal:
首先 source一下环境变量,输入命令 source mzuxcfg.sh:
输入 make_kernel_menuconfig.sh来打开一些 PYNQ 要用的内核功能按空格,勾选如下的驱动:
双击esc返回上一级,退出时选择save保存,然后继续输入一下命令:
move_files.sh 移动文件到指定位置 make_uboot.sh 用来制作 uboot make_kernel.sh 用来制作 Linux 内核 create_image.sh 用来制作镜像 移植好的 boot文件位于/home/uisrc/uisrc-lab-xlnx/boards/mzux/ubuntu/images/boot中:
1.4 烧录系统并测试
将 1.2中下载好的压缩包复制到路径/home/uisrc/,然后用命令解压:tar zxvf PYNQ_image_arm64.tar.gz(此处为mpsoc的演示,如果是 zynq7000可自行修改包名)解压后得到如下文件夹:
将 1.3 内制作的 boot 文件,复制到该文件夹的 boot 文件夹内:
回到路径:/home/uisrc/PYNQ_image_arm64,右击打开终端,然后插入 TF 卡准备烧写,分别执行:make_parted.sh 格式化并分区 u 盘,先输入盘符,再输入确认deploy_image.sh 烧写启动文件与系统文件,输入盘符 。
最后弹出TF卡后插入开发板。 将模式开关拨至 SD 卡启动模式,再给开发板上电,如有不会,请参考《米联客2024版ZYNQ-MPSOC-Linux(基础入门篇)》第九章的操作即可登录。拨码开关选择OFF-ON-OFF: 拨码开关在板上的位置如下: 启动成功如下所示: 系统的用户名为:xilinx 密码为:xilinx
|