一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

PCIe的DMA介紹

FPGA設(shè)計(jì)論壇 ? 來源:FPGA設(shè)計(jì)論壇 ? 作者:FPGA設(shè)計(jì)論壇 ? 2022-08-03 14:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在PCIE中有兩種數(shù)據(jù)傳輸方式:

DMA(Direct Memory Access),直接內(nèi)存訪問,在該模式下,數(shù)據(jù)傳送不是由CPU負(fù)責(zé)處理,而是由一個(gè)特殊的處理器DMA控制器來完成,因此占用極少的CPU資源。

PIO(Programmed Input-Output),可編程輸入輸出,在該模式下,數(shù)據(jù)傳送由CPU執(zhí)行I/O端口指令來按照字節(jié)或更大的數(shù)據(jù)單位來處理,占用大量的CPU資源,數(shù)據(jù)傳輸速度也大大低于DMA模式。舉例老說,在DMA方式下,如果copy文件的同時(shí)在播放mp3音樂,則不受絲毫影響;如果在PIO模式下,則會(huì)發(fā)現(xiàn)音樂聲時(shí)斷時(shí)續(xù),這是因?yàn)榇蟛糠諧PU資源被文件傳輸占用。

所以,總的來說,使用DMA模式時(shí),計(jì)算機(jī)的運(yùn)行速度會(huì)比使用PIO模式快很多。

在xilinx中生成IP核后,工程文件夾下會(huì)有這兩個(gè)文件夾:

[Xilinx_PCIe_BMD] xilinx FPGA 開發(fā) pcie BMD DMA的verilog HDL源碼[example_design] xilinx pcie總線 pio模式下的控制器代碼。包含接收發(fā)送模塊,存儲(chǔ)模塊,控制模塊等。

1.DMA概念

DMA的英文拼寫是“Direct Memory Access”,漢語的意思就是直接內(nèi)存訪問。

內(nèi)存與內(nèi)存(外設(shè))交換數(shù)據(jù)不經(jīng)過CPU。

使用DMA的好處就是它不需要CPU的干預(yù)而直接服務(wù)外設(shè),這樣CPU就可以去處理別的事務(wù),從而提高系統(tǒng)的效率,對(duì)于慢速設(shè)備,如UART,其作用只是降低CPU的使用率,但對(duì)于高速設(shè)備,如硬盤,它不只是降低CPU的使用率,而且能大大提高硬件設(shè)備的吞吐量。因?yàn)閷?duì)于這種設(shè)備,CPU直接供應(yīng)數(shù)據(jù)的速度太低。因CPU只能一個(gè)總線周期最多存取一次總線,而且對(duì)于ARM,它不能把內(nèi)存中A地址的值直接搬到B地址。它只能先把A地址的值搬到一個(gè)寄存器,然后再?gòu)倪@個(gè)寄存器搬到B地址。也就是說,對(duì)于ARM,要花費(fèi)兩個(gè)總線周期才能將A地址的值送到B地址。而DMA就不同了,一般系統(tǒng)中的DMA都有突發(fā)(Burst)傳輸?shù)哪芰?,在這種模式下,DMA能一次傳輸幾個(gè)甚至幾十個(gè)字節(jié)的數(shù)據(jù),所以使用DMA能使設(shè)備的吞吐能力大為增強(qiáng)。

對(duì)于任何類型的DMA傳輸,我們都需要規(guī)定數(shù)據(jù)的起始源和目標(biāo)地址。對(duì)于外設(shè)DMA的情況來說,外設(shè)的FIFO可以作為數(shù)據(jù)源或者目標(biāo)端。當(dāng)外設(shè)作為源端時(shí),某個(gè)存儲(chǔ)器的位置(內(nèi)部或外部)則成為目標(biāo)端地址。當(dāng)外設(shè)作為目標(biāo)端,存儲(chǔ)的位置(內(nèi)部或者外部)則成為源端地址

2.PCIe的DMA介紹

在PCIe中需要使用DMA的項(xiàng)目,一定要先看XAPP1052,里面包含一個(gè)DMA的參考設(shè)計(jì),對(duì)初學(xué)者有極大的幫助。

XAPP1052中包含F(xiàn)PGA源代碼和驅(qū)動(dòng)程序源代碼,其中FPGA源代碼最主要的文件為:

1、《TX_ENGINE.v》:是產(chǎn)生TLP包的邏輯,包含讀TLP請(qǐng)求用于DMA讀;寫TLP請(qǐng)求用于DMA寫;CPLD用于BAR空間讀。

2、《RX_ENGINE.v》:是解析TLP包的邏輯,包含讀TLP解析用于BAR空間讀、寫TLP解析用于BAR空間寫、CPLD解析用于DMA讀。

DMA分為讀和寫種操作,兩種操作在細(xì)節(jié)上不同。

這里先簡(jiǎn)單介紹一下DMA讀過程:

1、驅(qū)動(dòng)程序向操作系統(tǒng)申請(qǐng)一片物理連續(xù)的內(nèi)存;

2、主機(jī)向該地址寫入數(shù)據(jù);

3、主機(jī)將這個(gè)內(nèi)存的物理地址告訴FPGA;

4、FPGA向主機(jī)發(fā)起讀TLP請(qǐng)求—連續(xù)發(fā)出多個(gè)讀請(qǐng)求;

5、主機(jī)向FPGA返回CPLD包—連續(xù)返回多個(gè)CPLD;

6、FPGA取出CPLD包中的有效數(shù)據(jù);

7、FPGA發(fā)送完數(shù)據(jù)后通過中斷等形式通知主機(jī)DMA完成;

DMA寫過程如下:

1、驅(qū)動(dòng)程序向操作系統(tǒng)申請(qǐng)一片物理連續(xù)的內(nèi)存;

2、主機(jī)將這個(gè)內(nèi)存的物理地址告訴FPGA;

3、FPGA向主機(jī)發(fā)起寫TLP請(qǐng)求,并將數(shù)據(jù)放入TLP包中—連續(xù)發(fā)出多個(gè)寫請(qǐng)求;

4、FPGA發(fā)送完數(shù)據(jù)后通過中斷等形式通知主機(jī)DMA完成;

5、主機(jī)從內(nèi)存中獲取數(shù)據(jù);

如果是參考XAPP1052,一定要注意幾點(diǎn):

1.1連續(xù)內(nèi)存

申請(qǐng)的內(nèi)存一定要物理連續(xù)。DMA是直接對(duì)物理內(nèi)存—也就是實(shí)際的內(nèi)存條進(jìn)行讀寫操作,必須為物理連續(xù)的內(nèi)存;而應(yīng)用程序和驅(qū)動(dòng)程序一般只能申請(qǐng)到邏輯上連續(xù)的內(nèi)存,在物理上不一定連續(xù)。XAPP1052中可以看到申請(qǐng)內(nèi)存上的一些特殊處理,目的就是獲取物理連續(xù)的內(nèi)存,可獲取4KB的物理連續(xù)內(nèi)存。但是XAPP1052在內(nèi)存處理上也存在一些問題,實(shí)驗(yàn)尚可,應(yīng)用則不行。如何獲取內(nèi)存的物理地址在XAPP1052中已經(jīng)有示范,可直接參考。

1.2將地址告訴FPGA

XAPP1052是在BAR空間開辟了一段專用地址存放DMA讀地址、DMA寫地址、DMA長(zhǎng)度、TLP包大小等參數(shù),可直接參考。

1.3寫TLP請(qǐng)求

DMA寫的操作相對(duì)簡(jiǎn)單,只需要FPGA單向發(fā)起寫TLP操作即可完成,至于有沒有真正寫入內(nèi)存一般不需要FPGA關(guān)心;而驅(qū)動(dòng)程序需要等待一定時(shí)間讓數(shù)據(jù)正真寫入內(nèi)存—中斷處理的時(shí)間已經(jīng)足夠讓數(shù)據(jù)寫入內(nèi)存,所以也不必特別關(guān)心。

發(fā)起寫TLP請(qǐng)求可以連續(xù)發(fā)送,但是注意《TX_ENGINE.v》中要處理讀TLP請(qǐng)求、寫TLP請(qǐng)求和CPLD,所以有時(shí)會(huì)遇到三種請(qǐng)求競(jìng)爭(zhēng)的情況。如果想要提高DMA的效率可以重新設(shè)定三種請(qǐng)求的優(yōu)先級(jí)。

1.4讀TLP請(qǐng)求

DMA讀的操作相對(duì)復(fù)雜,需要FPGA向主機(jī)發(fā)出讀請(qǐng)求,主機(jī)再返回?cái)?shù)據(jù)。FPGA控制邏輯必須計(jì)算發(fā)起了多少個(gè)讀TLP請(qǐng)求,再計(jì)算收到的數(shù)據(jù)是否足夠。

一般來說FPGA可以一次發(fā)送所有的讀請(qǐng)求,然后按照順序接收數(shù)據(jù)即可。但是某些主板并不一定是按照請(qǐng)求的順序返回?cái)?shù)據(jù)的情況,可能后發(fā)出的請(qǐng)求先返回?cái)?shù)據(jù),屬于主機(jī)亂序執(zhí)行的現(xiàn)象。要么FPGA一次只發(fā)一個(gè)讀請(qǐng)求,等數(shù)據(jù)收到了再發(fā)現(xiàn)一個(gè)讀請(qǐng)求—但是效率就對(duì)不起了;要么對(duì)亂序情況進(jìn)行特殊處理,XAPP1052還沒有解決該問題。

1.5特殊參數(shù)

TLP包中有很多參數(shù),例如:TC、ATTR等等,如果不了解的話,千萬不要隨意修改,與參考設(shè)計(jì)保持一致即可,否則很容易導(dǎo)致藍(lán)屏。

1.6 DMA通道

XAPP1052中只實(shí)現(xiàn)了一個(gè)DMA讀通道和一個(gè)DMA寫通道。對(duì)于很多應(yīng)用,例如兩路視頻采集,需要兩路DMA寫通道:要么把兩路數(shù)據(jù)按照一定的格式整合為一個(gè)流;要么實(shí)現(xiàn)兩路DMA寫通道,XAPP1052不能直接實(shí)現(xiàn)。

1.7數(shù)據(jù)流量

XAPP1052整個(gè)方案的效率并不高,數(shù)據(jù)流量非常有限。數(shù)據(jù)量較少時(shí)倒是夠用,數(shù)據(jù)量大了會(huì)發(fā)現(xiàn)CPU使用率非常高,占用一個(gè)CPU核心,但是還會(huì)丟數(shù)據(jù)。主要原因是XAPP1052一次DMA的總長(zhǎng)度為4KB,每一次DMA完成必須以中斷形式通知驅(qū)動(dòng)程序,驅(qū)動(dòng)程序再配置下一次DMA。從FPGA角度來說,已經(jīng)做到“盡力”了,但是數(shù)據(jù)量一大CPU不停的進(jìn)入中斷,時(shí)間全部浪費(fèi)在處理中斷上了,而且CPU使用率非常高。

審核編輯:彭靜

聲明:本文內(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)投訴
  • PCIe
    +關(guān)注

    關(guān)注

    16

    文章

    1342

    瀏覽量

    85167
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    576

    瀏覽量

    103271
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2953

    瀏覽量

    68398

原文標(biāo)題:PCIE之DMA

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于AMD Versal器件實(shí)現(xiàn)PCIe5 DMA功能

    Versal是AMD 7nm的SoC高端器件,不僅擁有比16nm性能更強(qiáng)的邏輯性能,并且其PS系統(tǒng)中的CPM PCIe也較上一代MPSoC PS硬核PCIe單元強(qiáng)大得多。本節(jié)將基于AMD官方開發(fā)板展示如何快速部署PCIe5x8
    的頭像 發(fā)表于 06-19 09:44 ?628次閱讀
    基于AMD Versal器件實(shí)現(xiàn)<b class='flag-5'>PCIe</b>5 <b class='flag-5'>DMA</b>功能

    第十五章 DMA

    本章介紹DMA(直接存儲(chǔ)器存?。淇稍诓徽加肅PU的情況下搬數(shù)據(jù),支持多種傳輸方向,含控制器、通道等配置及相關(guān)實(shí)驗(yàn)代碼。
    的頭像 發(fā)表于 06-14 16:32 ?641次閱讀
    第十五章 <b class='flag-5'>DMA</b>

    基于PCIe(XDMA/QDMA)的多路視頻采集與顯示IP 多路高速AD采集與DA回放IP

    隊(duì)列管理和PCIe C2H DMA引擎,將采集到的視頻幀實(shí)時(shí)傳遞到上位機(jī)采集緩沖區(qū)。在超帶寬視頻采集情況下,支持采集丟幀操作,后續(xù)視頻可以正常采集。視頻采集與顯示子系統(tǒng)使用高效的PCIe H2C
    發(fā)表于 04-14 15:17

    如何使用DMA進(jìn)行USART不定長(zhǎng)度接收

    在上一講中,我們對(duì)USART進(jìn)行了簡(jiǎn)單介紹,并講解了如何在不使用DMA的情況下進(jìn)行不定長(zhǎng)度數(shù)據(jù)接收,本講將著重講解如何使用DMA進(jìn)行USART不定長(zhǎng)度接收。
    的頭像 發(fā)表于 02-18 17:01 ?926次閱讀
    如何使用<b class='flag-5'>DMA</b>進(jìn)行USART不定長(zhǎng)度接收

    1分鐘學(xué)會(huì)如何提升PCIe通信速率,基于RK3568J + FPGA國(guó)產(chǎn)平臺(tái)!

    測(cè)試數(shù)據(jù)匯總 表 1 PCIe總線介紹 PCIe,即PCI-Express(peripheral component interconnect express)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn)。主要
    的頭像 發(fā)表于 01-23 16:17 ?508次閱讀
    1分鐘學(xué)會(huì)如何提升<b class='flag-5'>PCIe</b>通信速率,基于RK3568J + FPGA國(guó)產(chǎn)平臺(tái)!

    PCIe插槽開始,ICY DOCK重塑 U.2/U.3 硬盤存儲(chǔ)模式 #pcie #硬盤盒

    PCIe
    ICY DOCK硬盤盒
    發(fā)布于 :2025年01月17日 17:24:37

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

    前言 在ZYNQ中進(jìn)行PL-PS數(shù)據(jù)交互的時(shí)候,經(jīng)常會(huì)使用到DMA,其實(shí)在前面的ZYNQ學(xué)習(xí)當(dāng)中,也有學(xué)習(xí)過DMA的使用,那就是通過使用自定義的IP,完成HP接口向內(nèi)存寫入和讀取數(shù)據(jù)的方式。同樣
    的頭像 發(fā)表于 01-06 11:13 ?2353次閱讀
    ZYNQ基礎(chǔ)---AXI <b class='flag-5'>DMA</b>使用

    PCIe 4.0與3.0的區(qū)別 PCIe設(shè)備的故障排除方法

    PCIe 4.0與3.0的區(qū)別 PCIe(Peripheral Component Interconnect Express)是一種高速計(jì)算機(jī)總線,用于連接主板和附加卡。PCIe 4.0是PC
    的頭像 發(fā)表于 11-26 15:12 ?5421次閱讀

    PCIe熱插拔機(jī)制介紹

    前言本文主要講述PCIe熱插拔機(jī)制,通過圖形方式方便讀者快速掌握。 一、概述 如果在PCIe設(shè)備不支持熱插拔的條件下,在不斷電的情況下插拔一塊PCIe SSD時(shí),很可能會(huì)對(duì)主板或PCIe
    的頭像 發(fā)表于 11-20 09:07 ?2735次閱讀
    <b class='flag-5'>PCIe</b>熱插拔機(jī)制<b class='flag-5'>介紹</b>

    pcie 4.0與pcie 5.0的區(qū)別

    隨著數(shù)據(jù)傳輸需求的日益增長(zhǎng),計(jì)算機(jī)硬件接口也在不斷進(jìn)化。PCIe(Peripheral Component Interconnect Express)作為連接計(jì)算機(jī)內(nèi)部組件的高速串行總線標(biāo)準(zhǔn),已經(jīng)
    的頭像 發(fā)表于 11-13 10:35 ?1.5w次閱讀

    DMA是什么?詳細(xì)介紹

    DMA(Direct Memory Access)是一種允許某些硬件子系統(tǒng)直接訪問系統(tǒng)內(nèi)存的技術(shù),而無需中央處理單元(CPU)的介入。這種技術(shù)可以顯著提高數(shù)據(jù)傳輸速率,減輕CPU的負(fù)擔(dān),并提高整體
    的頭像 發(fā)表于 11-11 10:49 ?1.9w次閱讀

    如何測(cè)試PCIe插槽的速度

    1. 了解PCIe基礎(chǔ)知識(shí) PCIe(Peripheral Component Interconnect Express)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),用于計(jì)算機(jī)內(nèi)部硬件組件之間的連接。PCIe
    的頭像 發(fā)表于 11-06 09:23 ?5734次閱讀

    PCIe 4.0與PCIe 3.0的性能對(duì)比

    隨著科技的快速發(fā)展,計(jì)算機(jī)硬件也在不斷地更新?lián)Q代。PCI Express(PCIe)作為一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),廣泛應(yīng)用于計(jì)算機(jī)硬件連接,如顯卡、固態(tài)硬盤等。 1. 帶寬對(duì)比 PCIe
    的頭像 發(fā)表于 11-06 09:22 ?1.3w次閱讀

    PCIe接口的工作原理 PCIe與PCI的區(qū)別

    PCI Express(PCIe)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),主要用于計(jì)算機(jī)內(nèi)部硬件設(shè)備之間的連接。以下是PCIe接口的工作原理的簡(jiǎn)要概述: 串行通信 :與傳統(tǒng)的并行PCI總線不同,PCIe
    的頭像 發(fā)表于 11-06 09:19 ?4205次閱讀