1. 程式人生 > >xilinx PYNQ PS與PL的介面說明

xilinx PYNQ PS與PL的介面說明

PS/PL Interfaces

Zynq在PS和PL之間有9個AXI介面。 在PL方面,有4x AXI Master HP(高效能)埠,2x AXI GP(通用)埠,2x AXI Slave GP埠和1x AXI Master ACP埠。 PS中還有連線到PL的GPIO控制器。 在這裡插入圖片描述

有四個pynq類用於管理Zynq PS(包括PS DRAM)和PL介面之間的資料移動。

1.GPIO - 通用輸入/輸出 2.MMIO - 記憶體對映IO 3.Xlnk - 記憶體分配 4.DMA - 直接記憶體訪問

使用的類取決於IP連線的Zynq PS介面以及IP的介面。

在PYNQ上執行的Python程式碼可以使IP通過AXI Slave訪問連線到GP埠。 MMIO可用於執行此操作。

連線到AXI Master埠的IP不受PS的直接控制。 AXI Master埠允許IP直接訪問DRAM。在執行此操作之前,應分配記憶體以供IP使用。 Xlnk類可用於執行此操作。對於PS DRAM和IP之間的更高效能資料傳輸,可以使用DMA。 PYNQ提供DMA類。

在設計自己的 overlay時,您需要考慮所需的IP型別以及它如何連線到PS。然後,您應該能夠確定使用IP所需的類。

PS GPIO

從Zynq PS到PL有64個GPIO(線路)。

來自PS的PS GPIO線可以作為非常簡單的方式用來進行PS和PL之間通訊。 例如,GPIO可用作復位或中斷的控制訊號。

IP連線到GPIO,不必對映到系統儲存器對映。

有關使用PS GPIO的更多資訊,請參閱PS GPIO部分。

MMIO

連線到AXI Slave GP埠的任何IP都將對映到系統儲存器對映中。 MMIO可用於讀/寫記憶體對映位置。 MMIO讀或寫命令是將32位資料傳輸到儲存器位置或從儲存器位置傳輸32位資料的單個事務。 由於不支援突發指令,MMIO最適合從IP連線到AXI Slave GP埠讀取和寫入少量資料。

有關使用MMIO的更多資訊,請參閱MMIO部分。

Xlnk

必須先分配記憶體,然後才能通過IP訪問記憶體。 Xlnk允許分配記憶體緩衝區。 Xlnk分配一個連續的記憶體緩衝區,允許在PS和PL之間有效地傳輸資料。 Python或其他程式碼執行在PS端的Linux上,可以直接訪問記憶體緩衝區。

當PYNQ執行Linux時,緩衝區將存在於Linux虛擬記憶體中。 Zynq AXI Slave埠允許overlay中的 AXI-master IP訪問實體記憶體。 Xlnk還可以提供指向緩衝區的實體記憶體指標,該指標可以傳送到overlay中的IP。 實體地址儲存在分配的記憶體緩衝區例項的physical_address屬性中。 然後,overlay中的IP可以使用實體地址訪問同一緩衝區。

有關使用Xlnk的更多資訊,請參閱Xlnk部分。

DMA

AXI stream介面通常用於高效能流應用。 AXI stream可以通過DMA與Zynq AXI HP埠一起使用。

pynq DMA類支援AXI直接記憶體訪問IP。 這允許資料從DRAM讀取,併發送到AXI stream,或從stream接收並寫入DRAM。

有關使用DMA的更多資訊,請參見DMA部分。

Interrupt

有一些專用中斷與python環境中的asyncio事件相關聯。 要整合到PYNQ框架中,必須將專用中斷連線到AXI中斷控制器,該控制器又連線到PS的第一個中斷線。 如果需要超過32箇中斷,則可以級聯AXI中斷控制器。 對於不受PYNQ直接控制的IP,例如SDSoC加速器,這種安排使其他中斷空閒。

中斷由Interrupt類管理,實現基於asyncio構建,asyncio是Python標準庫的一部分。

有關使用中斷類的更多資訊,請參見“中斷”部分。

有關asyncio的更多詳細資訊,如何與PYNQ一起使用,請參閱PYNQ和Asyncio部分。