Xilinx FPGA ZYNQ嵌入式开发之PYNQ

792 阅读2分钟

1 Zynq PS与PL之间的接口

  • Zynq 在 PS 和 PL 之间具有 9 路 AXI 接口。在 PL 侧,有 4 路 AXI Master HP(高性能)接口,2 路 AXI Master GP(通用)接口,2 路 AXI Slave GP 接口和 1 路 AXI Master ACP 接口。PS 中还有连接到 PL 的 GPIO控制器 image.png

2 PYNQ 接口类

image.png

  • ZYNQ 提供了用于 PS-PL 接口的 Linux 驱动程序。运行在 PS 中的 linux 内核与PL的FPGA之间通过 linux 驱动 fpga_manager、sysgpio、uio、devmem 和 xlnk 进行交互。 image.png

2.1 linux 驱动与PS 和 PL 接口之间的对应关系是:

  • fpga_manager 驱动用于下载 bitstream 文件到 PL
  • sysgpio 驱动控制 PS 与PL 之间的 EMIO 接口
  • uio 驱动实现 PL 到 PS 的中断管理
  • devmem 驱动用于 PS 侧的 AXI Master GP 接口
  • xlnk 驱动用于 PS 侧的 AXI Slave HP 接口
  • AXI Slave GP 接口

2.2 管理 ZYNQ PS(包括 PS DRAM)和 PL 接口之间的数据移动pynq 接口类

  • 在 PYNQ 中除了 Overlay 类用于通过 fpga_manager 驱动下载 bitstream 文件到 PL 外,还有四个 pynq 接口类用于管理 ZYNQ PS(包括 PS DRAM)和 PL 接口之间的数据移动。这四个类分别是:
  • GPIO(General Purpose Input/Output)——通用输入/输出->PYNQ 的 GPIO 类可以用于控制连接到 PL 侧的 GPIO 外设,也可以作为 IP 的中断或复位信号。
  • MMIO(Memory Mapped IO)内存映射 IO->PYNQ 的 MMIO 类可以使运行的 Python 代码访问与 PS AXI Master GP 接口相连的具有 PL AXI Slave接口的 IP。
  • Xlnk(Memory allocation)内存分配->具有 AXI Master 接口的 IP 不受 PS 的直接控制,而且AXI Master接口的IP允许直接访问 DRAM。在访问 DRAM 之前,应先使用 Xlnk 类分配内存供 IP 使用。
  • DMA(Direct Memory Access)直接内存访问->于需要实现 PS DRAM 与 IP 之间更高性能的数据传输,可以使用 DMA。为此PYNQ 提供了DMA 类。