FPGA 培训专家
www.zxopen.com
夏老师推荐:惊人!Python+FPGA 实现 FPGA 开发大提速?!!
夏宇闻老师昨天在微信上推荐了一个帖子,说的是有人用 Digilent 的 PYNQ-Z1 板卡实现
了超强的加速性能。
当下 Python 的风头无人能及,而当 Python 遇上 Zynq 之后,所创造的生产力竟然也是
骇人。
虽然不甚了解,但不妨热切关注一下,说不定 FPGA 主流开发下一步就会踏上这条道路
了呢?
参考资料链接:http://www.sohu.com/a/146288925_292853
http://www.openhw.org/module/forum/thread-656190-1-1.html
惊人!Python+FPGA 实现 FPGA 开发大提速?!!
2017-06-05 17:40
背景
早年,关于 FPGA 的开发都是基于硬件描述语言,从开始的 VHDL 到现在更为流行的 Verilog,
软件应用也从由最开始的汇编语言发展到现在的 c/c++实现,这些都是目前为大多数 FPGA
开发者所熟悉的 FPGA 发展路程。
上个月,IEEE 收录了一篇关于使用 Python 开发 FPGA 应用的论文,Python+FPGA 会擦出怎
样的火花呢?
Python + Zynq=PYNQ
上个月中旬,在美国纳帕举行的第 25 届关于可编程计算机器领域 IEEE 国际讨论会上,一
篇名为“评估通过 Python 快速开发异构处理器 FPGA 应用性能”的短篇论文获得了最佳短篇
论文奖。
这篇论文主要讨论了 Python 开发 FPGA 应用的优势和效率,论文中针对 Digilent 的 PYNQ-Z1
板卡(内部集成一个 Xilinx Zynq SoC),通过支持 Python 编程和 Jupyter Notebooks 框架的
PYNQ 开发环境,应用 Python 对此板卡进行开发编程,并最终评估开发结果的优势和效率。
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
值 得 一 提 的 是 , 发 表 这 篇 论 文 的 作 者 都 是 业 界 大 佬 , 包 括 高 级 计 算 机 科 学 家
AndrewG.Schmidt、计算机科学家 Gabriel Weise 以及来自美国南加州大学工程技术科学协
会的研究室主任 Matthew French。
在论文中,Matthew French 教授主要就利用 PYNQ 开发环境,应用 Python 语言对 Xilinx Zynq
器件进行编程应用开发时对 FPGA 器件的影响、性能结果以及瓶颈影响进行了评估。
此外,各位教授就基于 Python 的开发结果与已经存在的基于 C 语言的开发及手动开发结果
进行了比较分析。
在论文中,各位教授还对 PYNQ 开发环境的优缺点进行了阐述:
首先来说,PYNQ 应用开发框架是一个开源的开发环境,提供了标准的可以约束芯片 I/O
引脚的“Overlay”比特流,同时,开发人员可以在此开发环境中,利用 Python 对 FPGA 进行
快速编程开发。
此外,PYNQ 开发环境内部集成标准的编程范式,支持 HDMI 和视频流的输出输出,同
时具有两组 12pin 的 PMOD 连接器和一个兼容 Arduino 的连接器(可以连接或配置为 Arduino
系列板卡)。
其中,默认的 overlay 中实例化了多个可以驱动多 I/O 接口的微 Blaze 处理器核,也可
以配置一些支持图像滤波功能和试验 SIMT(单指令,多线程)编程软逻辑 GPU 的 overlay。
同时,PYNQ 也提供了支持比特流编程的 API 和可扩展的通用 Python 库和包,并且可
以通过存储映射 I/O(MMIO)直接寻址可编程逻辑单元,另外还支持 DMA 交易(不需要经
过器件驱动和核模块之间的不断握手确认)。
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
其次,就目前来说,PYNQ 还不支持任何高级的综合,也无法将 Python 应用直接移植
到 FPGA 中。
这就意味着,开发者依然原型必须使用 FPGA 来创建一个设计,即当 PYNQ 提供一个支
持板卡 IO 接口的 Overlay 框架以时,任何用户逻辑依然必须由开发者亲自创建并综合。
不过,开发者仍然可以使用高级综合工具或上面提到的 Python-to-HDL 工程来完成这个
任务,但是最终,开发者依然需要基于此设计并创建一个整合了 Python 代码比特流文件。
也正是由于 PYNQ 存在这方面的缺陷,论文的作者并没有简单依赖现存的 PYNQ API 接
口和 overlay,他们开发出一个基于 Redsharc 项目的特定应用程序内核进行研究。
结论
结果如何呢?
论文最后,作者对给出了 Python 开发 Zynq 应用的各项评估结果。
结果中给出了通过 c/c++实现这项研究的一般图像处理管道性能,以及定制的硬件加速
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
器和 Python 实现的性能结果(下图所示),帮助我们更好地理解了 Python + FPGA 开发环
境的性能和能。
表中可以看出,结果十分明显,通过 PYNQ 实现较 c 实现速度提高了 30 倍之多,更甚
者,从结果中可以看出,当 Python 实现时有更加有效的可用库时,比如 OpenCV,其性能
可以增长更多。
Python 软件实现和 FPGA 性能潜力的结合是一个非常有意义的工作,将会开创出一个
类似于树莓派和 Arduino 的广大的开发者社区。
Python+FPGA 是一个广阔的未经勘察过的领域——一个全新的更加高效的开发空间
——通过 PYNQ 开发环境将会吸引更多的系统开发者加入的领域。
PYNQ 项目简介
PYNQ 是 Xilinx 的一个的开源项目。
它旨在使基于 Xilinx ZYNQ 的嵌入式系统设计更加容易。
通过使用 Python 语言及其库文件,设计者能够充分发挥 ZYNQ PL 部分和 PS 部分的各
自优势去设计更加强大的、有意义的嵌入式系统。
PYNQ 使得用户能够实现多种高性能的嵌入式应用,包括:
并行硬件执行
高帧率视频处理
硬件加速算法
实时信号处理
高带宽 IO
低延时控制
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
关键的技术
Jupyter Notebook 是一种基于浏览器的交互式计算环境。
Jupyter Notebook 能够创建多种文件(动态代码、交互式控件、图表、解释性文本、方
程式、图像、视觉等)。
在 Jupyter Notebook 环境下使用 python 可以简便地为 PYNQ-Z1 编程。
通过 python,开发者能调用可编程逻辑部分的硬件库。
硬件库可以加速 PYNQ-Z1 上运行的软件代码,还可以自定义硬件平台和接口。
PYNQ 镜像是一个可以引导的 Linux 镜像,其中包含 pynq python 包、其他开源包。
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
使用 PYNQ 需要什么软件?
Jupyter Notebook 是基于浏览器的接口,所以需要一个兼容的网页浏览器,从而使用
python 去编程。
为了更高的性能,用户也可以使用 C/C++去编程。
此时,需要支持 PYNQ-Z1 的、免费的 Xilinx SDK 软件。
用户也可以使用其他第三方的软件开发工具。
为了增加新的硬件库,所以需要 Xilinx 或第三方的硬件设计工具。
Xilinx Vivado 免费版完全支持 PYNQ-Z1。
PYNQ-Z1 板卡资源
处理器:双核 ARM Cortex-A9
FPGA:1.3M 可重构逻辑
内存:512MB DDR3/FLASH
存储:Micro SD 卡插槽
视频:HDMI 输入/输出
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
音频:Mic 输入,Line 输出
网络:10/100/1000 以太网
扩展口:连接到 ARM PS 端的 USB Host
IO 接口:1×Arduino 口,2×Pmod (49GPIO)
GPIO: 16GPIO
Other I/O:6 个用户 LEDs,4 个按键开关,2 个拨码开关
尺寸:87mm × 122mm
PYNQ 资源下载
从 PYNQ GitHub 上可以下载所有 PYNQ 项目的源代码。
如果用户想加入或联系 PYNQ 项目团队,可以在 PYNQ support forum 上发布信息。
PYNQ 资料百度网盘下载地址:http://pan.baidu.com/s/1dF60nPv 密码: 32vb
PYNQ 示例
OpenCV 人脸识别
ADC 波形采集
PWM 发生器
至芯科技论坛 www.fpgaw.com
FPGA 培训专家
www.zxopen.com
具体的参考示例请访问 http://www.pynq.io/examples.html
PYNQ 官方网站 http://www.pynq.io/home.html
PYNQ-Z1 开发板简介
参考信息链接:https://item.taobao.com/item.htm?id=548613760274
PYNQ-Z1 开发板支持 PYNQ 项目,这是一个新的开源框架,使嵌入式编程人员能够在无需设计可编程逻辑电路的
情况下即可充分发挥 Xilinx Zynq All Programmable SoC(APSoC)的功能。
与常规方式不同的是,通过 PYNQ,用户可以使用 Python 进行 APSoC 编程,并且代码可直接在 PYNQ-Z1 上进行
开发和测试。
通过 PYNQ,可编程逻辑电路将作为硬件库导入并通过其 API 进行编程,其方式与导入和编程软件库基本相同。
PYNQ-Z1 开发板是 PYNQ 开源框架的硬件平台。
在 ARM A9 CPU 上运行的软件包括:
载有 Jupyter Notebooks 设计环境的网络服务器
IPython 内核和程序包
Linux
FPGA 的基本硬件库和 API
对于想通过提供新的硬件库来扩展基本系统的设计人员,Xilinx Vivado WebPACK 工具可免费获得。
至芯科技论坛 www.fpgaw.com