Python是一种脚本语言,容易上手,但难于实现底层操控,因此在雷达领域难以受到关注。
基于FPGA的雷达信号处理实现都是基于硬件描述语言,从开始的VHDL到现在更为流行的Verilog;软件应用也从由最开始的汇编语言发展到现在的c/c++实现,这些都是目前为大多数FPGA开发者所熟悉的FPGA发展路程。
但是,在美国纳帕举行的第25届关于可编程计算机器领域IEEE国际讨论会上,一篇名为“评估通过Python快速开发异构处理器FPGA应用性能”的短篇论文获得了最佳短篇论文奖。
论文主要讨论了Python开发FPGA应用的优势和效率,针对Digilent的PYNQ-Z1板卡(内部集成一个Xilinx Zynq SoC),通过支持Python编程和Jupyter Notebooks框架的PYNQ开发环境,应用Python对此板卡进行开发编程,并最终评估开发结果的优势和效率。
论文的作者是高级计算机科学家AndrewG.Schmidt、计算机科学家Gabriel Weise以及来自美国南加州大学工程技术科学协会的研究室主任MatthewFrench。
他们利用PYNQ开发环境,应用Python语言对XilinxZynq器件进行编程应用开发,对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交易(不需要经过器件驱动和核模块之间的不断握手确认)。
其次,就目前来说,PYNQ还不支持任何高级的综合,也无法将Python应用直接移植到FPGA中。开发者依然原型必须使用FPGA来创建一个设计,即当PYNQ提供一个支持板卡IO接口的Overlay框架以时,任何用户逻辑依然必须由开发者亲自创建并综合。
不过,开发者仍然可以使用高级综合工具或上面提到的Python-to-HDL工程来完成这个任务,但是最终,开发者依然需要基于此设计并创建一个整合了Python代码比特流文件。
也正是由于PYNQ存在这方面的缺陷,论文的作者并没有简单依赖现存的PYNQ API接口和overlay,他们开发出一个基于Redsharc项目的特定应用程序内核进行研究。论文最后,作者对给出了Python开发Zynq应用的各项评估结果。
给出了通过c/c++实现这项研究的一般图像处理管道性能,以及定制的硬件加速器和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
-
低延时控制
关键技术
Jupyter Notebook是一种基于浏览器的交互式计算环境。Jupyter Notebook能够创建多种文件(动态代码、交互式控件、图表、解释性文本、方程式、图像、视觉等)。在Jupyter Notebook环境下使用python可以简便地为PYNQ-Z1编程。
通过python,开发者能调用可编程逻辑部分的硬件库。硬件库可以加速PYNQ-Z1上运行的软件代码,还可以自定义硬件平台和接口。
PYNQ镜像是一个可以引导的Linux镜像,其中包含pynq python包、其他开源包。
使用PYNQ需要什么软件?
Jupyter Notebook 是基于浏览器的接口,所以需要一个兼容的网页浏览器,从而使用python去编程。为了更高的性能,用户也可以使用C/C++去编程。此时,需要支持PYNQ-Z1的、免费的XilinxSDK软件。
用户也可以使用其他第三方的软件开发工具。为了增加新的硬件库,所以需要Xilinx或第三方的硬件设计工具。Xilinx Vivado 免费版完全支持PYNQ-Z1。
原文始发于微信公众号(雷达通信电子战)