在上一篇博客中,主要介紹了ZYNQ的基本信息以及如何在vivado上實現自己的設計,但是在實際應用中,掌握ZYNQ的架構是必要的,因此在這篇博客中主要記錄一下ZYNQ的架構
本篇博客的主要參考是ZYNQ book,有興趣的可以去閱讀一下,里面對於ZYNQ的介紹我認為講的還不錯,適合入門使用
處理器系統
- 硬處理器:一顆雙核ARM Cortex-A9處理器
- 軟處理器:Xilinx的MicroBlaze,由可編程邏輯部分的單元組合而成
- 軟處理器的優勢是處理器實例的數量和精確實現是靈活的,而硬處理器可以獲得相對較高的性能,可以在ZYNQ的PL部分分配上一個或多個MicroBlaze軟處理器,用於和ARM處理器協同工作
下面着重來介紹一下PS部分,提到PS部分,下面這張圖需要掌握:
上圖就是PS部分的架構框圖,高亮的部分是APU
應用處理器單元(APU)
ZYNQ的處理器系統里並非只有ARM處理器,還有一組相關的處理資源,形成了一個應用處理器單元(Application Processing Unit,APU),除此之外還有時鍾發生電路,擴展外設接口,存儲器接口等
APU主要由兩個ARM處理核組成,每個都關聯了一些可計算的單元:
- 一個NEONTM媒體處理引擎(Media Processing Engine,MPE)
- 浮點單元(Floating Point Unit,FPU)
- 一個內存管理單元(Memory Management Unit,MMU):在虛擬地址和物理地址之間做翻譯
- 一個一級cache存儲器(分為指令和數據兩個部分)
- 一個二級cache存儲器
- 片上存儲器(On Chip Memory,OCM)
- 一個一致性控制單元(Snoop Control Unit,SCU)在ARM核和二級cache及OCM存儲器之間形成了橋連接
從編程的角度而言,對ARM指令的支持是由Xilinx的軟件開發包(Software Development Kit, SDK)來實現的,同時編譯器支持ARM和Thumb指令集(16位或32位),在特定的狀態下還支持8位Java字節碼(用於Java虛擬機)
處理器系統外部接口
PS和外部接口之間的通信主要是通過復用的輸入/輸出(MIO)實現的,提供了可靈活配置的54個引腳,也可以通過擴展MIO(EMIO)實現,但是EMIO並不是PS和外部連接之間的直接通路,而是通過共用PL的I/O資源實現的
可用的I/O包括標准通信接口和通用輸入輸出,如下圖所示:
可編程邏輯
ZYNQ的PL部分是基於Artix-7和Kintex-7的FPGA
- 可配置邏輯塊(CLB):在PL中排列為一個二維陣列,通過可編程互聯連接到其他類似的資源,每個CLB中包含兩個邏輯片,且緊鄰一個開關矩陣
- 片(Slice):CLB中的一些子單元,ZYNQ的片是由4個查找表、8個觸發器和其他一些邏輯所組成的
- 開關矩陣:每個CLB旁都有一個開關矩陣,實現靈活的布線功能來連接CLB內的單元或把一個CLB與PL內的其他資源連接起來
- 輸入/輸出塊(IOB):實現PL邏輯資源之間的對接,並且提供物理設備焊盤來連接外部電路
特殊資源
- 塊RAM
- 每個塊RAM可以存儲最多36KB的信息,並且可以配置為一個36KB的RAM或兩個獨立的18KB的RAM(默認的字寬是18位),還可以被重塑來包含更多更小或更少更長的單元
- DSP48E1
- 邏輯部分的LUT可以用來實現任意長度的算術運算,但是最適合的是做短字長的算術運算,而DSP48E1是專門用於實現對長字節的高速算術運算的邏輯片
通用輸入/輸出
ZYNQ上的IOB合起來稱為SelectIO資源,被組成50個IOB一組,每個IOB有一個焊盤,與外部世界連接來做單個信號的輸入輸出
I/O組分為高性能(High Performance,HP)或高范圍(High Range,HR),支持各種IO標准和電壓
- HP接口的電壓最高為1.8V,通常用作連接存儲器和其他芯片的高速接口
- HR接口允許高達3.3V的電壓,適合做各種IO標准的連接
- 兩類接口都支持單端和差分信號,單端需要一個IOB連接,差分需要兩個
- 每個IOB還包含一個IOSERDES資源,可以做並行和串行數據的可編程轉換,數據可以是2位到8位的
其他可編程邏輯擴展接口
-
模數轉換:XADC塊,具有兩個獨立的12位ADC,每個可以以1Msps對外部模擬信號采樣,對XADC的控制是用位於PS內部的PS-XADC接口控制塊實現的,可以由在APU上執行的軟件來編程
-
時鍾:PL接收來自PS的四個獨立的時鍾輸入
-
編程和調試:在PL部分實現了一組JTAG端口來實現對PL的配置和調試
處理器系統與可編程邏輯的接口
AXI標准
AXI表示的是高級可擴展接口(Advanced Extensible Interface),當前的版本是AXI4,是ARM AMBA3.0開放標准的一部分
- AXI4
- AXI4-Lite:只支持每次連接傳輸一個數據
- AXI4-Stream:用於高速流數據,支持批量傳輸無限大小的數據,沒有地址機制
存儲映射:如果一個協議是存儲映射的,則在主機所發出的會話就會標明一個地址,對於每次會話單個數據傳輸的AXI4-Lite而言,數據就是寫入那個指定的地址或者從那個地址讀出;而對於AXI4批量的情況下,地址表明的是要傳輸的第一個數據字的地址,而從機端必須計算隨后的數據字的地址
AXI互聯和接口
在PS和PL之間的主要連接是通過一組9個AXI接口,每個接口由多個通道組成,這些形成了PS內部的互聯以及與PL的連接
-
互聯(Interconnect):實際上是一個開關,管理並直接傳遞所連接的AXI接口間的通信,在PS內有幾個互聯,其中有一些直接連接到PL,而另一些只用於內部連接,互聯之間的連接也是用AXI接口所構成的
-
接口(Interface):用於在系統中的主機和從機之間傳遞數據、地址和握手信號的點對點連接
在處理器系統內部,AXI接口用來連接處理器核和SCU、cache存儲器和OCM,以及連接PS內的各種互聯,這些連接是對PS-PL邊界上的連接的補充,上圖中所示的三個互聯(存儲器、主機和從機互聯)是內部連接到中央互聯的
-
通用AXI:一條32位數據總線,共有四個通用接口:兩個PS做主機,兩個PL做主機
-
加速器一致性端口:在PL和APU內的SCU之間的單個異步連接,總線寬度為64位,端口用於實現APU cache和PL的單元之間的一致性
-
高性能端口:四個高性能AXI接口,帶有FIFO緩沖來提供批量讀寫操作,並支持PL和PS中的存儲器單元的高速率通信,數據寬度是32位或64位,在所有四個接口中PL都是做主機的
EMIO接口
EMIO不支持所有的MIO接口,支持的那些能力也受到了限制,被分為兩個32位的組
- 直接連接到所需的PL的外部引腳上,這個連接是由一個約束文件中的條目指定的,在這種模式下,EMIO可以實現額外的64個輸入線和64個帶有輸出使能的輸出線
- 連接PS和PL里的外設模塊