PYNQ是利用Python语言对ZYNQ进行开发的项目。PYNQ从SD卡中启动,从镜像文件中加载系统程序,经过网口链接到浏览器上的Jupyter Notebook,在上面进行Python开发。html
PS中运行程序,利用PL设计相应的模块加速程序算法,最后将编译的程序文件和FPGA配置文件封装成一个独立的、能够在Python开发环境中调用的Overlay。因此从最底层的ZYNQ开发起步,熟悉PS和PL设计流程,而后了解Overlay是怎么生成的,最后学习Python中如何调用底层文件来实现功能,才能对整个系统有一个总体的概念。
ZYNQ开发主要分为PS开发和PL开发,可是两者是相辅相成的,PL开发是为PS服务的,而少了PL部分,PS程序也没法实现。主要开发工具是Vivado,推荐教程为xilinx的Advanced-Embedded-System-Design-Flow-on-Zynq。python
Zynq 的本质特征,是它组合了一个双核ARM Cortex-A9 处理器和一个传统的现场可编程门阵列(Field Programmable Gate Array,FPGA)逻辑部件。
在Zynq上,ARM Cortex-A9 是一个应用级的处理器,能运行完整的像Linux 这样的操做系统,而可编程逻辑是基于Xilinx 7 系列的FPGA 架构。这个架构实现了工业标准的AXI 接口,在芯片的两个部分之间实现了高带宽、低延迟的链接。
git
基于Artix-7和Kintex-7的FPGA组件。github
from pynq import Overlay from pynq.lib.axigpio import * ol = Overlay("lab1.bit") ol.download() print(ol.ip_dict.keys()) btn = ol.buttons sw = ol.switches led = ol.leds btn.setdirection(AxiGPIO.Input) sw.setdirection(AxiGPIO.Input) led.setdirection(AxiGPIO.Output) led.write(4, 0xf) print("-- Press any of BTN0-BTN3 to see corresponding output on LEDs --\r\n") print(("-- Set slide switches to 0x03 to exit the program --\r\n")) while not sw.read(0) & 0xf == 0x3: mask = btn.read(0) & 0xf led.write(0, mask) print("-- End of Program --\r\n")