AXI總線協(xié)議
(一)、概述
AXI (高性能擴(kuò)展總線接口,Advanced eXtensible Interface)是ARM AMBA 單片機(jī)總線系列中的一個(gè)協(xié)議,是計(jì)劃用于高性能、高主頻的系統(tǒng)設(shè)計(jì)的。AXI協(xié)議是被優(yōu)化用于通過(guò)使用Xilinx進(jìn)行的相應(yīng)的開(kāi)發(fā)來(lái)做FPGA實(shí)現(xiàn),它被用作FPGA 設(shè)計(jì)的IP 核之間的一種通信方式。
關(guān)鍵特性
1、地址/控制階段和數(shù)據(jù)階段是分開(kāi)的,即master(主機(jī))和slave(從機(jī))之間有專(zhuān)門(mén)的地址/控制通道,還有專(zhuān)門(mén)的數(shù)據(jù)通道。
2、有字節(jié)閘來(lái)實(shí)現(xiàn)對(duì)非對(duì)齊數(shù)據(jù)的傳輸。
3、只需發(fā)布起始地址就能做批量數(shù)據(jù)傳輸
4、數(shù)據(jù)的讀寫(xiě)通道是分離的,可以用來(lái)實(shí)現(xiàn)低成本的DMA(直接存儲(chǔ)訪問(wèn),Direct Memory Access)。除了地址和數(shù)據(jù)通道是分離的之外,讀寫(xiě)數(shù)據(jù)的通道還是分開(kāi)的,由此可以看出AXI總線的高速性。
5、可以指定多個(gè)需要處理的地址。
6、通信會(huì)話可以亂序完成,主要是指的數(shù)據(jù)的亂序,亂序發(fā)送需要有主機(jī)的ID進(jìn)行支撐。
7、為了實(shí)現(xiàn)時(shí)序收斂,可以方便的加入寄存器,即在用戶logic和user interface處加入想要觀察和處理的用戶邏輯與端口。
(二)、AXI總線類(lèi)型
自從2003年AXI1.0版本發(fā)布以后,目前的AXI版本是4.0,AXI接口類(lèi)型有三種,即AXI4類(lèi)型、AXI4-Lite類(lèi)型,AXI4-Stream類(lèi)型。
AXI4類(lèi)型:最高性能的接口,適合存儲(chǔ)器映射的通信,支持每個(gè)地址階段256個(gè)數(shù)據(jù)傳輸周期的批量傳輸,存在于PS-PL之間。
AXI4_Lite類(lèi)型:AXI4接口類(lèi)型中輕量級(jí)版本,用于存儲(chǔ)器映射的單次數(shù)據(jù)通信會(huì)話,簡(jiǎn)化了的接口占用較少的邏輯部分面積,不支持批量數(shù)據(jù),只支持每次傳輸單個(gè)數(shù)據(jù),存在于PS-PL之間。
AXI4-Stream類(lèi)型:沒(méi)有地址階段,不是存儲(chǔ)地址映射,僅僅存在與PL側(cè),可以實(shí)現(xiàn)無(wú)限制的數(shù)據(jù)批量大小,為流式數(shù)據(jù)傳輸定義單個(gè)專(zhuān)用通道,連接只能是從主機(jī)到從機(jī)。為了實(shí)現(xiàn)雙向傳輸,兩個(gè)外圍設(shè)備都必須是主機(jī)/從機(jī)兼容類(lèi)型。
(三)、AXI架構(gòu)
AXI協(xié)議規(guī)定一個(gè)AXI主機(jī)可以用寫(xiě)數(shù)據(jù)通道通過(guò)AXI總線互聯(lián)將數(shù)據(jù)傳送給一個(gè)AXI從機(jī)(或者通過(guò)讀取數(shù)據(jù)通道從從機(jī)傳送到主機(jī)),寫(xiě)數(shù)據(jù)傳輸會(huì)話會(huì)有一個(gè)額外的響應(yīng)通道,但是讀取時(shí)并沒(méi)有,這時(shí)考慮到數(shù)據(jù)的流向。在進(jìn)行數(shù)據(jù)讀取時(shí),數(shù)據(jù)流向:Slave to Master,從機(jī)可以直接通過(guò)讀數(shù)據(jù)通道向主機(jī)返回信息。在進(jìn)行數(shù)據(jù)寫(xiě)入時(shí),數(shù)據(jù)流向:Master to Slave,數(shù)據(jù)流向是單向的,需要有一個(gè)專(zhuān)門(mén)的響應(yīng)通道。
無(wú)論是
讀還是寫(xiě),地址和控制數(shù)據(jù)都是在數(shù)據(jù)的發(fā)送/接收之前:
特別注意AXI互聯(lián)(AXI Interconnect):
(1)、主機(jī)AXI從處理器系統(tǒng)和處理器時(shí)鐘各自流向從機(jī)輸出S00_AXI和S00_AXLK。
(2)、AXI互聯(lián)的輸出都是主機(jī)通道,每個(gè)通道驅(qū)動(dòng)對(duì)應(yīng)的設(shè)備。
一、DMA簡(jiǎn)介
DMA是一種內(nèi)存訪問(wèn)技術(shù),允許某些計(jì)算機(jī)內(nèi)部的硬件子系統(tǒng)可以獨(dú)立的直接讀寫(xiě)內(nèi)存,而不需要CPU介入處理,從而不需要CPU的大量中斷負(fù)載,否則,CPU需要從來(lái)源把每一片段的數(shù)據(jù)復(fù)制到寄存器,然后在把他們?cè)俅螌?xiě)回到新的地方,在這個(gè)時(shí)間里,CPU就無(wú)法執(zhí)行其他的任務(wù)。
DMA是一種快速數(shù)據(jù)傳送方式,通常用來(lái)傳送數(shù)據(jù)量較多的數(shù)據(jù)塊。使用DMA時(shí),CPU向DMA控制器發(fā)送一個(gè)存儲(chǔ)器傳輸請(qǐng)求,這樣當(dāng)DMA控制器在傳輸?shù)臅r(shí)候,CPU執(zhí)行其他的操作,傳輸完成時(shí)DMA以中斷的方式通知CPU。
DMA傳輸過(guò)程的示意圖為:
DMA的傳輸過(guò)程為:
1、為了配置用DMA傳輸數(shù)據(jù)到存儲(chǔ)器,處理器(Cortex-A9)發(fā)出一條指令。
2、DMA控制器把數(shù)據(jù)從外設(shè)傳輸?shù)酱鎯?chǔ)器或者從存儲(chǔ)器傳輸?shù)酱鎯?chǔ)器,從而較少CPU處理的事務(wù)量。
3、輸出傳輸完成后,向CPU發(fā)出一個(gè)中斷通知DMA傳輸可以關(guān)閉。
為了發(fā)起傳輸事務(wù),DMA控制器必須得到以下信息:
(1)、源地址——數(shù)據(jù)被讀出的地址
(2)、目的地址——數(shù)據(jù)被寫(xiě)入的地址
(3)、傳輸長(zhǎng)度——應(yīng)傳輸?shù)淖止?jié)數(shù)
DMA控制器架構(gòu)原理
AXIDMA:官方解釋是為內(nèi)存與AXI4-Stream外設(shè)之間提供高帶寬的直接存儲(chǔ)訪問(wèn),其可選的scatter/gather功能可以將CPU從數(shù)據(jù)搬移任務(wù)中解放出來(lái),在ZYNQ中,AXIDMA就是FPGA訪問(wèn)DDR3的橋梁,不過(guò)該過(guò)程受ARM的監(jiān)控和管理。使用其他的IP(也是AXI4-Stream轉(zhuǎn)AXI4-MM)可以不需要ARM管理。AXIDMA IP有6個(gè)接口,S_AXI_LITE是ARM配置DMA寄存器的接口,M_AXI_SG是從存儲(chǔ)器加載buffer descriptor的接口,剩下4個(gè)接口構(gòu)成兩對(duì),S2MM和MM2S表示數(shù)據(jù)的方向,AXI存儲(chǔ)器一側(cè)的接口,AXIS是FPGA一側(cè)的接口。AXIDMA IP和ARM自帶的DMA是很像的,只不過(guò)不具備從存儲(chǔ)器到存儲(chǔ)器的功能,當(dāng)然也可以將S2MM和MM2S接口與AXIS接口直接相連,其結(jié)構(gòu)如圖1所示。
圖1,AXI_DMA的IP結(jié)構(gòu)
AXIDMA工作模式可以分為兩種,Direct Register Mode和Scatter/Gather Mode。
Direct Register Mode具備DMA的基本功能,除了控制寄存器和狀態(tài)寄存器之外,給出目的地址和傳輸長(zhǎng)度之后就可以開(kāi)啟一次傳輸了。但是Direct Register Mode模式配置完一次寄存器之后只能完成存儲(chǔ)器連續(xù)地址空間的讀寫(xiě),如果有需求往不同空間搬運(yùn)數(shù)據(jù)的話,那就需要重新配置寄存器開(kāi)啟一次新的傳輸。
Scatter/Gather Mode配置靈活,其工作模式復(fù)雜很多。Scatter/Gather Mode把關(guān)于傳輸?shù)幕?a target="_blank">參數(shù)(起始地址,傳輸長(zhǎng)度,包信息等)存儲(chǔ)在存儲(chǔ)器中,一套參數(shù)稱之為Buffer Descriptor(BD),在工作過(guò)程中通過(guò)上面提到的SG接口來(lái)加載BD且更新BD中的狀態(tài)。Scatter/Gather Mode下的寄存器沒(méi)有Address、Length相關(guān)寄存器了,取而代之的是CURDESC、TAILDESC。非多通道模式下的BD,主要有四部分內(nèi)容:NXTDESC、BUFFER_ADDRESS、CONTROL、STATUS。NXTDESC指定下一個(gè)BD的地址,由此可以構(gòu)成一個(gè)BD鏈條,AXIDMA可以順著該鏈條依次fetch BD,BUFFER_ADDRESS指定傳輸?shù)脑吹刂坊蚰康牡刂?,CONTROL主要是length和包信息,STATUS反映該BD完成后的狀態(tài)。AXIDMA啟動(dòng)后,首先從CURDESC指定的位置加載BD,完成當(dāng)前BD的傳輸任務(wù)后根據(jù)BD鏈條找到下一個(gè)BD,依次完成BD指定的傳輸,知道遇到TALDESC指定的BD才停止。
Multichannel模式:在Scatter/Gather Mode下S2MM和MM2S都支持多個(gè)通道,Direct Register Mode不支持多通道,多通道相比非多通道,BD中增加了TID和TDEST,用來(lái)區(qū)分不同的通道。多通道支持2D-Transfer,從buffer address開(kāi)始,讀寫(xiě)HSIZE后跳過(guò)剩余的Stride – HSIZE個(gè)地址單元,下一次從buffer address + Stride位置開(kāi)始,此過(guò)程迭代VSIZE此后結(jié)束該BD指定的傳輸。在Multichannel模式下S2MM有16個(gè)通道,每個(gè)通道都有獨(dú)立的CURDESC和TAILDESC寄存器,而CR和SR則是共用的。而MM2S的多個(gè)通道共用一個(gè)CURDESC和TAILDESC寄存器,MM2S端只能等當(dāng)前包傳輸完成才能開(kāi)始下一次的傳輸,可能這與CPU不太容易同時(shí)操縱多個(gè)通道的數(shù)據(jù)包發(fā)送有關(guān)系。所以在實(shí)際使用時(shí)只能先執(zhí)行一個(gè)通道的發(fā)送任務(wù)再執(zhí)行另一個(gè)通道的發(fā)送任務(wù)。
Cyclic DMA:循環(huán)模式是在Scatter/Gather Mode模式下的一種獨(dú)特工作方式,在Multichannel Mode下不可用。正常情況下的Scatter/Gather Mode模式在遇到Tail BD就應(yīng)該結(jié)束當(dāng)前的傳輸,但是如果使能了Cyclic模式的話,在遇到Tail BD時(shí)會(huì)忽略completed位,并且回到First BD,這一過(guò)程會(huì)一直持續(xù)直到遇到錯(cuò)誤或者人為終止。Cyclic模式只需要在開(kāi)啟傳輸前設(shè)置好BD鏈條,工作之后就再不需要管了。
Data Cache:在zynq內(nèi)部AMR CPU和DDR3之間存在兩級(jí)緩存區(qū),分別是L1 I/D Cache和L2 Cache,它們都是32-byte line size。Data Cache的使用帶來(lái)了一個(gè)問(wèn)題,DMA和CPU都與DDR3有數(shù)據(jù)往來(lái),可CPU的Cache是不知道DMA對(duì)DDR3的數(shù)據(jù)讀寫(xiě)過(guò)程的,也就是說(shuō)CPU得到的數(shù)據(jù)很可能是“假的”,這就是Cache一致性問(wèn)題。解決該問(wèn)題的辦法是在程序中使用flush函數(shù)(invalid函數(shù))及時(shí)將Cache的數(shù)據(jù)寫(xiě)入到DDR3(從DDR3讀取數(shù)據(jù)到Cache),也就是說(shuō)要避免該問(wèn)題就需要注意編碼時(shí)加上flush函數(shù)。
審核編輯:湯梓紅
?
評(píng)論
查看更多