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")