Zynq-7000 系列的亮點在於它包含了完整的 ARM 處理器系統,且處理器系統中集成了內存控制器和大量的外設, 使 Cortex-A9 處理器可以完全獨立於可編程邏輯單元。 而且實際上在 ZYNQ 中, PL 和 PS 兩部分的供電電路是獨立的,這樣 PS 或 PL 部分不被使用的話就可以被斷電。
Xilinx 的 MicroBlaze 處理器或者 Altera 的 Nios II 處理器。 像這種使用 FPGA 的可編程邏輯資源搭建的處理器我們稱之為“軟核”處理器,它的優勢在於處理器的數量以及實現方式的靈活性。
ZYNQ 中集成的是一顆“硬核”處理器, 它是硅芯片上專用且經過優化的硬件電路, 硬核處理器的優勢是它可以獲得相對較高的性能。 另外, ZYNQ 中的硬件處理器和軟核處理器並不衝突,我們完全可以使用 PL 的邏輯資源搭建一個 Microblaze 軟核處理器,來和 ARM 硬核處理器協同工作。
需要注意的是, Zynq 處理器系統裏並非只有 ARM 處理器,還有一組相關的處理資源,形成了一個應用處理器單元(Application Processing Unit, APU),另外還有擴展外設接口、 cache 存儲器、存儲器接口、互聯接口和時鐘發生電路等。
ZYNQ 處理器系統(PS) 示意圖如下所示,其中紅色高亮區域為 APU。
(1)APU
APU 主要是由兩個 ARM 處理器核組成的,每個都關聯了一些可計算的單元:一個 NEONTM 媒體處理引擎(Media Processing Engine, MPE)和浮點單元(Floating PointUnit, FPU);一個內存管理單元(Memory Management Unit, MMU);和一個一級 cache 存儲器(分為指令和數據兩個部分)。 APU 裏還有一個二級 cache 存儲器,再往下還有片上存儲器
(2)外部接口
Zynq PS 實現了眾多接口,既有 PS 和 PL 之間的,也有 PS 和外部部件之間的。
PS 和外部接口之間的通信主要是通過複用的輸入/輸出(Multiplexed Input/Output, MIO)實現的,它提供了可以靈活配置的 54 個引腳,這表明外部設備和引腳之間的映射是可以按需定義的。
擴展 MIO(Extended MIO, EMIO)來實現, EMIO 並不是 PS 和外部連接之間的直接通路,而是通過共用了 PL 的 I/O 資源來實現的。
PS 中可用的 I/O 包括標準通信接口和通用輸入/輸出(General Purpose Input/Output,GPIO), GPIO 可以用做各種用途,包括簡單的按鈕、開關和 LED。 如下圖所示:
(3)存儲器接口
一個動態存儲器控制器和幾個靜態存儲器接口模塊。
動態存儲器控制器可以用於 DDR3、 DDR3L、 DDR2 或 LPDDR2。
靜態存儲器控制器支持一個 NAND 閃存接口、一個 Quad-SPI 閃存接口、一個並行數據總線和並行 NOR 閃存接口。
(4)片上存儲器
256kB 的 RAM(OCM)和 128kB 的 ROM(BootROM)。
OCM 支持兩個 64 位 AXI從機接口端口,一個端口專用於通過 APU SCU 的 CPU/ACP 訪問,而另一個是由 PS 和 PL 內其他所有的總線主機所共享的。
BootROM 是 ZYNQ 芯片上的一塊非易失性存儲器,它包含了 ZYNQ 所支持的配置器件的驅動。 BootROM 對於用户是不可見的,專門保留且只用於引導的過程。
(5)AXI 接口
ZYNQ 將高性能 ARM Cotex-A 系列處理器與高性能 FPGA 在單芯片內緊密結合,為設計帶來了如減小體積和功耗、 降低設計風險,增加設計靈活性等諸多優點。在將不同工藝特徵的處理器與 FPGA 融合在一個芯片上之後, 片內處理器與 FPGA 之間的互聯通路就成了 ZYNQ 芯片設計的重中之重。如果 CotexA9 與 FPGA 之間的數據交互成為瓶頸, 那麼處理器與 FPGA 結合的性能優勢就不能發揮出來。
Xilinx 從 Spartan-6 和 Virtex-6 系列開始使用 AXI 協議來連接 IP 核。在 7 系列和 ZYNQ-7000 AP SoC器件中, Xilinx 在 IP 核中繼續使用 AXI 協議。
AXI 的英文全稱是 Advanced eXtensible Interface, 即高級可擴展接口,它是 ARM 公司所提出的 AMBA(Advanced Microcontroller Bus Architecture)協議的一部分。
AXI 協議是一種高性能、高帶寬、低延遲的片內總線,具有如下特點:
1) 總線的地址/控制和數據通道是分離的;
2)支持不對齊的數據傳輸;
3)支持突發傳輸, 突發傳輸過程中只需要首地址;
4)具有分離的讀/寫數據通道;
5)支持顯著傳輸訪問和亂序訪問;
6)更加容易進行時序收斂。
在數字電路中只能傳輸二進制數 0 和 1,因此可能需要一組信號才能高效地傳輸信息, 這一組信號就組成了接口。 AXI4 協議支持以下三種類型的接口:
1)AXI4: 高性能存儲映射接口。
2)AXI4-Lite:簡化版的 AXI4 接口, 用於較少數據量的存儲映射通信。
3)AXI4-Stream: 用於高速數據流傳輸,非存儲映射接口。
在這裏首先我們首先解釋一下存儲映射(Meamory Map)這一概念。如果一個協議是存儲映射的,那麼主機所發出的會話(無論讀或寫) 就會標明一個地址。 這個地址對應於系統存儲空間中的一個地址, 表明是針對該存儲空間的讀寫操作。
AXI4 協議支持突發傳輸,主要用於處理器訪問存儲器等需要指定地址的高速數據傳輸場景。 AXI-Lite為外設提供單個數據傳輸,主要用於訪問一些低速外設中的寄存器。而 AXI-Stream 接口則像 FIFO 一樣,數據傳輸時不需要地址,在主從設備之間直接連續讀寫數據,主要用於如視頻、高速 AD、 PCIe、 DMA 接口等需要高速數據傳輸的場合。
在 PS 和 PL 之間的主要連接是通過一組 9 個 AXI 接口,每個接口有多個通道組成。這些形成了 PS 內部的互聯以及與 PL 的連接, 如下圖所示:
我們將上圖中的接口總結如下所示:
上圖給出了每個接口的簡述,標出了主機和從機(按照慣例,主機是控制總線併發起會話的,而從機是做響應的)。需要注意的是, 接口命名的第一個字母表示的是 PS 的角色,也就是説,第一個字母“M” 表示 PS 是主機,而第一個字母“S”表示 PS 是從機。
上圖中 PS 和 PL 之間的 9 個 AXI 接口可以分成三種類型:
1)通用 AXI(General Purpose AXI):一條 32 位數據總線,適合 PL 和 PS 之間的中低速通信。接口是透傳的不帶緩衝。總共有四個通用接口:兩個 PS 做主機,另兩個 PL 做主機。
2) 加速器一致性端口(Accelerator Coherency Port):在 PL 和 APU 內的 SCU 之間的單個異步連接,總線寬度為 64 位。這個端口用來實現 APU cache 和 PL 的單元之間的一致性。 PL 是做主機的。
3)高性能端口(High Performance Ports):四個高性能 AXI 接口,帶有 FIFO 緩衝來提供“批量”讀寫操作,並支持 PL 和 PS 中的存儲器單元的高速率通信。數據寬度是 32 或 64 位,在所有四個接口中PL 都是做主機的。
上面的每條總線都是由一組信號組成的,這些總線上的會話是根據 AXI4 總線協議進行通信的。