国产电影一区二区三区,,欧美大片免费观看,伊人久久大香线蕉av,国产日韩成人内射视频

ZYNQ-AXI DMA IP簡介

學習內容

本文主要介紹關于AXI DMA的IP核相關內容。

DMA簡介

DMA(Direct Memory Access,直接存儲器訪問)是計算機中一種內存訪問技術。它允許某些硬件子系統可以獨立地直接讀寫系統內存,而不需中央處理器( CPU)介入處理。

DMA 是用硬件實現存儲器與存儲器之間或存儲器與 I/O 設備之間直接進行高速數據傳輸。使用 DMA時, CPU 向 DMA 控制器發出一個存儲傳輸請求, 這樣當 DMA 控制器在傳輸的時候, CPU 執行其它操作,傳輸操作完成時 DMA 以中斷的方式通知 CPU。

為了發起傳輸事務, DMA 控制器必須得到以下數據:

  • 源地址 — 數據被讀出的地址。
  • 目的地址 — 數據被寫入的地址。
  • 傳輸長度 — 應被傳輸的字節數。

    DMA 存儲傳輸的過程如下:
  1. 配置用 DMA 傳輸數據到存儲器,處理器發出操作DMA的指令/代碼。
  2. DMA 控制器把數據從外設傳輸到存儲器或從存儲器到存儲器,而讓 CPU 騰出手來做其它操作。
  3. 數據傳輸完成后,向 CPU 發出一個中斷信號來通知它 DMA 傳輸可以關閉了。

AXI DMA IP簡介

ZYNQ 提供了兩種 DMA,一種是集成在 PS 中的硬核 DMA,另一種是 PL 中使用的軟核 AXI DMA IP。AXI DMA IP提供內存和AX14-Stream接口的目標外設之間的高帶寬直接內存訪問。它可以選擇scatter/gather模式進行數據的傳輸搬移,可將CPU從數據搬運任務中解放出來。

功能框圖

IP的功能框圖如下:

由框圖可知,通過AXI4-Lite從接口訪問初始化、狀態并控制和管理寄存器。MM2S接口完成MemoryMap to Stream 的轉換,即存儲器映射轉換到AXI4-Stream接口轉換。同理S2MM接口完成Stream  to MemoryMap的轉換,即AXI4-Stream接口轉換到存儲器映射轉換。圖中標注的三個接口只有在S/G模式下才會生成那三個接口進行IP的控制讀寫以及數據交互。

典型設計解讀

在IP的指導手冊中有下圖這樣的一個控制AXI DMA IP的設計系統。在圖中我們可以看到,對于處理器(microblaze),只需要使用少量的控制指令,即可完成高速的多數據傳輸。處理器(microblaze)通過interconnect互聯模塊連接到AXI4-Lite接口,進行IP的寄存器配置。在AXI DMA IP的完成數據傳輸時,通過MM2S_IntrOut,S2MM_IntrOut指示數據傳輸完成,并發送給處理器進行進一步操作。在圖中的系統AXI DMA IP使能了S/G模式,該存儲器映射接口通過互聯模塊連接到DDR控制端口,ctrStrm(控制Stream)、StatusStrm(判斷Stream狀態)和SG R/W是在SG模式下使用的三個端口。剩下的MM2S和S2MM進行數據的交互和傳輸。

時鐘要求

AXI DMA IP,對于不同芯片信號的不同速度、等級下的最大時鐘頻率有不同的要求。在進行設計開發時,要根據設計芯片的具體型號滿足時序要求,避免出現時序偽例的現象。

對于時鐘的輸入端口,有以下端口:

  • m_axi_mm2s_aclk for MM2S interface
  • m_axi_s2mm_aclk for S2MM interface
  • s_axi_lite_aclk for AXI4-Lite control interface
  • m_axi_sg_clk for Scatter Gather Interface AXI DMA提供兩種時鐘模式,同步模式和異步模式。同步模式: 所有的邏輯都連接在一個單一的時鐘源,m_axi_mm2s_aclk、m_axi_s2mm_aclk、m_axi_sg_clk必須在一個相同的時鐘源下,s_axi_lite_aclk可以連接到更低的時鐘。異步模式: 所有邏輯都可以是異步的,但是s_axi_lite_aclk必須小于或等于m_axi_sg_aclk的時鐘頻率, m_axi_sg_aclk必須小于或等于m_axi_mm2s_aclk或m_axi_s2mm_aclk的時鐘。在異步模式下,這四類時鐘信號所影響到的接口信號,(在SG模式下和單一傳輸模式)如下圖所示:

復位

axi_resetn信號需要持續至少16個最慢的時鐘周期,并且需要和s_axi_lite_aclk保持同步。

編程指導

在AXI DMA IP中,一共有三個模式可以進行編程配置:

  • Direct Register Mode (Simple DMA)
  • Scatter/Gather Mode
  • Cyclic DMA Mode

Direct Register Mode (Simple DMA)

簡單DMA模式,該模式下,提供了在MM2S和S2MM通道上進行簡單的DMA傳輸的配置。只需要較少的FPGA資源,通過訪問DMACR、源地址或者目的地址和長度寄存器發起DMA的傳輸。當傳輸完成后,如果使能了產生中斷輸出,那么DMASR寄存器相關聯的通道位會有效,即產生中斷輸出。

DMA的MM2S通道啟動順序:

  1. 設置運行/停止位為1 (MM2S_DMACR.RS=1),啟動MM2S通道運行。 停止位(DMASR.Halted)應該取消上拉,表示MM2S通道正在運行。
  2. 可以通過向MM2S_DMACR.IOC_IrqEn和MM2S_DMACR.Err_IrqEn寫入1來啟用中斷。 當AXI DMA配置為Direct Register 模式時,延遲中斷、延遲計數和閾值計數不被使用。
  3. 向MM2S_SA寄存器寫入有效的源地址。 如果AXI DMA配置的地址空間大于32,則對MM2S_SA MSB寄存器進行編程。如果AXI DMA沒有配置為數據重新對齊,則必須對齊有效地址,否則將出現未定義的結果。認為對齊是或非對齊是基于數據流的寬度。當在Micro 模式下配置AXI DMA時,要進行指定正確的地址。在Micro 模式下配置AXI DMA時,是不關心4K邊界的。例如,如果內存映射數據寬度= 32,則如果數據位于字偏移(32位偏移),即Ox0、0x4、0x8、OxC,等等,則數據對齊。如果DRE使能,并且數據寬度小于128,那么源地址可以是任何字節偏移量。
  4. 在MM2S LENGTH寄存器中寫入要傳輸的字節數。 寫為零的值沒有任何效果。如果該值不為零,則MM2S LENGTH決定了從MM2S AXI4接口讀取并輸出到MM2S AXI4- stream接口傳輸的數據個數。MM2S_LENGTH寄存器必須最后寫入。 所有其他MM2S寄存器都可以按任意順序寫入。在Micro DMA下,此值不能超過[突發長度*(內存映射數據寬度)/8]。

DMA的S2MM通道啟動順序:(類似MM2S通道啟動順序)

  1. 開啟/使能S2MM通道
  2. 如果需要,可以使能中斷
  3. 寫一個有效的源地址到S2MM_SA寄存器,如果沒有使能DRE功能,在指定起始地址時,要注意字節地址對齊,哪些地址對齊不對齊取決于Stream流的數據位寬。
  4. 寫傳輸的字節數到LENGTH寄存器。一個長度為0的值是無效的,而一個非0的值將決定存儲器映射到Stream流的數據個數。S2MM_LENGTH寄存器必須最后寫入

Scatter/Gather Mode

S/G模式下,AXI DMA操作需要一個存儲DMA操作列表的內存駐留數據結構。這個指令列表被組織成所謂描述符鏈。每個描述符都有一個指向下一個要處理的描述符的指針。鏈中的最后一個描述符指向鏈中的第一個描述符。S/G模式允許一個包被多個描述符描述。此特性的典型用途是允許從內存中的一個位置存儲或獲取頭,并從另一個位置存儲有效數據。利用這一點的程序可以提高吞吐量。利用幀起始位(TXSOF)和幀結束位(TXEOF)來描述緩沖區描述符鏈中的數據包。當DMA獲取一個設置了TXSOF位的描述符時,將觸發包的開始。包繼續獲取后續的描述符,直到獲取一個設置了TXEOF位的描述符。在接收(S2MM)通道上,當數據包開始被接收時,AXI DMA用RXSOF標記描述符,指示軟件與此描述符相關聯的數據緩沖區,包含數據包的開始。如果正在接收的包的字節數比描述符中指定的更長,則使用下一個描述符緩沖區來存儲接收包的其余部分。這個獲取和存儲過程繼續進行,直到整個接收包被傳輸完畢。接收包結束時正在處理的描述符被AXI DMA標記為RXEOF=1。這向軟件表明,與此描述符相關聯的緩沖區包含包的結尾。每個描述符的狀態字段包含為特定描述符實際傳輸的字節數。該軟件可以通過從RXSOF描述符遍歷描述符鏈到RXEOF描述符來確定接收包傳輸的總字節數。Scatter Gather繼續獲取一個額外的描述符并存儲。這個過程在很大程度上改善了DMA性能。S/G模式從設置控制寄存器和描述符指針開始。簡單來說,就是把傳輸的基本參數存儲到內存中;這些參數被稱為BD(Buffer Descriptor),在工作時,通過SG的接口進行加載和更新BD的狀態從而進行對指定的位置的數據進行讀寫操作。

MM2S通道的DMA操作通過以下順序建立和啟動:

  1. 將起始描述符的地址寫入當前描述符寄存器。 如果AXI DMA被配置為大于32的地址空間,那么也對當前描述符的MSB的32位進行編程。
  2. 設置運行/停止位為1 (MM2S_DMACR.RS=1),啟動MM2S通道運行。  停止位(DMASR.Halted)應該取消上拉,表示MM2S通道正在運行。
  3. 可以通過向MM2S_DMACR.IOC_IrqEn和MM2S_DMACR.Err_IrqEn寫入1來啟用中斷。
  4. 向尾部描述符寄存器寫入一個有效地址。 如果AXI DMA被配置為大于32的地址空間,那么也對尾部描述符的MSB 32位進行編程。
  5. 寫入尾描述符寄存器將觸發DMA開始從內存中獲取描述符。 在多通道配置的情況下,當數據包到達S2MM通道時開始獲取描述符。
  6. 對獲取的描述符進行處理,數據從內存中讀取,然后輸出到MM2S流通道。

S2MM通道的DMA操作通過以下順序建立和啟動:

  1. 將起始描述符的地址寫入當前描述符寄存器。 如果AXI DMA被配置為大于32的地址空間,那么也對當前描述符的MSB 32位進行編程。
  2. 設置運行/停止位為1 (S2MM_DMACR.RS=1),啟動S2MM通道運行 停止位(DMASR.Halted)應該取消上拉,表示MM2S通道正在運行。
  3. 可以通過向MM2S_DMACR.IOC_IrqEn和MM2S_DMACR.Err_IrqEn寫入1來啟用中斷。
  4. 向尾部描述符寄存器寫入一個有效地址。 如果AXI DMA被配置為大于32的地址空間,那么也對當前描述符的MSB 32位進行編程。
  5. 寫入尾描述符寄存器將觸發DMA開始從內存中獲取描述符。
  6. 對獲取的描述符進行處理,并將從S2MM流通道接收的任何數據寫入內存。

Cyclic DMA Mode

通過對緩沖區描述符(BD)鏈設置進行某些更改,AXI DMA可以以循環模式運行。在循環模式下,DMA不中斷地獲取和處理相同的BDs。DMA繼續獲取和處理,直到停止或重置為止。為了使循環運行,BD鏈的設置如下圖所示:

在這個設置中,Tail BD指向第一個BD, Tail Descriptor(尾描述寄存器)沒有任何用途,僅用于觸發DMA。遵循在S/G模式中提到的相同編程順序。確保控制寄存器中的循環位已設置。在編寫了Tail Descriptor寄存器之后,DMA開始獲取和處理BDs(以環形方式設置),直到DMA停止或重置。

Reference

  1. PG021_axi_dma
  2. 正點原子開發視頻

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關注 17
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧