衡阳派盒市场营销有限公司

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

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

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

ZYNQ開發(fā)案例之DMA控制器系統(tǒng)設(shè)計

454398 ? 來源:FPGA技術(shù)聯(lián)盟 ? 作者:FPGA技術(shù)聯(lián)盟 ? 2020-12-05 10:17 ? 次閱讀

1. DMA外設(shè)特點:

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

整個系統(tǒng)中的DMA控制器如圖1所示:

圖1 DMA控制器系統(tǒng)圖

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

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

2. DMA在AXI總線上傳輸:

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

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

內(nèi)存到PL端外設(shè)或者PL端外設(shè)到內(nèi)存(DDR內(nèi)存到PL端外設(shè))。

圖2 數(shù)據(jù)流傳輸

3. DMA的管理:

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

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

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

DMAKILL:終止一個線程。

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

4. 多通道數(shù)據(jù)FIFO(MFIFO)

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

5. 事件和中斷:

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

圖3 事件與中斷

DMA的配置實例

配置DMA做內(nèi)存到內(nèi)存的傳輸實例。

DMA配置步驟:

1. 初始化dma的命令數(shù)據(jù)結(jié)構(gòu),主要配置傳輸源地址,目的地址,傳輸長度,burst的大小等信息

2. 通過DMA的ID信息,找到DMA外設(shè)信息;

3. 初始化dma的數(shù)據(jù)結(jié)構(gòu);

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

5. 通過GIC的ID信息,找到GIC外設(shè)信息;

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

7. 時能GIC中斷;

8. 使能硬件中斷;

9. 設(shè)置中斷服務(wù)函數(shù)的映射配置;

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

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

    關(guān)注

    3

    文章

    566

    瀏覽量

    100964
  • DDR內(nèi)存
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    6891
收藏 人收藏

    評論

    相關(guān)推薦

    ZYNQ開發(fā)案ZYNQ的UART加載

    ,最終將這個文件寫入到QSPIFLASH中,整個ZYNQ在配置好啟動方式為FLASH啟動后,便可做到上電自啟動運行下載到FLASH中的用戶程序。 為了實現(xiàn)遠(yuǎn)程加載,拋開仿真,通過UART的方式將固定的.bin文件發(fā)送給ZYNQ
    的頭像 發(fā)表于 12-05 10:15 ?5424次閱讀
    <b class='flag-5'>ZYNQ</b><b class='flag-5'>開發(fā)案</b>例<b class='flag-5'>之</b><b class='flag-5'>ZYNQ</b>的UART加載

    DMA控制器介紹

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

    一種以DMA控制器為基礎(chǔ)的SoC系統(tǒng)設(shè)計

      引言   DMA(Direct Memory Access,直接存儲存取)是一種快速傳送數(shù)據(jù)的機(jī)制。DMA控制器能夠有效替代微處理
    發(fā)表于 09-08 11:08 ?2501次閱讀
    一種以<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>為基礎(chǔ)的SoC<b class='flag-5'>系統(tǒng)</b>設(shè)計

    基于DMA控制器的UART串行通信設(shè)計

    針對大數(shù)據(jù)量的串口間通信,在常規(guī)的UART串行數(shù)據(jù)通信的基礎(chǔ)上,結(jié)合Cortex-M3微控制器DMA控制器的作用,實現(xiàn)DMA控制的UART
    發(fā)表于 04-20 10:54 ?46次下載
    基于<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的UART串行通信設(shè)計

    LED顯示系統(tǒng)DMA控制器的設(shè)計

     采用并行DMA數(shù)據(jù)傳輸可選擇MCU加DMA芯片和具有內(nèi)部DMA控制器的CPU兩種方案,從系統(tǒng)結(jié)構(gòu)和成本以及
    發(fā)表于 12-06 10:15 ?3385次閱讀
    LED顯示<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的設(shè)計

    NiosⅡ系統(tǒng)DMA控制器的原理及應(yīng)用

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

    dma控制器芯片8257資料介紹

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

    dma控制器由什么組成?

    DMA(Direct Memory Access)控制器是一種在系統(tǒng)內(nèi)部轉(zhuǎn)移數(shù)據(jù)的獨特外設(shè),可以將其視為一種能夠通過一組專用總線將內(nèi)部和外部存儲與每個具有
    發(fā)表于 12-07 14:43 ?3707次閱讀
    <b class='flag-5'>dma</b><b class='flag-5'>控制器</b>由什么組成?

    基于AXI總線的DMA控制器的設(shè)計

    一般而言,DMA控制器的功能與結(jié)構(gòu)是由本單位特定的系統(tǒng)結(jié)構(gòu)決定的。但是作為IP而言,DMA控制器又要有其一般性。
    發(fā)表于 12-07 15:48 ?6468次閱讀
    基于AXI總線的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>的設(shè)計

    dma控制器由什么組成

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

    PIC24F系列參考手冊直接存儲訪問控制器DMA

    本文主要介紹了PIC24F系列參考手冊直接存儲訪問控制器DMA)。
    發(fā)表于 06-06 17:28 ?5次下載

    可提高系統(tǒng)響應(yīng)速度的DMA控制器SoC系統(tǒng)架構(gòu)

    在圖1所示架構(gòu)中,每次DMA傳輸都要發(fā)起1次讀與1次寫操作。若在DMA傳輸期間有需要緊急處理的異常響應(yīng),AHB總線此時又被DMA控制器占用,則處理
    發(fā)表于 08-24 15:34 ?1997次閱讀
    可提高<b class='flag-5'>系統(tǒng)</b>響應(yīng)速度的<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>SoC<b class='flag-5'>系統(tǒng)</b>架構(gòu)

    dma控制器的組成

    一個DMA控制器,實際上是采用DMA方式的外圍設(shè)備與系統(tǒng)總線之間的接口電路,這個接口電路是在中斷接口的基礎(chǔ)上再加DMA機(jī)構(gòu)組成。習(xí)慣上將
    的頭像 發(fā)表于 04-01 16:08 ?1.1w次閱讀

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

    DMA(Direct Memory Access)控制器是一種在系統(tǒng)內(nèi)部轉(zhuǎn)移數(shù)據(jù)的獨特外設(shè),可以將其視為一種能夠通過一組專用總線將內(nèi)部和外部存儲與每個具有
    發(fā)表于 11-15 10:25 ?1.3w次閱讀

    ZYNQ基礎(chǔ)---AXI DMA使用

    Xilinx官方也提供有一些DMA的IP,通過調(diào)用API函數(shù)能夠更加靈活地使用DMA。 1. AXI DMA的基本接口 axi dma IP的基本結(jié)構(gòu)如下,主要分為三個部分,分別是
    的頭像 發(fā)表于 01-06 11:13 ?508次閱讀
    <b class='flag-5'>ZYNQ</b>基礎(chǔ)---AXI <b class='flag-5'>DMA</b>使用
    大发888娱乐场zb8| 百家乐官网象棋玩法| 百家乐庄闲必胜手段| 优博| 墓地风水24山| 六合彩报码室| 百家乐官网平注常赢玩法技巧| 大发888官网官方下载| 百家乐官网庄闲和收益| 大发888小陆| 百家乐官网路子技巧| 大发888娱乐场下载| 百家乐官网免| 新时代娱乐城开户| 在线百家乐有些一| 2013现金棋牌游戏| 皇冠百家乐代理网| 博狗| 百家乐网站平台| A8百家乐官网娱乐城| 百家乐博彩通博彩网皇冠网澳门赌场真人赌博 | 百家乐和抽水官网| 浮梁县| 百家乐桌码合| 澳门百家乐官网赢钱秘| 大发888亚洲游戏咋玩| 博彩百家乐官网字谜总汇| bet365足球| 百家乐视频游戏掉线| 云鼎百家乐官网现金网| 欧凯百家乐的玩法技巧和规则| 百家乐官网正品地址| 三晋棋牌中心| 7人百家乐桌子| 威尼斯人娱乐城官方地址| 百家乐官网庄牌| 百家乐官网单跳打法| 百家乐园天将| 星期8百家乐官网娱乐城| 永平县| 百家乐缩水软件|