AXI-DMA


---恢復內容開始---

AXI DMA:為內存與AXI4-Stream外設之間提供高寬帶的直接存儲訪問,scatter/gather功能可將CPU從數據搬移任務中解放出來。

在ZYNQ中,AXI DMA就是FPGA訪問DDR3的橋梁,受ARM監管。

AXI-DMA IP核有6個接口 :

S_AXI_LITE是ARM配置dma寄存器的接口;

M_AXI_SG是從(往)存儲器加載(上傳)buffer descriptor的接口;

剩下4個構成兩對接口:MM2S表示PS向PL傳送,S2MM表示PL向PS端(M表示主機代表PS,S表示從機代表PL)

           AXI是存儲器一側的接口,AXIS是FPGA一側的接口。

 

AXI DMA工作模式分為兩種,分別是Direct Register Mode和Scatter/Gather Mode。

Direct Register Mode模式:具備DMA的基本功能,除了控制寄存器和狀態寄存器之外,給出源(目的)地址和傳輸長度之后就可以開啟一次傳輸了。Direct Register Mode的特點(也是缺點)是配置完一次寄存器之后只能完成存儲器連續地址空間的讀寫,如果有需求往不同地址空間搬運數據的話,那就需要重新配置寄存器開啟一次新的傳輸。S2MM和MM2S不支持多個通道。

 scatter gather模式:把關於傳輸的基本參數(比如起始地址、傳輸長度、包信息等)存儲在存儲器中,一套參數稱之為Buffer Descriptor(簡稱BD),在工作過程中通過上面提到的SG接口來加載BD並且更新BD中的狀態。從圖3可以看出,Scatter/Gather Mode下的寄存器列表中沒有了Address、Length相關的寄存器了,取而代之的是CURDESC、TAILDESC。Multichannel DMA:S2MM和MM2S都支持多個通道。Multichannel模式下,S2MM有16個通道,每個通道都有獨立的CURDESC和TAILDESC寄存器,而CR和SR則是共用的。MM2S多個通道共用一份CURDESC和TAILDESC寄存器。MM2S端只能等當前包傳輸完才能開始下一次的傳輸,先執行一個通道的發送任務再執行另一個通道的發送任務。Cyclic DMA:循環模式是在Scatter/Gather模式下的一種獨特工作方式,在Multichannel Mode下不可用。正常情況下的Scatter/Gather模式在遇到Tail BD就應該結束當前的傳輸,但是如果使能了Cyclic模式的話,在遇到Tail BD時會忽略completed位,並且回到First BD,這一過程會一直持續直到遇到錯誤或者人為中止。Cyclic模式只需要在開啟傳輸前設置好BD鏈條,工作之后就再也不需要管了。要做到遇到Tail BD時返回到First BD。

Data Cache:ZYNQ內部ARM CPU與DDR3之間存在兩級緩存區,分別是L1 I/D Cache和L2 Cache,它們都是32-byte line size。Data Cache的使用帶來了一個問題,DMA和CPU都與DDR3有數據往來,可CPU的Cache是不知道DMA對DDR3的數據讀寫過程的,也就是說CPU得到的數據很可能是”假的“,這就是著名的Cache一致性問題。解決該問題的辦法是在程序中使用flush函數(invalid函數)及時將Cache的數據寫入到DDR3(從DDR3讀取數據到Cache),也就是說要避免該問題就只能靠我們自己了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM