PYNQ 用Python运行FPGA

 PYNQ 用Python运行FPGA

PYNQ介绍
PYNQ全称为Python Productivity for Zynq,即在原有Zynq架构的基础上,添加了对python的支持。Zynq是赛灵思公司推出的行业第一个可扩展处理平台系列,在芯片中集成了ARM处理器和FPGA可编程逻辑器件,旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。PYNQ希望能够借助python语言本身易用易学、扩展库多而全、社区活跃贡献度高等特性,有效降低Zynq嵌入式系统的开发门槛。PYNQ将ARM处理器与FPGA器件的底层交互逻辑完全封装起来,顶层封装使用python,只需要import对应的模块名称即可导入对应的硬件模块即可进行底层到上层数据的交互或者为系统提供硬件加速。对于PYNQ的开发者来说,ARM上运行着一个Linux系统,FPGA被抽象为若干加速IP,开发者可以通过一行简单的python脚本即可完成动态加载bitstream,通过DMA将数据流传输到加速IP融合输出。PYNQ板卡也提供了非常丰富的接口资源,如HDMI、AUDIO、Grove模块、常用接口如SPI/I2C等等以及很多通用IO。

图 Python调用底层硬件框架

图 Python调用底层硬件框架

下面给一个在PYNQ中插入HDMI输入和输出的例子
from pynq importOverlay
frompynq.lib.video import *

base =Overlay('base.bit')
hdmi_in =base.video.hdmi_in
hdmi_out = base.video.hdmi_out

简单高效开发PYNQ-Jupyter
对于嵌入式系统开发来说,往往由于性能的局限性,我们只能ssh进嵌入式linux,在命令行终端进行开发,开发效率是个很大的问题。在PYNQ上,我们使用了python扩展库Jupyter Notebook,其本质上是一个web服务器,提供了远程可视化、分步运行python脚本的能力。Jupyter同时可以实时显示程序运行结果,我们甚至可以在浏览器中直接看到我们使用硬件加速处理图像的结果。我们只需要将PYNQ板子接入网关,即可通过浏览器访问在板上运行的作为嵌入式web服务器的Jupyter Notebook。

图 JupyterNotebook实时显示运算图片

图 JupyterNotebook实时显示运算图片

PYNQ能做什么
PYNQ的整个技术栈包含了python+linux+ARM+FPGA,提供了无限种扩展的可能性,我们可以使用它来做很多有意思的应用。在pynq.io的社区页面我们可以看到许多PYNQ社区开发的项目。包括BNN(二值神经网络)的案例。

图 PYNQ社区应用案例

图 PYNQ社区应用案例

同时,官方提供了非常多的外部接口案例。同时还包括了OpenCV的案例。

图 pynq.io 官方案例


图 pynq.io 官方案例

图 pynq.io 官方案例

Logictools功能则实现了使用python编写FPGA状态机的功能,使用Logictools可以用python编写FPGA I/O端口输出任意波形了。

图 PYNQ Logictools

图 PYNQ Logictools

查阅PYNQ文档
关于PYNQ的所有资料都可以在网站pynq.io中找到,点击getting started就进入了PYNQ的文档页面。文档中包含了如何设置PYNQ等入门资料、如何创建PYNQ的FPGA硬件工程、PYNQ libraries的详细介绍以及最关键的python-PYNQ的函数文档,也可以使用搜索功能直接查找关
键词。

图 pynq.io Getting Started

图 pynq.io Getting Started

用户喜欢...

面向基于微控制器的快速原型设计与开发的 CircuitPython 基础知识

虽然 Python 语言让编程变得更加简单,但它最初的设计目的是在拥有足够的处理、内存和外设资源的个人电脑及其他机器上运行。而对于面临较严格的资源和接口限制的嵌入式系统,针对微控制...


英国伯明翰大学团队使用Theano,Python,PYNQ和Zynq开发定点Deep Recurrent神经网络

可编程逻辑(PLD)是由一种通用的集成电路产生的,逻辑功能按照用户对器件编程来确定,用户可以自行编程把数字系统集成在PLD中。经过多年的发展,可编程逻辑器件由70年代的可编程逻辑阵...


Python Web 开发框架 Django 2.0 发布

流行 Python Web 开发框架 Django 释出了 2.0 版本。主要变化包括:停止支持 Python 2 系列,Django 1.11.x 是支持 Python 2.7 的最后版本,Django 2.0 支持 Python 3.4、3.5 和 3.6,其中 Python 3.4 将于 2019 年 3...


STM32H7 的 FMC 外设在 DCACHE 使能 时运行不正常

前段时间接到一个客户的问题。客户描述在使用 STM32H7 的 FMC 时,如果使能了 DCACHE,就运行不正常。数据没有写到 FMC 外部的存储器里,测量 FMC 接口也没有波形跳变。而不使能 DCACHE 工作就是...


使用CircuitPython开发板简化基于ARM®Cortex®-M0 +的物联网嵌入式设计

许多嵌入式应用使用高级MCU,但只需要基本的硬件控制功能,而不需要高级嵌入式设计的硬实时要求。开发商和制造商经常沉浸在硬件设计,C / C ++编程和实时操作系统的细节中。幸运的是,有...


机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算...


机器学习算法与Python实践之(六)二分k均值聚类

机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算...


标签传播算法(Label Propagation)及Python实现

众所周知,机器学习可以大体分为三大类:监督学习、非监督学习和半监督学习。监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期...


关于python中,map,reduce,filter,sort函数的用法

map函数:map函数接受两个参数,一个是函数名,一个是可迭代对象。通过迭代,将可迭代对象里面的对象依次传入函数,完成后返回新的可迭代对象。 用法举例: #依次求[2,4,6,7,8]的平方值...


机器学习算法与Python实践之(五)k均值聚类(k-means)

机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算...


机器学习算法与Python实践之(四)支持向量机(SVM)实现

   机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学...


Python是增长最快的主流编程语言

编程问答网站 Stackoverflow 的数据科学家 David Robinson 称,Python 是访问量增长最快的主流编程语言。在 Stackoverflow 上,主流编程语言如 Java、Javascript、C#、php 和 C++ 的问题访问量过去几年基本没...


适合Java开发者学习的Python入门教程

在Java文章频道里,我们大部分人应该对该语言都非常的了解,而且在该生态圈内至少已经呆了好几年了。这让我们有常规和专业的知识,但是也同时也让我们一些井蛙之见。 在Outside-In Java系...


看一刻钟视频,C/C++代码运行效率就提高了?

我们在实现嵌入式系统功能的同时毫无疑问还需要进行系统工程的优化,尤其是代码的优化,这样才能够充分发挥嵌入式处理器的性能,让代码执行的更快。通常我们会采用三种方式:一是提...


机器学习算法与Python实践之(三)支持向量机(SVM)进阶

机器学习算法与python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算...


机器学习算法与Python实践之(二)支持向量机(SVM)初级

机器学习算法与python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算...