ZYNQ作為首款將高性能ARMCortex-A系列處理器與高性能FPGA在單芯片內(nèi)緊密結(jié)合的產(chǎn)品,為了實(shí)現(xiàn)ARM處理器和FPGA之間的高速通信和數(shù)據(jù)交互,發(fā)揮ARM處理器和FPGA的性能優(yōu)勢(shì),需要設(shè)計(jì)高效的片內(nèi)高性能處理器與 FPGA 之間的互聯(lián)通路。因此,如何設(shè)計(jì)高效的 PL 和 PS 數(shù)據(jù)交互通路是 ZYNQ 芯片設(shè)計(jì)的重中之重,也是產(chǎn)品設(shè)計(jì)的成敗關(guān)鍵之一。 ?
? ? ? 主要介紹 PS 和 PL 的連接,了解 PS 和 PL 之間連接的技術(shù)。
? ? ?其實(shí),在具體設(shè)計(jì)中我們往往不需要在連接這個(gè)地方做太多工作,我們加入 IP 核以后,系統(tǒng)會(huì)自動(dòng)使用 AXI 接口將我們的 IP 核與處理器連接起來(lái),我們只需要再做一點(diǎn)補(bǔ)充就可以了。不過(guò),這部分概念還是了解比較好。
AXI 接口標(biāo)準(zhǔn)介紹
AXI?是 Xilinx 從 6 系列的 FPGA 開(kāi)始引入的一個(gè)接口協(xié)議,主要描述了主設(shè)備和從設(shè)備之間的數(shù)據(jù)傳輸方式。在 ZYNQ 中繼續(xù)使用,版本是AXI4,所以我們經(jīng)常會(huì)看到 AXI4.0,ZYNQ 內(nèi)部設(shè)備都有AXI接口。其實(shí)AXI 就是ARM 公司提出的 AMBA(AdvancedMicrocontrollerBusArchitecture)的一個(gè)部分,是一種高性能、高帶寬、低延遲的片內(nèi)總線,也用來(lái)替代以前的 AHB 和 APB 總線。第一個(gè)版本的 AXI (AXI3)包含在 2003 年發(fā)布的 AMBA3.0 中,AXI 的第二個(gè)版本 AXI(AXI4)包含在 2010 年發(fā)布的AMBA4.0 之中。
AXI 協(xié)議主要描述了主設(shè)備和從設(shè)備之間的數(shù)據(jù)傳輸方式,主設(shè)備和從設(shè)備之間通過(guò)握手信號(hào)建立連接。當(dāng)從設(shè)備準(zhǔn)備好接收數(shù)據(jù)時(shí),會(huì)發(fā)出 READY 信號(hào)。當(dāng)主設(shè)備的數(shù)據(jù)準(zhǔn)備好時(shí),會(huì)發(fā)出和維持 VALID 信號(hào),表示數(shù)據(jù)有效。數(shù)據(jù)只有在 VALID 和 READY 信號(hào)都有效的時(shí)候才開(kāi)始傳輸。當(dāng)這兩個(gè)信號(hào)持續(xù)保持有效,主設(shè)備會(huì)繼續(xù)傳輸下一個(gè)數(shù)據(jù)。主設(shè)備可以撤銷(xiāo) VALID信號(hào),或者從設(shè)備撤銷(xiāo) READY 信號(hào)終止傳輸。AXI 的協(xié)議如圖 1,T2 時(shí),從設(shè)備的 READY信號(hào)有效,T3 時(shí)主設(shè)備的 VILID 信號(hào)有效,數(shù)據(jù)傳輸開(kāi)始。
圖 1AXI 握手時(shí)序圖
在 ZYNQ 中,支持 AXI-Lite,AXI4 和 AXI-Stream 三種總線,通過(guò)表1,我們可以看到這三中 AXI 接口的特性。 ?表 1AXI 接口分類(lèi)
AXI-Lite:
具有輕量級(jí),結(jié)構(gòu)簡(jiǎn)單的特點(diǎn),適合小批量數(shù)據(jù)、簡(jiǎn)單控制場(chǎng)合。不支持批量傳輸,讀寫(xiě)時(shí)一次只能讀寫(xiě)一個(gè)字(32bit)。主要用于訪問(wèn)一些低速外設(shè)和外設(shè)的控制。
AXI4:
接口和 AXI-Lite 差不多,只是增加了一項(xiàng)功能就是批量傳輸,可以連續(xù)對(duì)一片地址進(jìn)行一次性讀寫(xiě)。也就是說(shuō)具有數(shù)據(jù)讀寫(xiě)的 burst 功能。
上面兩種均采用內(nèi)存映射控制方式,即 ARM 將用戶(hù)自定義 IP 編入某一地址進(jìn)行訪問(wèn),讀寫(xiě)時(shí)就像在讀寫(xiě)自己的片內(nèi) RAM,編程也很方便,開(kāi)發(fā)難度較低。代價(jià)就是資源占用過(guò)多,需要額外的讀地址線、寫(xiě)地址線、讀數(shù)據(jù)線、寫(xiě)數(shù)據(jù)線、寫(xiě)應(yīng)答線這些信號(hào)線。
AXI-Stream:
這是一種連續(xù)流接口,不需要地址線(很像 FIFO,一直讀或一直寫(xiě)就行)。對(duì)于這類(lèi) IP,ARM 不能通過(guò)上面的內(nèi)存映射方式控制(FIFO 根本沒(méi)有地址的概念),必須有一個(gè)轉(zhuǎn)換裝置,例如 AXI-DMA 模塊來(lái)實(shí)現(xiàn)內(nèi)存映射到流式接口的轉(zhuǎn)換。AXI-Stream 適用的場(chǎng)合有很多:視頻流處理;通信協(xié)議轉(zhuǎn)換;數(shù)字信號(hào)處理;無(wú)線通信等。其本質(zhì)都是針對(duì)數(shù)值流構(gòu)建的數(shù)據(jù)通路,從信源(例如 ARM 內(nèi)存、DMA、無(wú)線接收前端等)到信宿(例如 HDMI 顯示器、高速AD 音頻輸出,等)構(gòu)建起連續(xù)的數(shù)據(jù)流。這種接口適合做實(shí)時(shí)信號(hào)處理。
AXI4 和 AXI4-Lite 接口包含 5 個(gè)不同的通道:
ReadAddressChannel
WriteAddressChannel
ReadDataChannel
WriteDataChannel
WriteResponseChannel
其中每個(gè)通道都是一個(gè)獨(dú)立的 AXI 握手協(xié)議。下面兩個(gè)圖分別顯示了讀和寫(xiě)的模型:
圖 2AXI 讀數(shù)據(jù)通道
圖 3AXI 寫(xiě)數(shù)據(jù)通道
ZYNQ 的 AXI 資源
在 ZYNQ 芯片內(nèi)部用硬件實(shí)現(xiàn)了 AXI 總線協(xié)議,包括 9 個(gè)物理接口,分別為 AXI-GP0~AXI-GP3,AXI-HP0~AXI-HP3,AXI-ACP 接口。
AXI_ACP 接口,是 ARM 多核架構(gòu)下定義的一種接口,中文翻譯為加速器一致性端口,用來(lái)管理 DMA 之類(lèi)的不帶緩存的 AXI 外設(shè),PS 端是 Slave 接口。
AXI_HP 接口,是高性能/帶寬的 AXI3.0 標(biāo)準(zhǔn)的接口,總共有四個(gè),PL 模塊作為主設(shè)備連接。主要用于 PL 訪問(wèn) PS 上的存儲(chǔ)器(DDR 和 On-ChipRAM)
AXI_GP 接口,是通用的 AXI 接口,總共有四個(gè),包括兩個(gè) 32 位主設(shè)備接口和兩個(gè) 32 位從設(shè)備接口。
AXI接口分布圖如下圖 4 所示:
圖4AXI接口分布圖
可以看到,只有兩個(gè) AXI-GP 是 MasterPort,即主機(jī)接口,其余 7 個(gè)口都是 SlavePort(從機(jī)接口)。主機(jī)接口具有發(fā)起讀寫(xiě)的權(quán)限,ARM 可以利用兩個(gè) AXI-GP 主機(jī)接口主動(dòng)訪問(wèn)PL 邏輯,其實(shí)就是把 PL 映射到某個(gè)地址,讀寫(xiě) PL 寄存器如同在讀寫(xiě)自己的存儲(chǔ)器。其余從機(jī)接口就屬于被動(dòng)接口,接受來(lái)自 PL 的讀寫(xiě),逆來(lái)順受。
另外這 9 個(gè) AXI 接口性能也是不同的。GP 接口是 32 位的低性能接口,理論帶寬 600MB/s,而 HP 和 ACP 接口為 64 位高性能接口,理論帶寬 1200MB/s。有人會(huì)問(wèn),為什么高性能接口不做成主機(jī)接口呢?這樣可以由 ARM 發(fā)起高速數(shù)據(jù)傳輸。答案是高性能接口根本不需要 ARMCPU 來(lái)負(fù)責(zé)數(shù)據(jù)搬移,真正的搬運(yùn)工是位于 PL 中的 DMA 控制器。
PL 端的 AXI 接口設(shè)計(jì)
位于 PS 端的 ARM 直接有硬件支持 AXI 接口,而 PL 則需要使用邏輯實(shí)現(xiàn)相應(yīng)的 AXI 協(xié)議。Xilinx在Vivado開(kāi)發(fā)環(huán)境里提供現(xiàn)成IP如AXI-DMA,AXI-GPIO,AXI-Dataover,AXI-Stream都實(shí)現(xiàn)了相應(yīng)的接口,使用時(shí)直接從 Vivado 的 IP 列表中添加即可實(shí)現(xiàn)相應(yīng)的功能。 ? 下圖為Vivado 下的各種 DMAIP:
圖 5AXIDMAIP 核
下面為幾個(gè)常用的 AXI 接口 IP 的功能介紹:
AXI-DMA:實(shí)現(xiàn)從 PS 內(nèi)存到 PL 高速傳輸高速通道 AXI-HP<---->AXI-Stream 的轉(zhuǎn)換
AXI-FIFO-MM2S:實(shí)現(xiàn)從 PS 內(nèi)存到 PL 通用傳輸通道 AXI-GP<----->AXI-Stream 的轉(zhuǎn)換
AXI-Datamover:實(shí)現(xiàn)從 PS 內(nèi)存到 PL 高速傳輸高速通道 AXI-HP<---->AXI-Stream 的轉(zhuǎn)換,只不過(guò)這次是完全由 PL 控制的,PS 是完全被動(dòng)的。
AXI-VDMA:實(shí)現(xiàn)從 PS 內(nèi)存到 PL 高速傳輸高速通道 AXI-HP<---->AXI-Stream 的轉(zhuǎn)換,只不過(guò)是專(zhuān)門(mén)針對(duì)視頻、圖像等二維數(shù)據(jù)的。
AXI-CDMA:這個(gè)是由 PL 完成的將數(shù)據(jù)從內(nèi)存的一個(gè)位置搬移到另一個(gè)位置,無(wú)需 CPU 來(lái)插手。
有時(shí),用戶(hù)需要開(kāi)發(fā)自己定義的IP同PS進(jìn)行通信,這時(shí)可以利用向?qū)蓪?duì)應(yīng)的IP。用戶(hù)自定義IP核可以擁有AXI-Lite,AXI4,AXI-Stream,PLB 和 FSL 這些接口。后兩種由于 ARM 這一端不支持,所以不用。
有了上面的這些官方 IP 和向?qū)傻淖远x IP,用戶(hù)其實(shí)不需要對(duì) AXI 時(shí)序了解太多(除非確實(shí)遇到問(wèn)題),因?yàn)?Xilinx 已經(jīng)將和 AXI 時(shí)序有關(guān)的細(xì)節(jié)都封裝起來(lái),用戶(hù)只需要關(guān)注自己的邏輯實(shí)現(xiàn)即可。
AXI Interconnect
AXI 協(xié)議嚴(yán)格的講是一個(gè)點(diǎn)對(duì)點(diǎn)的主從接口協(xié)議,當(dāng)多個(gè)外設(shè)需要互相交互數(shù)據(jù)時(shí),我們需要加入一個(gè) AXIInterconnect 模塊,也就是 AXI 互聯(lián)矩陣,作用是提供將一個(gè)或多個(gè) AXI主設(shè)備連接到一個(gè)或多個(gè) AXI 從設(shè)備的一種交換機(jī)制(有點(diǎn)類(lèi)似于交換機(jī)里面的交換矩陣)。
這個(gè) AXIInterconnectIP 核最多可以支持 16 個(gè)主設(shè)備、16 個(gè)從設(shè)備,如果需要更多的接口,可以多加入幾個(gè) IP 核。
AXIInterconnect 基本連接模式有以下幾種:
N-to-1Interconnect
1-to-NInterconnect
N-to-MInterconnect(CrossbarMode)
N-to-MInterconnect(SharedAccessMode)
圖 6?多對(duì)一的情況
圖7 一對(duì)多的情況
圖8 多對(duì)多讀寫(xiě)地址通道
圖9 多對(duì)多讀寫(xiě)數(shù)據(jù)通道 ? ?
ZYNQ 內(nèi)部的 AXI 接口設(shè)備就是通過(guò)互聯(lián)矩陣的的方式互聯(lián)起來(lái)的,既保證了傳輸數(shù)據(jù)的高效性,又保證了連接的靈活性。Xilinx 在 Vivado 里我們提供了實(shí)現(xiàn)這種互聯(lián)矩陣的 IP 核axi_interconnect,我們只要調(diào)用就可以。
圖10 AXIInterconnectIP
?
審核編輯 :李倩
?
評(píng)論
查看更多