<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ZYNQ開發案例之DMA控制器系統設計

454398 ? 來源:FPGA技術聯盟 ? 作者:FPGA技術聯盟 ? 2020-12-05 10:17 ? 次閱讀

1. DMA外設特點:

1. DMA引擎擁有一個靈活的指令設置DMA的傳輸;
2. 擁有8個cache線,每一個cache線寬度是4個字;
3. 擁有8個可以并行的DMA通道線程;
4. 擁有8個中斷給中斷控制器;
5. 擁有8個DMA觸發事件并且可以編碼控制;
6. 128個(64bit)的MFIFO,在傳輸的時候讀寫端可寫入到此FIFO;
7. 支持任意內存到內存的傳輸;

整個系統中的DMA控制器如圖1所示:

圖1 DMA控制器系統圖

DMAC包含一個指令處理單元,其能夠編碼控制DMA傳輸,每一個線程包含一個獨立的狀態機處理各自的DMA事件,包括通道仲裁,通道優先級。

當一個通道線程執行加載或者存儲指令的時候控制器會將指令增加到讀隊列和寫隊列中,控制器使用這些隊列來存儲指令,并且按隊列指令順序在AXI總線上完成傳輸。

2. DMA在AXI總線上傳輸:

所有的DMA傳輸使用AXI接口移動數據,包括片上內存的移動,DDR內存,以及PL上的從外設內存。PL端的從外設正常連接到DMAC外設接口上控制其數據流。DMAC在PS端可以訪問到IOPs,但是正常情況下不會使用,因為這些路徑不會提供數據流信號。DMAC數據路徑正常使用情況如圖2所示,沒一個AXI路徑可以執行一個讀或者一個寫,其中擁有好多組合,典型的DMA傳輸有:

內存到內存的傳輸(片上內存到DDR內存);

內存到PL端外設或者PL端外設到內存(DDR內存到PL端外設)。

圖2 數據流傳輸

3. DMA的管理:

DMAC實時操作時,用戶可以通過下面的指令設置DMA的傳輸:

DMAGO:開始一個用戶指定通道的DMA傳輸;

DMASEV:用戶指定的一個事件或者中斷發生時給出信號;

DMAKILL:終止一個線程。

當DMA管理器接受到一個從APB從接口的指令后,會等待若干個時鐘周期,在執行指令之前(pipeline是處于忙的狀態,在執行其他指令)。

4. 多通道數據FIFO(MFIFO)

MFIFO是一個當前所有活動通道共享的,基于先進入先服務的共享資源。對于編程角度來講,它是以份額深度可變的并行的FIFO集合,每個通道都有一個FIFO,但是所有FIFO的總深度不能超多MFIFO的大小,DMAC的MFIFO深度最大為128個64bit的大小。

5. 事件和中斷:

DMAC支持16個事件,開始的8個事件是中斷信號,IRQs[7:0],這8個中斷都會輸出到PS或者PL的中斷控制器。這些事件使用內部的DMA引擎通道與通道之間的傳輸。EMAC的中斷事件表如圖3所示。

圖3 事件與中斷

DMA的配置實例

配置DMA做內存到內存的傳輸實例。

DMA配置步驟:

1. 初始化dma的命令數據結構,主要配置傳輸源地址,目的地址,傳輸長度,burst的大小等信息;

2. 通過DMA的ID信息,找到DMA外設信息;

3. 初始化dma的數據結構;

4. 連接到硬件中斷,將GIC中斷映射到中斷向量表中;

5. 通過GIC的ID信息,找到GIC外設信息;

6. 鏈接DMA中斷和GIC,將DMA中斷映射到GIC控制器上;

7. 時能GIC中斷;

8. 使能硬件中斷;

9. 設置中斷服務函數的映射配置;

10. 開始DMA的傳輸;

11. 等待DMA的傳輸完成;

程序源碼:

XDmaPs_Config *DmaConfigPtr;

    XScuGic_Config *GicConfigPtr;

    XDmaPs_Cmd DmaCmd;

    volatile int Checked = 0;

    int Index = 0;

    memset(&DmaCmd, 0, sizeof(XDmaPs_Cmd));

    DmaCmd.ChanCtrl.SrcBurstSize = 4;

    DmaCmd.ChanCtrl.SrcBurstLen = 4;

    DmaCmd.ChanCtrl.SrcInc = 1;

    DmaCmd.ChanCtrl.DstBurstSize = 4;

    DmaCmd.ChanCtrl.DstBurstLen = 4;

    DmaCmd.ChanCtrl.DstInc = 1;

    DmaCmd.BD.SrcAddr = (u32) Src;

    DmaCmd.BD.DstAddr = (u32) Dst;

    DmaCmd.BD.Length = DMA_LENGTH * sizeof(int);

    //find device

 DmaConfigPtr = XDmaPs_LookupConfig (XPAR_XDMAPS_1_DEVICE_ID);

    //config xdmaps data

    XDmaPs_CfgInitialize(&Dma,DmaConfigPtr,DmaConfigPtr->BaseAddress);

    //config gic

    //config hardware interrupt

    Xil_ExceptionInit();

 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,(void *)&Gic);

    //find device

 GicConfigPtr = XScuGic_LookupConfig (XPAR_SCUGIC_SINGLE_DEVICE_ID);

    //config gic data

    XScuGic_CfgInitialize(&Gic,GicConfigPtr,GicConfigPtr->CpuBaseAddress);

    //connect gic handler

XScuGic_Connect(&Gic,XPAR_XDMAPS_0_FAULT_INTR,(Xil_InterruptHandler)XDmaPs_FaultISR, (void *)&Dma);

XScuGic_Connect(&Gic,DMA_DONE_INTR_0,(Xil_InterruptHandler)XDmaPs_DoneISR_0, (void *)&Dma);

    //enable gic

    XScuGic_Enable(&Gic,XPAR_XDMAPS_0_FAULT_INTR);

    XScuGic_Enable(&Gic,DMA_DONE_INTR_0);

    //enable hardware interrupt

    Xil_ExceptionEnable();

    //handler connect

XDmaPs_SetDoneHandler(&Dma,0,(XDmaPsDoneHandler)DmaDoneHandler,(void *)&Checked);

    /* Initialize source */

    for (Index = 0; Index 

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dma
    dma
    +關注

    關注

    3

    文章

    539

    瀏覽量

    99246
  • DDR內存
    +關注

    關注

    0

    文章

    11

    瀏覽量

    6782
收藏 人收藏

    評論

    相關推薦

    ZYNQ SOC案例開發:AXI DMA使用解析及環路測試

    一、AXI DMA介紹 本篇博文講述AXI DMA的一些使用總結,硬件IP子系統搭建與SDK C代碼封裝參考米聯客ZYNQ教程。若想讓ZYNQ
    的頭像 發表于 12-31 09:52 ?7402次閱讀
    <b class='flag-5'>ZYNQ</b> SOC案例<b class='flag-5'>開發</b>:AXI <b class='flag-5'>DMA</b>使用解析及環路測試

    DMA控制器介紹

    本帖最后由 yyeee312 于 2015-11-12 15:17 編輯 DMA控制器是一種在系統內部轉移數據的獨特外設,可以將其視為一種能夠通過一組專用總線將內部和外部存儲
    發表于 11-04 22:50

    如何調試Zynq UltraScale+ MPSoC VCU DDR控制器

      如何調試Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+ MPSoC VCU DDR 控制器是一款專用 DDR
    發表于 01-07 16:02

    Linux應用開發手冊Python開發案

    本文檔涉及的開發案例位于產品資料“4-軟件資料\Demo\”路徑下的base-demos和python-demos目錄。base-demos目錄存放Linux常用開發案例,案例bin目錄存放
    發表于 05-11 10:21

    淺析DMA控制器與FSMC控制器

    直接存儲存取DMACPU太忙了,那DMA你來幫我吧,這樣很多事情CPU就不用停下來去管了。在DMA模式下,CPU只須向DMA控制器下達指令
    發表于 12-09 06:00

    一種以DMA控制器為基礎的SoC系統設計

      引言   DMA(Direct Memory Access,直接存儲器存取)是一種快速傳送數據的機制。DMA控制器能夠有效替代微處理器的加載/存儲指令,顯著提高系統的并行能力。
    發表于 09-08 11:08 ?2336次閱讀
    一種以<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>為基礎的SoC<b class='flag-5'>系統</b>設計

    NiosⅡ系統DMA控制器的原理及應用

    DMA控制器是一種在系統內部轉移數據的獨特外設,可以將其視為一種能夠通過一組專用總線將內部和外部存儲器與每個具有DMA能力的外設連接起來的控制器
    發表于 12-07 08:51 ?2125次閱讀
    NiosⅡ<b class='flag-5'>系統</b>中<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的原理及應用

    Crossbar的多通道DMA控制器設計

    為了具體介紹本多通道 DMA 控制器的設計方案,下面首先對基于 Crossbar 的多通道 DMA 控制器的工作原理進行詳細分析,接著具體說明各個模塊的設計實現,然后對設計進行驗證和分
    發表于 12-07 09:37 ?4766次閱讀
    Crossbar的多通道<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>設計

    dma控制器芯片8257資料介紹

    DMA既可以指內存和外設直接存取數據這種內存訪問的計算機技術,又可以指實現該技術的硬件模塊(對于通用計算機PC而言,DMA控制邏輯由CPU和DMA
    發表于 12-07 10:23 ?1.6w次閱讀
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>芯片8257資料介紹

    dma控制器由什么組成?

    DMA(Direct Memory Access)控制器是一種在系統內部轉移數據的獨特外設,可以將其視為一種能夠通過一組專用總線將內部和外部存儲器與每個具有DMA能力的外設連接起來的
    發表于 12-07 14:43 ?3461次閱讀
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>由什么組成?

    基于AXI總線的DMA控制器的設計

    一般而言,DMA控制器的功能與結構是由本單位特定的系統結構決定的。但是作為IP而言,DMA控制器又要有其一般性。
    發表于 12-07 15:48 ?6004次閱讀
    基于AXI總線的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的設計

    dma控制器由什么組成

    DMA既可以指內存和外設直接存取數據這種內存訪問的計算機技術,又可以指實現該技術的硬件模塊(對于通用計算機PC而言,DMA控制邏輯由CPU和DMA
    發表于 12-07 16:08 ?5233次閱讀
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>由什么組成

    淺談Zynq Qspi控制器的三種模式

    Zynq Qspi控制器支持三種模式:I/O模式、線性地址模式和傳統SPI模式,其中線性地址模式雙片選支持最大的線性地址空間為32MB,可通過PS DMA讀取。
    發表于 07-02 09:34 ?1.9w次閱讀
    淺談<b class='flag-5'>Zynq</b> Qspi<b class='flag-5'>控制器</b>的三種模式

    dma控制器的組成

    一個DMA控制器,實際上是采用DMA方式的外圍設備與系統總線之間的接口電路,這個接口電路是在中斷接口的基礎上再加DMA機構組成。習慣上將
    的頭像 發表于 04-01 16:08 ?1w次閱讀

    dma控制器是什么_dma控制器工作方式

    DMA(Direct Memory Access)控制器是一種在系統內部轉移數據的獨特外設,可以將其視為一種能夠通過一組專用總線將內部和外部存儲器與每個具有DMA能力的外設連接起來的
    發表于 11-15 10:25 ?1.3w次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>