1、概述
ZYNQ是xilinx推出一個款SOC,其亮點(diǎn)在于FPGA里包含了完整的ARM處理子系統(tǒng)(PS),每一顆Zynq系列的處理器都包含了Cortex-A9處理器,整個處理器的搭建都以處理器為中心,而且處理器子系統(tǒng)中集成了內(nèi)存控制器和大量的外設(shè),使Cortex-A9的核在Zynq-7000中完全獨(dú)立于可編程邏輯單元,也就是說如果暫時沒有用到可編程邏輯單元部分(PL),ARM處理器的子系統(tǒng)也可以獨(dú)立工作,這與以前的FPGA有本質(zhì)區(qū)別,其是以處理器為中心的。
Zynq就是兩大功能塊,PS 部分和PL部分,就是ARM的SOC部分,和FPGA部分。其中,PS集成了兩個ARM Cortex?-A9處理器,AMBA®互連,內(nèi)部存儲器,外部存儲器接口和外設(shè)。這些外設(shè)主要包括USB總線接口,以太網(wǎng)接口,SD/SDIO接口,I2C總線接口,CAN總線接口,UART接口,GPIO等。
ZYNQ芯片總體框圖
其中紅色的PS本身自帶的外設(shè),黃色框是PS與PL通信接口(兩個Master、兩個Slaver),藍(lán)色框是高性能PS與PL通信接口其只有Slaver接口,我們現(xiàn)主要用作DMA數(shù)據(jù)傳輸。
2、PS和PL互聯(lián)技術(shù)
ZYNQ作為首款將高性能ARM Cortex-A9系列處理器與高性能FPGA在單芯片內(nèi)緊密結(jié)合的產(chǎn)品,高效的PL和PS數(shù)據(jù)交互通路是ZYNQ芯片設(shè)計(jì)的重中之重。
用戶在具體設(shè)計(jì)中往往不需要在連接這個地方做太多工作,我們加入IP核以后,系統(tǒng)會自動使用AXI接口將我們的IP核與處理器連接起來,我們只需要再做一點(diǎn)補(bǔ)充就可以了。
2.1AXI總線簡介
AXI全稱Advanced eXtensible Interface,是Xilinx從6系列的FPGA開始引入的一個接口協(xié)議,主要描述了主設(shè)備和從設(shè)備之間的數(shù)據(jù)傳輸方式。在ZYNQ中繼續(xù)使用,版本是AXI4,所以我們經(jīng)常會看到AXI4.0,ZYNQ內(nèi)部設(shè)備都有AXI接口。其實(shí)AXI就是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)的一個部分,是一種高性能、高帶寬、低延遲的片內(nèi)總線,也用來替代以前的AHB和APB總線。
AXI協(xié)議主要描述了主設(shè)備和從設(shè)備之間的數(shù)據(jù)傳輸方式,主設(shè)備和從設(shè)備之間通過握手信號建立連接。當(dāng)從設(shè)備準(zhǔn)備好接收數(shù)據(jù)時,會發(fā)出READY信號。當(dāng)主設(shè)備的數(shù)據(jù)準(zhǔn)備好時,會發(fā)出和維持VALID信號,表示數(shù)據(jù)有效。數(shù)據(jù)只有在VALID和READY信號都有效的時候才開始傳輸。當(dāng)這兩個信號持續(xù)保持有效,主設(shè)備會繼續(xù)傳輸下一個數(shù)據(jù)。主設(shè)備可以撤銷VALID信號,或者從設(shè)備撤銷READY信號終止傳輸。AXI的協(xié)議如圖,T2時,從設(shè)備的READY信號有效,T3時主設(shè)備的VILID信號有效,數(shù)據(jù)傳輸開始。
2.2 AXI三種協(xié)議對比
在ZYNQ中,支持AXI-Lite,AXI4和AXI-Stream三種總線,通過下表我們可以看到這三中AXI接口的特性。
AXI4-Lite:
具有輕量級,結(jié)構(gòu)簡單的特點(diǎn),適合小批量數(shù)據(jù)、簡單控制場合。不支持批量傳輸,讀寫時一次只能讀寫一個字(32bit)。主要用于訪問一些低速外設(shè)和外設(shè)的控制。
AXI4:
接口和AXI-Lite差不多,只是增加了一項(xiàng)功能就是批量傳輸,可以連續(xù)對一片地址進(jìn)行一次性讀寫。也就是說具有數(shù)據(jù)讀寫的burst功能。
上面兩種均采用內(nèi)存映射控制方式,即ARM將用戶自定義IP編入某一地址進(jìn)行訪問,讀寫時就像在讀寫自己的片內(nèi)RAM,編程也很方便,開發(fā)難度較低。代價就是資源占用過多,需要額外的讀地址線、寫地址線、讀數(shù)據(jù)線、寫數(shù)據(jù)線、寫應(yīng)答線這些信號線。
AXI4-Stream:
這是一種連續(xù)流接口,不需要地址線(很像FIFO,一直讀或一直寫就行)。對于這類IP,ARM不能通過上面的內(nèi)存映射方式控制(FIFO根本沒有地址的概念),必須有一個轉(zhuǎn)換裝置,例如AXI-DMA模塊來實(shí)現(xiàn)內(nèi)存映射到流式接口的轉(zhuǎn)換。AXI-Stream適用的場合有很多:視頻流處理;通信協(xié)議轉(zhuǎn)換;數(shù)字信號處理;無線通信等。其本質(zhì)都是針對數(shù)值流構(gòu)建的數(shù)據(jù)通路,從信源(例如ARM內(nèi)存、DMA、無線接收前端等)到信宿(例如HDMI顯示器、高速AD音頻輸出,等)構(gòu)建起連續(xù)的數(shù)據(jù)流。這種接口適合做實(shí)時信號處理。
AXI4和AXI4-Lite接口包含5個不同的通道:
●Read Address Channel
●Write Address Channel
●Read Data Channel
●Write Data Channel
●Write Response Channel
其中每個通道都是一個獨(dú)立的AXI握手協(xié)議。下面兩個圖分別顯示了讀和寫的模型:
AXI讀數(shù)據(jù)通道
AXI寫數(shù)據(jù)通道
2.3 ZYNQ PL與PS互聯(lián)接口
在ZYNQ芯片內(nèi)部用硬件實(shí)現(xiàn)了AXI總線協(xié)議,包括9個物理接口,分別為AXI-GP0~AXI-GP3,AXI-HP0~AXI-HP3,AXI-ACP接口。
AXI_ACP接口,是ARM多核架構(gòu)下定義的一種接口,中文翻譯為加速器一致性端口,用來管理DMA之類的不帶緩存的AXI外設(shè),PS端是Slave接口。
AXI_HP接口,是高性能/帶寬的AXI3.0標(biāo)準(zhǔn)的接口,總共有四個,PL模塊作為主設(shè)備連接。主要用于PL訪問PS上的存儲器(DDR和On-Chip RAM)
AXI_GP接口,是通用的AXI接口,總共有四個,包括兩個32位主設(shè)備接口和兩個32位從設(shè)備接口。
另外這9個AXI接口性能也是不同的。GP接口是32位的低性能接口,理論帶寬600MB/s,而HP和ACP接口為64位高性能接口,理論帶寬1200MB/s。
PS端的ARM直接有硬件支持AXI接口,而PL則需要使用邏輯實(shí)現(xiàn)相應(yīng)的AXI協(xié)議。Xilinx在Vivado開發(fā)環(huán)境里提供現(xiàn)成IP如AXI-DMA,AXI-GPIO,AXI-Dataover, AXI-Stream都實(shí)現(xiàn)了相應(yīng)的接口,使用時直接從Vivado的IP列表中添加即可實(shí)現(xiàn)相應(yīng)的功能。
工程實(shí)現(xiàn)
3.1 ZYNQ資源對比
最終我們開發(fā)所用的芯片為:ZYNQ7045,目前開發(fā)板所用的是:ZYNQ7020,其中各個ZYNQ的資源的對比如下圖。
由上圖可以看出,ZYNQ系列7020和7045的主要差別是在FPGA資料上,PS端的資源是一樣的,因此在ZYNQ上PS的代碼具有通用性。
3.2 代碼實(shí)現(xiàn)
下圖是工程整體實(shí)現(xiàn)框圖,首先是初始化系統(tǒng)硬件,然后創(chuàng)建六個線程來實(shí)現(xiàn)各個模塊的功能。
1、網(wǎng)絡(luò)接收線程
目前網(wǎng)絡(luò)接收線程沒有特別多的工作做,主要是上位機(jī)命令的解析。
2、網(wǎng)絡(luò)發(fā)送線程
此線程主要通過AXI_Lite總線以寫寄存器的方式通知PL何時開始數(shù)據(jù)傳輸、傳輸數(shù)據(jù)的長度等,由于是和PL的自定義IP通信,因此需要自己寫Linux的驅(qū)動。同時PL根據(jù)PS的命令通過DMA發(fā)送數(shù)據(jù)流到PS端,經(jīng)過PS端將數(shù)據(jù)封裝與打包,發(fā)到上位機(jī)。
3、串口發(fā)送
ZYNQ將射頻組件狀態(tài)、電機(jī)狀態(tài)等雷達(dá)所必要狀態(tài)信息通過PL端自定義IP將信息寫到Bram中并通知PS去讀取數(shù)據(jù),并根據(jù)協(xié)議要求發(fā)送到上位機(jī)。
4、串口接收
串口接收主要接收上位機(jī)控制命令和參數(shù),并解析如需要PS控制著直接控制,若需要通過FPGA與射頻板通信或控制,則由PS將數(shù)據(jù)寫入到Bram中并通過AXI_Lite總線通知PL自定義IP讀取數(shù)據(jù)(PS端需要根據(jù)自定義IP寫相應(yīng)的驅(qū)動)。
5、Bram讀寫
在Vivado的Blockdesign中設(shè)計(jì)一個Bram模塊,主要用于PS與PL之間小批量的數(shù)據(jù)交互,此線程主要是根據(jù)PL端的信號和上位機(jī)命令實(shí)現(xiàn)對Bram的讀寫。
6、系統(tǒng)指示燈
此線程目前無其他功能,僅僅作為系統(tǒng)運(yùn)行指示作用,后續(xù)可根據(jù)需要添加功能。
3.3 工程框圖
下圖是Vivado中的工程框圖,其中紅色部分是實(shí)現(xiàn)Bram功能,黃色框內(nèi)是實(shí)現(xiàn)PL-PS大量數(shù)據(jù)DMA交互的。