夏老师推荐:惊人!Python+FPGA 实现FPGA开发大提速?!
夏老师推荐:惊人!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
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAD7.tmp.jpg
惊人!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对此板卡进行开发编程,并最终评估开发结果的优势和效率。
值得一提的是,发表这篇论文的作者都是业界大佬,包括高级计算机科学家AndrewG.Schmidt、计算机科学家Gabriel Weise以及来自美国南加州大学工程技术科学协会的研究室主任Matthew French。
在论文中,Matthew French教授主要就利用PYNQ开发环境,应用Python语言对Xilinx Zynq器件进行编程应用开发时对FPGA器件的影响、性能结果以及瓶颈影响进行了评估。
此外,各位教授就基于Python的开发结果与已经存在的基于C语言的开发及手动开发结果进行了比较分析。
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAE8.tmp.png
在论文中,各位教授还对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交易(不需要经过器件驱动和核模块之间的不断握手确认)。
其次,就目前来说,PYNQ还不支持任何高级的综合,也无法将Python应用直接移植到FPGA中。
这就意味着,开发者依然原型必须使用FPGA来创建一个设计,即当PYNQ提供一个支持板卡IO接口的Overlay框架以时,任何用户逻辑依然必须由开发者亲自创建并综合。
不过,开发者仍然可以使用高级综合工具或上面提到的Python-to-HDL工程来完成这个任务,但是最终,开发者依然需要基于此设计并创建一个整合了Python代码比特流文件。
也正是由于PYNQ存在这方面的缺陷,论文的作者并没有简单依赖现存的PYNQ API接口和overlay,他们开发出一个基于Redsharc项目的特定应用程序内核进行研究。
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAE9.tmp.png
结论
结果如何呢?
论文最后,作者对给出了Python开发Zynq应用的各项评估结果。
结果中给出了通过c/c++实现这项研究的一般图像处理管道性能,以及定制的硬件加速器和Python实现的性能结果(下图所示),帮助我们更好地理解了Python + FPGA开发环境的性能和能。
表中可以看出,结果十分明显,通过PYNQ实现较c实现速度提高了30倍之多,更甚者,从结果中可以看出,当Python实现时有更加有效的可用库时,比如OpenCV,其性能可以增长更多。
Python软件实现和FPGA性能潜力的结合是一个非常有意义的工作,将会开创出一个类似于树莓派和Arduino的广大的开发者社区。
Python+FPGA是一个广阔的未经勘察过的领域——一个全新的更加高效的开发空间——通过PYNQ开发环境将会吸引更多的系统开发者加入的领域。
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAF9.tmp.png
PYNQ项目简介
PYNQ是Xilinx的一个的开源项目。
它旨在使基于Xilinx ZYNQ的嵌入式系统设计更加容易。
通过使用Python语言及其库文件,设计者能够充分发挥ZYNQ PL部分和PS部分的各自优势去设计更加强大的、有意义的嵌入式系统。
PYNQ使得用户能够实现多种高性能的嵌入式应用,包括:
并行硬件执行
高帧率视频处理
硬件加速算法
实时信号处理
高带宽IO
低延时控制
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAFA.tmp.jpg
关键的技术
Jupyter Notebook是一种基于浏览器的交互式计算环境。
Jupyter Notebook能够创建多种文件(动态代码、交互式控件、图表、解释性文本、方程式、图像、视觉等)。
在Jupyter Notebook环境下使用python可以简便地为PYNQ-Z1编程。
通过python,开发者能调用可编程逻辑部分的硬件库。
硬件库可以加速PYNQ-Z1上运行的软件代码,还可以自定义硬件平台和接口。
PYNQ镜像是一个可以引导的Linux镜像,其中包含pynq python包、其他开源包。
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAFB.tmp.png
使用PYNQ需要什么软件?
Jupyter Notebook 是基于浏览器的接口,所以需要一个兼容的网页浏览器,从而使用python去编程。
为了更高的性能,用户也可以使用C/C++去编程。
此时,需要支持PYNQ-Z1的、免费的Xilinx SDK软件。
用户也可以使用其他第三方的软件开发工具。
为了增加新的硬件库,所以需要Xilinx或第三方的硬件设计工具。
Xilinx Vivado 免费版完全支持PYNQ-Z1。
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAFC.tmp.png
PYNQ-Z1板卡资源
处理器:双核ARM Cortex-A9
FPGA:1.3M 可重构逻辑
内存:512MB DDR3/FLASH
存储:Micro SD卡插槽
视频:HDMI输入/输出
音频: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
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAFD.tmp.png
PYNQ示例
OpenCV人脸识别
ADC波形采集
PWM发生器
具体的参考示例请访问http://www.pynq.io/examples.html
PYNQ官方网站 http://www.pynq.io/home.html
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEAFE.tmp.png
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工具可免费获得。
要了解有关PYNQ的更多信息,请参见项目网页www.pynq.io。
在这里,您将找到可以帮助您开始使用PYNQ的参考资料和可与之联系的支持社区论坛。
要使用PYNQ框架,它需要安装一个可引导启动的PYNQ-Z1 Linux镜像文件。
您能用PYNQ-Z1做什么?
PYNQ-Z1开发板是用于嵌入式系统的通用可编程平台。
用户可以自定义其硬件和软件的使之应用于各类场景中,包括:
计算机视觉
工业控制
物联网(IoT)
无人机
加密
嵌入式计算加速
实时处理和更多...
PYNQ-Z1本机支持带有板载音频和视频接口的多媒体应用。
它被设计成易于连接Pmod,Arduino和Grove外设,以及通用IO引脚扩展。
PYNQ-Z1板还可以扩展USB外设,包括WiFi,蓝牙和网络摄像头。
产品特点:
ZYNQ XC7Z020-1CLG400C:
650MHz双核Cortex-A9处理器
DDR3内存控制器,具有8个DMA通道和4个高性能AXI3从端口
高带宽外设控制器:1G以太网,USB 2.0,SDIO
低带宽外设控制器:SPI,UART,CAN,I2C
可从JTAG,Quad-SPI闪存和microSD卡进行编程
Artix-7系列可编程逻辑
- 13,300个逻辑片,每个具有四个6输入LUT和8个触发器
- 630 KB的快速block RAM
- 4个时钟管理片,每个片都有一个锁相环(PLL)和混合模式时钟管理器(MMCM)
- 220 DSP切片
- 片上模数转换器(XADC)
存储:
带有16位总线@1050Mbps的512MB DDR3
16MB Quad-SPI闪存,具有出厂编程的全球唯一标识符(兼容48位EUI-48/64?)。
MicroSD插槽
供电:
由USB或任何7V-15V电源供电
USB和以太网:
USB-JTAG编程电路
USB-UART桥
USB OTG PHY(仅支持主机)
千兆以太网PHY
音频和视频:
具有脉冲密度调制(PDM)输出的驻极体麦克风
3.5mm单声道音频输出插孔,脉宽调制(PWM)格式
HDMI接收端口(输入)
HDMI源端口(输出)
开关,按钮和LED:
4个按钮
2个滑动开关
4个LED
2个RGB LED
扩展连接器:
两个标准Pmod端口
- 16总FPGA I/O
Arduino/chipKIT屏蔽连接器
- 49总FPGA I/O
- 6 XADC的单端0-3.3V模拟输入
- 4差分0-1.0V XADC的模拟输入
产品包含:
PYNQ-Z1板
Micro USB Cable(烧写程序用)
8G tf卡
优质塑料包装盒
file:///C:\Users\love\AppData\Local\Temp\ksohtml\wpsEB0F.tmp.jpg
刚买了一块PYNQ板子,准备试试