PYNQ简介
PYNQ 是 一种框架,可以简单理解为ZYNQ上的python。PYNQ是Xilinx的一个开源项目,其硬件本质还是ZYNQ。很多人以为PYNQ是独立的一种开发板,但其实其pynq最初本质就是代码框架,并没有实体架构的,现在出的PYNQ -Z2 Z1本质上其实还是ZYNQ芯片。
PYNQ的优势:
PYNQ的优势是减少了RTL级别开发的难度,使得现在主流Pyhton可以加入到硬件开发这一领域中,并且大量的python库函数可以方便使用。简单来说使用PYNQ会减少开发周期,大大提高ZYNQ开发速度。并且使用更多丰富的库。
PYNQ的内部实现要点:
- 硬件库 overlay。
- pynq使用python对处理器和overlay进行编程。
- pynq是基于web的体系架构,pynq并入了开源的Jupyter notebook架构。可以直接在Zynq的ARM上运行 IPython 内核和web服务器。也就是说我们主要通过web浏览器对其进行编程。
要注意的点:
PYNQ并不是通过Python语言对FPGA直接编程,而是一种从python到RTL的映射,内部实现仍然是RTL的,只是向上封装了一套接口,提供给python语言。
PYNQ架构:
主要是分四层:
1.FPGA硬件层
2.Linux内核
3.python软件层
4.jupyter notebook的应用层
硬件层:主要还是Zynq那一套 PL+PS,但是现在整个关于fpga的部分被称作 overlay,面向多用户生成不同的bitstream,可以通过软件API调用,动态切换FPGA的一些功能。
软件层:其运行在ZYNQ的PS里面。主要是由Ubuntu系统内的python组成。PYNQ的API库则提供了连接软硬件的功能,这使得我们可以从python访问到硬件资源。
应用层主要由运行在 Python 之上的 Jupyter Notebook 和 IPython 构成。Jupyter Notebook 是一个基于浏览器的交互式计算环境,基于Python 内核和 Websocket 协议。在 Jupyter Notebook 提供的环境中,可以在其中记录代码、运行代码并查看结果,可视化数据分析并查看输出结果。这些特性使其成为一款执行端到端数据科学工作流程的便捷工具,可以用于数据清理、统计建模、构建和训练机器学习模型,可视化数据以及许多其他用途。通过 Jupyter 创建的交互式 notebook 文档,支持实时代码、交互式小部件、绘图、Markdown、方程式、图像和视频。
注意:PYNQ同时包含了软件驱动和硬件驱动,所以必需同时部署二者才能正常工作。
关于Overlay
Overlay相当于一种模式的IP, 但是在PYNQ下,fpga的一些PL设计叫做Overlay。可以用Python接口来编程和控制overlay。默认启动时会下载base的overlay到PL中。base overlay相当于是开发板的参考设计。
新的overlay可以上传或者复制到开发板上。并且可以在系统运行的时候加载到PL中。
Overlay主要三部分:
- 配置FPGA的bit流文件
- tcl文件,配置IP的hwh文件
- Python的API
实例:
from pynq import Overlay
overlay_design = Overlay("base.bit")
更多学习资源:
http://www.pynq.io/
https://pynq.readthedocs.io/en/latest/