作者: 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. Spring+DBUnit+H2----项目单元测试

    http://yugouai.iteye.com/blog/1879337 今天够郁闷的,早上调好的代码,到中午调试不同了,分析不出问题,H2的JDBC报错:org.h2.jdbc.JdbcSQLEx ...

  2. 破解无线网络密码-BT3如何使用1

    一分钟制作 BT3 U盘版 方便,快捷简单 光盘版BT3, 大概694MB,直接刻盘,然后用光盘引导,即可进入bt3,连接为: http://ftp.heanet.ie/mirrors/backtra ...

  3. VC操作MPP文件

    1.背景简介 因需要对Office系列进行程序操作,特需要使用COM编程. Microsoft Project生成进度计划,office家族软件,文件后缀为.mpp. 具体信息见维基百科http:// ...

  4. MySQL Cluster配置文件-SQL节点4G内存

    # Example MySQL config file for large systems. # # This is for a large system with memory = 512M whe ...

  5. jQuery(一)引入

    一.jQuery简介 jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多) 二.安装 2.1.下载 下载地址:http://jq ...

  6. 常用工具软件之串口终端工具——SecureCRT和xshell

    SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单的说是Windows下登录UNIX或Linux服务器主机的软件.SecureCRT支持SSH,同时支持Telnet和rlog ...

  7. 动态IP或无公网IP时外网訪问内网ORACLE数据库

    ORACLE数据库是应用最多的一个数据库.一般项目应用.将ORACLE部署在内网,内网调用,及运维都仅仅能是内网完毕. 假设ORACLE主机或所在局域网没有固定公网IP,又想在外网对ORACLE进行訪 ...

  8. UsageGrideReport++

      迁移时间:2017年5月20日11:42:02CreateTime--2016年9月29日15:46:15Author:Marydon版本Gride Report++6.0使用说明:参考链接:ht ...

  9. [Done]ftp使用小结

    基本命令: put 本地文件名 ftp文件名 get ftp文件名 本地文件名 mget ftp文件多个文件  注意使用该命令时先用 lcd切换本地路径 还有一些常用的  ls mkdir 等,参考 ...

  10. mysql的常用函数、流程控制

    case when用法: END END if用法 IF(expr1,expr2,expr3) #表达式expr1为真则返回expr2否则为expr3 , , ) #结果: 1 ifnull用法: I ...