一、DMA簡(jiǎn)介
DMA是一種內(nèi)存訪問技術(shù),允許某些計(jì)算機(jī)內(nèi)部的硬件子系統(tǒng)可以獨(dú)立的直接讀寫內(nèi)存,而不需要CPU介入處理,從而不需要CPU的大量中斷負(fù)載,否則,CPU需要從來源把每一片段的數(shù)據(jù)復(fù)制到寄存器,然后在把他們?cè)俅螌懟氐叫碌牡胤剑谶@個(gè)時(shí)間里,CPU就無法執(zhí)行其他的任務(wù)。
DMA是一種快速數(shù)據(jù)傳送方式,通常用來傳送數(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傳輸過程的示意圖為:
DMA的傳輸過程為:
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ù)被寫入的地址
(3)、傳輸長(zhǎng)度——應(yīng)傳輸?shù)淖止?jié)數(shù)
二、ZYNQ DMA簡(jiǎn)介
ZYNQ提供了兩種DMA,一種是集成在PS中的硬核DMA,另一種是PL中使用的軟核AXI DMA IP。
在ARM APU(Application Processor Unit,應(yīng)用處理單元)設(shè)計(jì)過程中,已經(jīng)考慮到大量數(shù)據(jù)搬移的情況,因此在APU中自帶了一個(gè)DMA控制器DAMC,這個(gè)DMAC駐留在PS內(nèi),而且必須通過駐留在內(nèi)存中的DMA指令編程,這些程序往往需要CPU準(zhǔn)備,因此需要部分的CPU參與。DMAC支持多達(dá)8個(gè)通道,所以多個(gè)DMA結(jié)構(gòu)的核可以掛載在單個(gè)DMAC上。
DMAC與PL的連接是通過AXI-GP接口,這個(gè)接口最高支持到32位寬,這也限制了這種模式下的傳輸速率,理論上最大為600MB/s,這種模式不占用PL資源,但需要對(duì)DMA指令編程,會(huì)增加軟件的復(fù)雜性。
為了獲取更高的速率,可以空間換時(shí)間,在PL中添加AXI DMA IP core,并利用AXI_HP接口完成高速的數(shù)據(jù)傳輸,各種接口的傳輸比較為:
ZYNQ中ACI_HP接口的分布為:
通過PL的DMA和AXI_HP接口傳輸方式的拓?fù)鋱D為:
DMA的數(shù)據(jù)傳輸經(jīng)過S_AXI_HP接口,每一個(gè)HP接口都含有控制和數(shù)據(jù)fifo,這些fifo為大數(shù)據(jù)量突發(fā)傳輸提供緩沖,使得HP成為理想的高速數(shù)據(jù)接口。
對(duì)DMA的控制或配置通過M_AXI_GP接口(M代表master為PS),傳輸狀態(tài)通過中斷傳達(dá)到PS的中斷控制器。
關(guān)于GP接口在米聯(lián)客和原子的教程中當(dāng)時(shí)都沒理解太透,現(xiàn)在對(duì)M_AXI_GP0理解是:
在ZYNQ7處理器系統(tǒng)IP core中,在PS-PL Configuration下的AXI Non Secure Enablement下有一個(gè)GP Master AXI Interface選項(xiàng),可選一個(gè)M_AXI_GP0接口。
該接口的作用是對(duì)PL側(cè)的IP core通過AXI-Lite總線進(jìn)行配置,如果不僅需要的話直接不使能即可。
三、AXI DMA IP****簡(jiǎn)介
ZYNQ提供了兩種DMA,一種是集成在PS中的硬核DMA,另一種是PL中使用的軟核AXI DMA IP。
AXI DMA IP核在AXI4-Stream IP接口之間提供高帶寬直接存儲(chǔ)訪問。其可選的scatter gather(SG,鏈?zhǔn)较嚓P(guān))功能還可以從基于處理器的系統(tǒng)中的中央處理單元(CPU)卸載數(shù)據(jù)搬運(yùn)任務(wù)。初始化、狀態(tài)和管理寄存器通過AXI-Lite從接口訪問(即數(shù)據(jù)發(fā)出方為PL,PS為Slave),核心功能組成為(這張圖很有助于理解DMA中斷以及SDK代碼,下面會(huì)解釋):
原圖位于AXI_DMA數(shù)據(jù)手冊(cè)的第五頁(yè)。
AXI DMA使用了三種總線,分別是:
(1)、AXI Memory Map,用于內(nèi)存交互,AXI4 Memory Map Read用于從DMA讀取,AXI4 Memory Map用于向DMA寫入。
(2)、AXI4-Lite同于對(duì)寄存器的配置。
(3)、AXI4-Stream接口用于對(duì)外設(shè)的讀寫,S2MM(Stream to Memory Mapped,數(shù)據(jù)流向內(nèi)存映射)用于對(duì)外設(shè)讀取。AXI_MM2S和AXI_S2MM是AXI_Stream總線,可以發(fā)送和接收連續(xù)的數(shù)據(jù)流,無需地址。
AXI DMA提供3種模式:
(1)、Direct Register模式:用于在MM2S和S2MM通道上執(zhí)行簡(jiǎn)單的DMA傳輸,小的FPGA資源少。有兩個(gè)通道:一個(gè)從Device到DMA,另一個(gè)從DMA到Device。應(yīng)用程序必須設(shè)置緩沖區(qū)地址和長(zhǎng)度字段以啟動(dòng)相應(yīng)通道中的傳輸。
(2)、Scatter/Gather模式:允許在單個(gè)DMA事務(wù)中將數(shù)據(jù)傳輸?shù)蕉鄠€(gè)存儲(chǔ)區(qū)域傳輸數(shù)據(jù)。
(3)、Cyclic DMA模式:
四、AXI DMA參數(shù)與接口分析
1、接口分析:
(1)、 M_AXI_MM2S :DMA的讀通道,從DDR中讀取數(shù)據(jù)。受Enable Read Channel控制,表現(xiàn)為M_AXI_MM2S。
(2)、 M_AXI_S2MM :DMA的寫通道,將數(shù)據(jù)寫入DDR中。受Enable Write Channel控制,表現(xiàn)為M_AXI_S2MM。
(3)、 M_AXIS_MM2S :DMA將數(shù)據(jù)發(fā)送到具有stream接口IP。
(4)、 S_AXIS_S2MM :DMA將數(shù)據(jù)從具有Stream接口的IP中將數(shù)據(jù)讀入。
(5)、 mm2s_introut :DMA將數(shù)據(jù)從DDR的映射單元中讀出,然后將數(shù)據(jù)發(fā)送到具有Stream接口的IP完成信號(hào)。
(6)、 s2mm_introut :DMA將數(shù)據(jù)從具有stream接口的IP中讀入,并寫入到內(nèi)存映射單元的完成中斷信號(hào)。
2、參數(shù)分析
(1)、Enable Scatter Gatter Engine
鏈?zhǔn)紻MA操作,取消選中該選項(xiàng)可啟用directregister模式操作。
(2)、Enable Micro DMA
改選項(xiàng)會(huì)生成高度優(yōu)化的DMA,資源數(shù)量較少,用于傳輸極少量數(shù)據(jù)的應(yīng)用程序。
(3)、Width of Buffer Length Register
根據(jù)IP手冊(cè)pg021,在direct register模式下,此整數(shù)值用于指定控制字段緩沖區(qū)長(zhǎng)度的有效位數(shù),字節(jié)數(shù)等于2^(width),即字節(jié)讀取和字節(jié)寫入的有效長(zhǎng)度都是2^(width)。比如寬度設(shè)置為26,可傳輸?shù)淖止?jié)數(shù)為2^(26)字節(jié)。(pg021,78頁(yè))。
(4)、Address Width
指定地址空間的寬度,默認(rèn)32。
(5)、Enable Read Channel
**Memory Map Data Width** :AXI MM2S存儲(chǔ)映射讀取總線的數(shù)據(jù)位寬,可為32、64、128、256、512、1024。
Stream Data Width :AXI MM2S AXI-Stream數(shù)據(jù)總線的位寬,該值必須小于等于Memory Map Data Width,可以為8、16、32、64、128、512、1024。
Max Burst Size :最大突發(fā)長(zhǎng)度設(shè)置,指定的是MM2S的AXI4-Memory Map側(cè)的突發(fā)周期的最大值,可為2、4、8、16、32、64、128、256。
(6)、Enable Write channel:同Read channel。
3、關(guān)于中斷的理解
(1)、 M_AXI_MM2S :DMA的讀通道,從DDR中讀取數(shù)據(jù)。受Enable Read Channel控制,表現(xiàn)為M_AXI_MM2S。
在AXI_DMA ip core的輸出信號(hào)中,有兩個(gè)中斷信號(hào),分別是s2mm_introut和mm2s_introut,mm指的是Memory Mapped,S指的是Stream。
Memory Map指的是什么?根據(jù)AXI DMA的介紹,AXI DMA提供一個(gè)介于AXI4 Memory Mapped 與AXI4 Stream IP之間的高帶寬DMA:
原話位于IP參考的page5:
The AXI DirectMemory Access (AXI DMA) IP core provides high-bandwidth direct memory accessbetween the AXI4 memory mapped and AXI4-Stream IP interfaces.
所以,對(duì)于DMA來說,S2MM,就是Stream形式的數(shù)據(jù)到達(dá)DDR映射空間,具體的實(shí)現(xiàn)方式是Stream數(shù)據(jù)流先進(jìn)入DMA,之后再?gòu)腄MA到Memeory Mapped。
MM2S是Memory Mapped將數(shù)據(jù)送入具有AXI Stream接口的IP。
從這里分析mm2s_introut與s2mm_introut信號(hào)的區(qū)別是分析不出來的,因?yàn)閿?shù)據(jù)都是先到DMA,再?gòu)腄MA發(fā)送出去。
在第5頁(yè)還有一張圖,講述AXI DMA的架構(gòu):
分析這張圖,DDR內(nèi)存映射空間的讀寫都是通過AXI4Memory Map完成的,也就是說s2mm與mm2s的重點(diǎn)不在PS DDR側(cè),重點(diǎn)在PL側(cè),當(dāng)Stream接口的數(shù)據(jù)將輸出傳到DMA時(shí)候,這個(gè)過程叫做DMA的接收,DMA將映射單元的數(shù)據(jù)寫到stream接口的IP,這個(gè)過程叫做DMA的發(fā)送。
所以!也就可以理解在SDK中將s2mm_introut定義為DMA接收中斷,將mm2s_introut定義為發(fā)送中斷了!
所以以下語(yǔ)句就很容易理解了:
// DMA接收通道的中斷ID
#define RX_INTR_ID XPAR_FABRIC_AXIDMA_0_S2MM_INTROUT_VEC_ID
#define TX_INTR_ID XPAR_FABRIC_AXIDMA_0_MM2S_INTROUT_VEC_ID
-
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229841 -
DDR
+關(guān)注
關(guān)注
11文章
712瀏覽量
65341 -
FIFO存儲(chǔ)
+關(guān)注
關(guān)注
0文章
103瀏覽量
5975 -
DMA控制器
+關(guān)注
關(guān)注
1文章
43瀏覽量
12274 -
Zynq處理器
+關(guān)注
關(guān)注
0文章
2瀏覽量
930
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論