PYNQ-overlay

OVERLAY介绍

Overlays,或者硬件库,都是可编程FPGA的设计理念。通过它们,用户可以把Zynq处理系统(Processing System of the Zynq)上的应用扩展到可编程逻辑层面上。Overlays可以用来加速软件应用或者为特定的应用自定义其硬件平台。

举例来说,FPGA可提供加速的一个经典案例便是图像处理。而一个软件工程师可以在FPGA结构上使用一个overlay进行相似的图像处理操作(比如边缘检测)。Overlays可以依据需求动态的加载到FPGA上,就像调用软件库一样。在这个例子里,不同overlay上的图像处理函数可以根据Python的指令分别进行加载调用。

PYNQ提供了一个Python交互界面,允许我们通过处理系统上的Python来控制可编程逻辑里的overlays。FPGA设计是一个非常专业化的任务,这需要专业的硬件工程知识。PYNQ的overlays就是由硬件设计师创建,并且包装成了PYNQ PYTHON API。软件开发者就可以无需重新自己设计overlay,而是直接使用这些写好的overlay来操作特定的硬件模块。这其实和专业软件工程师设计软件库并把它们包装成用户可用的API的道理一样。

加载Overlay

一般来讲,我们把那些比较基层的、更像是用来做参考设计的overlay称为base overlay。它们是已经烧写在SD卡上的。当然了,我们也可以自己安装新的Overlay并在运行中使用他们。每一个Overlay都会有其对应的.bit文件,比如base_overlay对应的就是base.bit。我们可以用下图的方法加载Overlay。

from pynq import Overlay
overlay = Overlay("base.bit")

对于我们提到的已有的base overlay,PYNQ很贴心的为我们准备了专门的类,方便我们使用它们。之后,我们将通过学习base overlay来熟悉板的使用。调用代码如下图所示:

from pynq.overlays.base import BaseOverlay
base_overlay = BaseOverlay("base.bit")

base_overlay就是把bit文件转化后的python类。对于一个python类,我们自然可以使用前面介绍的辅助函数help来查看这个类到底是个什么东西,通过输入help(base_overlay),我们可以查看这个类的具体介绍。

Help on BaseOverlay in module pynq.overlays.base.base object:

class BaseOverlay(pynq.overlay.Overlay)
 |  The Base overlay for the Pynq-Z2
 |  
 |  This overlay is designed to interact with all of the on board peripherals
 |  and external interfaces of the Pynq-Z2 board. It exposes the following
 |  attributes:
 |  
 |  Attributes
 |  ----------
 |  iop_pmoda : IOP
 |       IO processor connected to the PMODA interface
 |  iop_pmodb : IOP
 |       IO processor connected to the PMODB interface
 |  iop_arduino : IOP
 |       IO processor connected to the Arduino interface
 |  iop_rpi : IOP
 |       IO processor connected to the RPi interface
 |  trace_rpi : pynq.logictools.TraceAnalyzer
 |      Trace analyzer block on RPi interface, controlled by PS.
 |  trace_pmoda : pynq.logictools.TraceAnalyzer
 |      Trace analyzer block on PMODA interface, controlled by PS.
 |  trace_pmodb : pynq.logictools.TraceAnalyzer
 |      Trace analyzer block on PMODB interface, controlled by PS.
 |  leds : AxiGPIO
 |       4-bit output GPIO for interacting with the green LEDs LD0-3
 |  buttons : AxiGPIO
 |       4-bit input GPIO for interacting with the buttons BTN0-3
 |  switches : AxiGPIO
 |       2-bit input GPIO for interacting with the switches SW0 and SW1
 |  rgbleds : [pynq.board.RGBLED]
 |       Wrapper for GPIO for LD4 and LD5 multicolour LEDs
 |  video : pynq.lib.video.HDMIWrapper
 |       HDMI input and output interfaces
 |  audio : pynq.lib.audio.Audio
 |       Headphone jack and on-board microphone
 |  pin_select : GPIO
 |      The pin selection between PMODA (0) and RPI header (1).
 |  
 |  Method resolution order:
 |      BaseOverlay
 |      pynq.overlay.Overlay
 |      pynq.pl.Bitstream
 |      pynq.pl._BitstreamMeta
 |      builtins.object
 

 

PYNQ-Z2 BASEOVERLAY

PYNQ-Z2上的base overlay所涉及的硬件如下:

  • HDMI接口(输入输出)
  • Audio codec
  • 4个绿色LED,2个彩色LED,两个开关,四个按钮
  • 两个Pmod PYNQ Microblaze
  • Arduino PYNQ Microblaze
  • RPI (Raspberry Pi) PYNQ MicroBlaze
  • 4个跟踪分析器(PMODA, PMODB, ARDUINO, RASPBERRYPI)

HDMI

PYNQ-Z2板上有HDMI输入与HDMI输出端口。HDMI接口是直接连接到可编程逻辑引脚上的。在板上没有外用的HDMI电路。HDMI接口是由可编程逻辑模块的HDMI IP控制的。

HDMI IP是链接到处理系统DRAM上的,视频可以以流的方式从HDMI输入端进入内存,然后再从HDMI输出端流出。这就允许我们通过python来处理视频数据,或者干脆通过python写一段视频流然后再由HDMI输出。

虽然Jupyter notebook支持内嵌的video形式,但是我们从HDMI捕捉到的视频数据会是原生的,如果不进行适当的编码处理,将无法在notebook上直接播放。

HDMI IN

HDMI输入端IP可以捕捉标准的HDMI分辨率。在HDMI资源被连接后,HDMI控制器就会启动,并自动检测输入的数据。分辨率情况可以从Python 的HDMI类里读取,图像数据也可以流入处理系统DRAM。

HDMI OUT

HDMI输出端IP支持一下分辨率:

  • 640x480

  • 800x600

  • 1280x720 (720p)

  • 1280x1024

  • 1920x1080 (1080p)

数据可以从处理系统DRAM流到HDMI输出端。HDMI输出控制器能通过帧缓冲器来达到视频数据的流畅播放。

 

你可能感兴趣的:(#,PYNQ)