作者: East  FPGA那点事儿

上一章讲述了PCIe总线如何提高DMA的效率。

本章以服务器常用的4通道1000M以太网卡为例讲述如何实现多个虚拟DMA通道。

1.多通道DMA发

4通道以太网卡的数据相互独立,需要4个虚拟DMA发通道实现4路数据独立传输。4个虚拟DMA发通道如下:

多通道DMA发比较简单,因为TLP包中已经包含了具体的物理地址,4个虚拟通道可以向4个不同的物理内存位置写数据。所以DMA发逻辑与单通道DMA发逻辑没有什么不同,关键点在增加的总线仲裁逻辑。

4个网口都有数据要进行DMA发,发起TLP写请求,需要占用PCIe总线;4个网口还要进行DMA收,发起TLD读请求;主机的BAR读操作要占用PCIe总线。但是PCIe总线只有1个逻辑通道(即使PCIe总线物理层为x4或更高宽度,但逻辑通道数是1),所以各通道必须分时复用PCIe总线。

总线仲裁逻辑正是进行分时复用调度的功能。各种数据包有各自的特点:BAR读操作较少,为了提高上位机的处理效率,一般希望BAR读操尽快完成;TLP写请求包较大,会占用较长的总线时间;TLP读请求包小,但是包数量多,占用的总线带宽不可忽视。

所以总线仲裁逻辑可以设置优先级:仲裁逻辑以TLP包为单位,总线采用抢占式调度,即必须一个TLP包传输完成再判断下次给哪个通道使用总线;高优先级的通道可以优先占用PCIe总线,直到TLP包传输完成后才能给低优先级的通道使用;相同优先级的通道采用轮询方式调度,这样每个通道占用总线的机会相同。

一般会将BAR读放在最高优先级,这样可以让FPGA以最快的速度响应,减少上位机等待时间;在本案例中4个DMA发通道和4个DMA收通道需要相同的优先级,放在第二优先级。在一些特殊的应用中也可以将各DMA通道放在不同的优先级,实现重要数据优先传输,普通数据空闲时传输的功能。

2.多通道DMA收

DMA收的过程本身就比DMA发复杂,需要FPGA先发起读请求,主机再返回数据才能完成DMA收的过程。4个虚拟DMA收通道框图如下:

多个DMA收通道可以对多个内存地址就行读操作。多通道DMA收逻辑发起TLP读请求的方式与单通道DMA读相同。读请求也要通过总线仲裁逻辑分时复用PCIe总线。

这里增加了数据判别逻辑。DMA发的过程只需要FPGA发起TLP写请求,请求中已经包含了物理地址,不会引起数据错乱;而DMA收的过程中,FPGA发起TLP读请求包含了物理地址,但是主机返回的CPLD包中只有低6bit物理地址,不能通过物理地址判断是哪一个通道的数据包。所以需要在TLP读请求包中对每一个虚拟通道做上特殊标记,这样才能分辨主机返回的CPLD包是哪个通道读请求返回的数据包。

转载:http://xilinx.eetrend.com/blog/9836

PCIe调试心得_DMA part3的更多相关文章

  1. PCIe调试心得_DMA part2

    作者:East  FPGA那点事儿 上一章讲述了PCIe总线DMA的原理和XAPP1052存在的问题. 本章以服务器常用的4通道1000M以太网卡为例讲述如何提高DMA的效率. 1.内存重分配Wind ...

  2. PCIe调试心得_DMA part1

    作者 :East  FPGA那点事儿 1.PCIe的DMA介绍在PCIe中需要使用DMA的项目,一定要先看XAPP1052,里面包含一个DMA的参考设计,对初学者有极大的帮助. XAPP1052中包含 ...

  3. LPC2478_调试心得(转)

    1.在调试“E:\htwang\smart2200v201\ARM嵌入式系统实验教程(二)\开发板出厂编程程序\液晶显示程序\LCM_Disp”的程序时,想使用外部RAM进行仿真调试,在将ADS1.2 ...

  4. MIPI接口LCD屏调试心得(转)

    源: MIPI接口LCD屏调试心得

  5. VGA调试心得

    以前自己调试过视频信号,无非就时钟加行场同步加数据线,如果视频信号出问题,第一看现象,第二测频率,反正出问题不是消隐信号出问题,就是时钟频率出问题.通过这种方式也调试成功过几个显示屏,然后就以为自己对 ...

  6. js断点调试心得

    虽然网上已经有多的数不清的调试教程了,但仍然没有发现哪篇文章写的通俗易懂,索性自己尝试写写自己的一些使用习惯或者说是心得,希望对那些还不是很懂得使用断点调试的孩子有一些帮助(大神请无视~). 1.断点 ...

  7. PCI-E调试方式

    PCI-E的调试步骤 1.板子插上去之后正常情况下使用lspci 就能看的一个设备 这个设备上存在几个ID,可以根据ID可以确定设备是否识识别到 2.然后就是加载设备的驱动的时候,设备驱动会有VEND ...

  8. React Native调试心得

    在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...

  9. Pycharm Debug调试心得

    1.操作步骤: 1-1.添加断点:直接在标记处点击鼠标左键即可.(删除断点只需再点击断点处即可) 1-2.Debug下运行代码 1-3.按照所需调试进行代码调试.Debug的调试方式如下所示: 分别为 ...

随机推荐

  1. sqlplus的使用

    1.连接数据库 sqlplus / as sysdba 2.连接到远程数据库 sqlplus 用户名/密码@服务命名 3.遇到&会当成变量,一般是不需要的,可以关掉 SQL> set d ...

  2. windows系统上安装Redis,并且设置Redis密码

    一.Windows版本的Redis下载 下载地址:https://github.com/MSOpenTech/redis/releases 我下载的是最新版的3.2 二.安装Redis 我下载的是安装 ...

  3. ASP.NET伪静态

    http://www.duote.com/tech/5/14543.html 三.伪静态的坏处 当然犹如一篇文章的作者所说的:"如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线 ...

  4. mac 终端 使用 solarized 主题设置语法高亮

    mac 终端 使用 solarized 主题设置语法高亮 先来看看 solarized 在 mac 终端上的效果图片 一:先下载 solarized 官网下载:https://github.com/a ...

  5. win7 登录后只能使用“临时配置文件”,原来的配置文件无法启用!

    这个问题,修改注册表就可以解决. 开始-> 运行-> 输入regedit,回车, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Cur ...

  6. webservice系统学习笔记10-使用jax-ws创建基于tomcat类型的容器的ws服务

    1.在web-info目录下新建目录wsdl 2.在1步的目录下 新建文件user.wsdl <?xml version="1.0" encoding="UTF-8 ...

  7. Android利用温度传感器实现带动画效果的电子温度计

    概述 Android利用温度传感器实现带动画效果的电子温度计. 详细 代码下载:http://www.demodashi.com/demo/10631.html 一.准备工作 需要准备一部带有温度传感 ...

  8. C-边界对齐

    转自:http://blog.csdn.net/b_h_l/article/details/7738197 许 多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值 ...

  9. linux下修改文件权限

    加入-R 参数,就可以将读写权限传递给子文件夹例如chmod -R 777 /home/mypackage那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777777是读.写.执行权 ...

  10. servlet与filter的url-pattern设置方式

    servlet与filter的url-pattern设置方式: 1.精确匹配: /directory/file1.jsp /directory/file2.jsp /directory/file3.j ...