0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AXI DMA詳解與應(yīng)用篇

冬至子 ? 來源:根究FPGA ? 作者:叫什么好呢啊 ? 2023-08-10 12:50 ? 次閱讀

一、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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19286

    瀏覽量

    229841
  • DDR
    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
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ZYNQ SOC案例開發(fā):AXI DMA使用解析及環(huán)路測(cè)試

    一、AXI DMA介紹 本篇博文講述AXI DMA的一些使用總結(jié),硬件IP子系統(tǒng)搭建與SDK C代碼封裝參考米聯(lián)客ZYNQ教程。若想讓ZYNQ的PS與PL兩部分高速數(shù)據(jù)傳輸,需要利用P
    的頭像 發(fā)表于 12-31 09:52 ?8667次閱讀
    ZYNQ SOC案例開發(fā):<b class='flag-5'>AXI</b> <b class='flag-5'>DMA</b>使用解析及環(huán)路測(cè)試

    AMBA_AXI總線詳解

    AMBA_AXI總線詳解
    發(fā)表于 04-18 11:48

    如何在ZedBoard中使用AXI DMA核心

    你好最近我一直在研究如何在ZedBoard中使用AXI_DMA核心。我正在使用s2mm通道以分散聚集模式將數(shù)據(jù)傳輸?shù)紻RAM??驁D如下圖所示(基于Mohammadsadegh Sadri Zynq
    發(fā)表于 04-09 11:53

    AXI-DMA怎么批量發(fā)送數(shù)據(jù)到DMA?

    利用AXI-DMA批量發(fā)送數(shù)據(jù)到DMAinit_intr_sys函數(shù)分析
    發(fā)表于 03-10 06:57

    AXI接口協(xié)議詳解

    1、AXI接口協(xié)議詳解  AXI 總線  上面介紹了AMBA總線中的兩種,下面看下我們的主角—AXI,在ZYNQ中有支持三種AXI總線,擁有
    發(fā)表于 10-14 15:31

    Adam Taylor玩轉(zhuǎn)MicroZed系列68:AXI DMA Ⅲ,軟件部分

    上周的博客中我們完成了硬件的搭建,并且把硬件部分導(dǎo)入到SDK,見Adam Taylor’s MicroZed Chronicles Part 67: AXI DMA II,下一步通過寫一個(gè)簡(jiǎn)單的程序
    發(fā)表于 02-08 05:53 ?416次閱讀
    Adam Taylor玩轉(zhuǎn)MicroZed系列68:<b class='flag-5'>AXI</b> <b class='flag-5'>DMA</b> Ⅲ,軟件部分

    Adam Taylor玩轉(zhuǎn)MicroZed系列67:AXI DMA II

    上周的博客中我們學(xué)習(xí)了Zynq SoC的AXI DMA,我解釋了怎樣利用AXI DMA控制器將數(shù)據(jù)從PL搬運(yùn)到PS。在本期博客中我們將學(xué)習(xí)怎樣完成硬件的搭建。 首先我們要更深入的了解一
    發(fā)表于 02-08 08:10 ?386次閱讀

    從應(yīng)用角度詳解什么是AXI

    本節(jié)介紹的AXI是個(gè)什么東西呢,它其實(shí)不屬于Zynq,不屬于Xilinx,而是屬于ARM。它是ARM最新的總線接口,以前叫做AMBA,從3.0以后就稱為AXI了。 書上講的AXI比較具體,本節(jié)呢不打算落入俗套,從應(yīng)用角度解釋
    的頭像 發(fā)表于 07-13 07:08 ?1.1w次閱讀
    從應(yīng)用角度<b class='flag-5'>詳解</b>什么是<b class='flag-5'>AXI</b>

    zynq linux AXI DMA傳輸步驟教程詳解

    本文主要介紹zynq linux AXI DMA傳輸步驟教程,具體的跟隨小編一起來了解一下。
    的頭像 發(fā)表于 07-08 05:46 ?3w次閱讀
    zynq linux <b class='flag-5'>AXI</b> <b class='flag-5'>DMA</b>傳輸步驟教程<b class='flag-5'>詳解</b>

    一文詳解ZYNQ中的DMAAXI4總線

    在ZYNQ中,支持AXI-Lite,AXI4和AXI-Stream三種總線,但PS與PL之間的接口卻只支持前兩種,AXI-Stream只能在PL中實(shí)現(xiàn),不能直接和PS相連,必須通過
    的頭像 發(fā)表于 09-24 09:50 ?5309次閱讀
    一文<b class='flag-5'>詳解</b>ZYNQ中的<b class='flag-5'>DMA</b>與<b class='flag-5'>AXI</b>4總線

    你必須了解的AXI總線詳解

    不同類型的DMA GPIO PL general purpose AXI GP AXI utlilizing PS DMAC High performance w/DMA ACP w/
    的頭像 發(fā)表于 10-09 18:05 ?7484次閱讀
    你必須了解的<b class='flag-5'>AXI</b>總線<b class='flag-5'>詳解</b>

    ZYNQ中DMAAXI4總線

    ZYNQ中DMAAXI4總線 為什么在ZYNQ中DMAAXI聯(lián)系這么密切?通過上面的介紹我們知道ZYNQ中基本是以AXI總線完成相關(guān)功能
    的頭像 發(fā)表于 11-02 11:27 ?4339次閱讀
    ZYNQ中<b class='flag-5'>DMA</b>與<b class='flag-5'>AXI</b>4總線

    Petalinux加速axi-dma內(nèi)核驅(qū)動(dòng)緩沖區(qū)讀過程

    Petalinux 加速axi-dma內(nèi)核驅(qū)動(dòng)緩沖區(qū)讀過程
    的頭像 發(fā)表于 02-16 16:21 ?3596次閱讀
    Petalinux加速<b class='flag-5'>axi-dma</b>內(nèi)核驅(qū)動(dòng)緩沖區(qū)讀過程

    Xilinx FPGA里面的AXI DMA IP核的簡(jiǎn)單用法

    本文以浮點(diǎn)數(shù)Floating-point IP核將定點(diǎn)數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)為例,詳細(xì)講解AXI DMA IP核的使用方法。
    的頭像 發(fā)表于 02-16 16:21 ?9681次閱讀
    Xilinx FPGA里面的<b class='flag-5'>AXI</b> <b class='flag-5'>DMA</b> IP核的簡(jiǎn)單用法

    淺析AXI DMA收發(fā)數(shù)據(jù)傳輸過程

    MAIP的M_AXI_MM2S接口接收到數(shù)據(jù)完成后通過mm2s_introut接口輸出高電平告訴PS端DMA接收數(shù)據(jù)傳輸完成,PS端開始執(zhí)行發(fā)送中斷程序。
    發(fā)表于 10-11 15:16 ?2358次閱讀