PCIE的DMA和PIO介绍

墨尘
在PCIE中有两种数据传输方式:
DMA(Direct Memory Access),直接内存访问,在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器DMA控制器来完成,因此占用极少的CPU资源。
PIO(Programmed Input-Output),可编程输入输出,在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。举例老说,在DMA方式下,如果copy文件的同时在播放mp3音乐,则不受丝毫影响;如果在PIO模式下,则会发现音乐声时断时续,这是因为大部分CPU资源被文件传输占用。
所以,总的来说,使用DMA模式时,计算机的运行速度会比使用PIO模式快很多。
在xilinx中生成IP核后,工程文件夹下会有这两个文件夹:
[Xilinx_PCIe_BMD] xilinx FPGA 开发 pcie BMD DMA的verilog HDL源码[example_design] xilinx pcie总线 pio模式下的控制器代码。包含接收发送模块,存储模块,控制模块等。
下面主要介绍PCIe的DMA数据传输:
在PCIe中需要使用DMA的项目,一定要先看XAPP1052,里面包含一个DMA的参考设计,对初学者有极大的帮助。
XAPP1052中包含FPGA源代码和驱动程序源代码,其中FPGA源代码最主要的文件为:1、《TX_ENGINE.v》:是产生TLP包的逻辑,包含读TLP请求用于DMA读;写TLP请求用于DMA写;CPLD用于BAR空间读。2、《RX_ENGINE.v》:是解析TLP包的逻辑,包含读TLP解析用于BAR空间读、写TLP解析用于BAR空间写、CPLD解析用于DMA读。
DMA分为读和写种操作,两种操作在细节上不同。
这里先简单介绍一下DMA读过程:1、驱动程序向操作系统申请一片物理连续的内存;2、主机向该地址写入数据;3、主机将这个内存的物理地址告诉FPGA;4、FPGA向主机发起读TLP请求—连续发出多个读请求;5、主机向FPGA返回CPLD包—连续返回多个CPLD;6、FPGA取出CPLD包中的有效数据;7、FPGA发送完数据后通过中断等形式通知主机DMA完成;
DMA写过程如下:1、驱动程序向操作系统申请一片物理连续的内存;2、主机将这个内存的物理地址告诉FPGA;3、FPGA向主机发起写TLP请求,并将数据放入TLP包中—连续发出多个写请求;4、FPGA发送完数据后通过中断等形式通知主机DMA完成;5、主机从内存中获取数据;
如果是参考XAPP1052,一定要注意几点:
1.1连续内存申请的内存一定要物理连续。DMA是直接对物理内存—也就是实际的内存条进行读写操作,必须为物理连续的内存;而应用程序和驱动程序一般只能申请到逻辑上连续的内存,在物理上不一定连续。XAPP1052中可以看到申请内存上的一些特殊处理,目的就是获取物理连续的内存,可获取4KB的物理连续内存。但是XAPP1052在内存处理上也存在一些问题,实验尚可,应用则不行。如何获取内存的物理地址在XAPP1052中已经有示范,可直接参考。
1.2将地址告诉FPGAXAPP1052是在BAR空间开辟了一段专用地址存放DMA读地址、DMA写地址、DMA长度、TLP包大小等参数,可直接参考。
1.3写TLP请求DMA写的操作相对简单,只需要FPGA单向发起写TLP操作即可完成,至于有没有真正写入内存一般不需要FPGA关心;而驱动程序需要等待一定时间让数据正真写入内存—中断处理的时间已经足够让数据写入内存,所以也不必特别关心。
发起写TLP请求可以连续发送,但是注意《TX_ENGINE.v》中要处理读TLP请求、写TLP请求和CPLD,所以有时会遇到三种请求竞争的情况。如果想要提高DMA的效率可以重新设定三种请求的优先级。
1.4读TLP请求DMA读的操作相对复杂,需要FPGA向主机发出读请求,主机再返回数据。FPGA控制逻辑必须计算发起了多少个读TLP请求,再计算收到的数据是否足够。
一般来说FPGA可以一次发送所有的读请求,然后按照顺序接收数据即可。但是某些主板并不一定是按照请求的顺序返回数据的情况,可能后发出的请求先返回数据,属于主机乱序执行的现象。要么FPGA一次只发一个读请求,等数据收到了再发现一个读请求—但是效率就对不起了;要么对乱序情况进行特殊处理,XAPP1052还没有解决该问题。
1.5特殊参数TLP包中有很多参数,例如:TC、ATTR等等,如果不了解的话,千万不要随意修改,与参考设计保持一致即可,否则很容易导致蓝屏。
1.6 DMA通道XAPP1052中只实现了一个DMA读通道和一个DMA写通道。对于很多应用,例如两路视频采集,需要两路DMA写通道:要么把两路数据按照一定的格式整合为一个流;要么实现两路DMA写通道,XAPP1052不能直接实现。
1.7数据流量XAPP1052整个方案的效率并不高,数据流量非常有限。数据量较少时倒是够用,数据量大了会发现CPU使用率非常高,占用一个CPU核心,但是还会丢数据。主要原因是XAPP1052一次DMA的总长度为4KB,每一次DMA完成必须以中断形式通知驱动程序,驱动程序再配置下一次DMA。从FPGA角度来说,已经做到“尽力”了,但是数据量一大CPU不停的进入中断,时间全部浪费在处理中断上了,而且CPU使用率非常高。
转载:https://baijiahao.baidu.com/s?id=1590483430637574612&wfr=spider&for=pc
PCIE的DMA和PIO介绍的更多相关文章
- DMA与PIO是什么东西?
1. DMA全称是什么? Direct Memory Access 2. PIO全称是什么? Programming Input/Output 3. DMA与PIO是两种不同的模式 3.1 DMA 不 ...
- **alon_MM DMA Interface for PCIe使用详解
在所从事的项目中需要用到PCIE和DMA,经过再三研究,反复查看相关资料,终于弄懂了**alon_MM DMA Interface for PCIe的使用方法. PCIE在fpga和上位机之间起着中间 ...
- HI3531由DMA 发起PCIe 事务
Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个 DMA 读通道和一个DMA 写通道).PCIe 控制器内包含的DMA 控制器用于大数据量 的存储器读写事务 ...
- Xilinx FPGA 的PCIE 设计
写在前面 近两年来和几个单位接触下来,发现PCIe还是一个比较常用的,有些难度的案例,主要是涉及面比较广,需要了解逻辑设计.高速总线.Linux和Windows的驱动设计等相关知识. 这篇文章主要针对 ...
- 基于PCIe的高速接口设计
基于PCIe的高速接口设计 由 judyzhong 于 星期四, 03/03/2016 - 13:49 发表 作者:李晓宁,姚远程,秦明伟 2016年微型机与应用第1期 摘要:PCIe总线是第三代I/ ...
- FPGA实战操作(2) -- PCIe总线(协议简述)
目录 1. PCIe基础知识 2. 事务层协议 2.1 数据包结构 2.2 帧头含义详述 3. 报文举例 3.1 寄存器读报文 3.2 完成报文 4. 机制简述 4.1 Non-Posted和Post ...
- PCIe调试心得_DMA part1
作者 :East FPGA那点事儿 1.PCIe的DMA介绍在PCIe中需要使用DMA的项目,一定要先看XAPP1052,里面包含一个DMA的参考设计,对初学者有极大的帮助. XAPP1052中包含 ...
- FPGA实战操作(2) -- PCIe总线(例程设计分析)
1.框架总览 平台:vivado 2016.4 FPGA:A7 在实际应用中,我们几乎不可能自己去编写接口协议,所以在IP核的例程上进行修改来适用于项目是个不错的选择. 通过vivado 中有关PCI ...
- Xilinx DMA的几种方式与架构
DMA是direct memory access,在FPGA系统中,常用的几种DMA需求: 1. 在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AXI,AXI与 ...
随机推荐
- Office EXCEL VBA数组如何使用
Excel VBA数组入门教程 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已. 2. 数组的维数: Sub 数组示例() Dim x As Long, y As Long Dim ...
- HBase数据迁移至Hive
背景:需要将HBase中表xyz(列簇cf1,列val)迁移至Hive 1. 建立Hive和HBase的映射关系 1.1 运行hive shell进入hive命令行模式,运行如下脚本 CREA ...
- 4667 Building Fence 解题报告
题意:给n个圆和m个三角形,且保证互不相交,用一个篱笆把他们围起来,求最短的周长是多少. 解法1:在每个圆上均匀的取2000个点,求凸包周长就可以水过. 解法2:求出所有圆之间的外公切线的切点,以及过 ...
- mysql 运行计划explain具体解释
explain主要是用来获取一个query的运行计划,描写叙述mysql怎样运行查询操作.运行顺序,使用到的索引,以及mysql成功返回结果集须要运行的行数.能够帮助我们分析 select 语句,让我 ...
- 〖Android〗/system/etc/audio_policy.conf
原文件注释说明: # audio hardware module section: contains descriptors for all audio hw modules present on t ...
- 《微赢微信公众平台系统5月14最新破解高级运营版+水果机+邀请函+微汽车+微食品+用户CRM》
<微赢微信公众平台系统5月14最新破解高级运营版+水果机+邀请函+微汽车+微食品+用户CRM> 此版本号眼下是淘宝卖600RMB的,其他VIP源代码论坛也都还没有公布.咱们这里全然免费分享 ...
- 【BIEE】导出数据报错
使用BIEE导出数据的时候,发现个问题,导出过程中,报错如下: 问题解决: 找到文件opmn.xml,路径为:/Middleware/instances/instance1/config/OPMN/o ...
- 去除DataTable重复数据的三种方法(转)
转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...
- Spring框架文档与API(4.3.6版本)
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ Table of Contents I ...
- XMLHttpRequest cannot load ...谷歌浏览器跨域问题
HTML页面通过Ajax调用公网web服务时,浏览器请求发送成功,但是响应的 xhr.status==0,控制台报错如下 XMLHttpRequest cannot load http://ws.we ...