作者: 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. struct、union、enum and sizeof

    struct 1.结构体和数组的差别:能够再结构体里声明数组.结构体变量能够相互赋值.而数组不行. 2.struct与class的差别:class的成员訪问权限默认是private,而struct成员 ...

  2. 火狐浏览器Firefox如何使用插件,火狐有哪些好用的插件

    1 CoorPreviews 不打开网页链接预览该网页的内容. 预览如图所示: 点击关闭旁边的钉子可以让该窗口保持开着并且浏览速度加快.这对于快速浏览图片时非常有用. 2 FoxTab 3D方式预览网 ...

  3. ZH奶酪:IBG项目工作内容

    IBG项目技术概览 (HTML/CSS/JavaScript/AngularJS/PHP/MySQL): (1)后台:PHP Yii2.0 Framework (2)前端:Ionic Framewor ...

  4. 安装itunes时提示不能删除旧版本的apple应用程序支持

    下载我 选择需要卸载清理的程序(所有与Apple有关的) ok

  5. python之函数用法__setattr__

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法__setattr__ #http://www.cnblogs.com/hongfei ...

  6. elasticsearch5.4体验

        Elasticsearch是基于Lucene分布式.实时查询的搜索分析引擎.我目前应用在日志集中化处理上... 01.下载elasticsearch5.4 https://www.elasti ...

  7. esp8266烧录Html文件,实现内置网页控制设备!

    代码地址如下:http://www.demodashi.com/demo/14321.html 一.前言: 这个月也快结束了,时间真快,我服务器知识自学依然在路途中,这几天听到热点网页配置esp826 ...

  8. 微信小程序基于scroll-view实现锚点定位

    代码地址如下:http://www.demodashi.com/demo/14009.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  9. Google Volley框架之https请求

    先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支 ...

  10. Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...