自研Xilinx高性能PCIe多通道DMA控制器
1 介绍
基于PCI Express Integrated Block,Multi-Channel PCIe QDMA Subsystem实现了使用DMA地址队列的独立多通道、高性能Continous或Scather Gather DMA,提供FIFO/AXI4-Stream用户接口。
基于PCI Express Integrated Block,Multi-Channel PCIe RDMA Subsystem实现了使用DMA Ring缓冲的独立多通道、高性能/超低延时/超低抖动Continous Ring DMA,提供FIFO/AXI4-Stream用户接口。
在自研DMA控制器和自研PCIe驱动的加持下,总体的PCIe-DMA效率高达88%,PCIe 3.0 x16下DMA带宽高达14GB/s,PCIe 3.0 x8下DMA带宽高达7.1GB/s。
联系方式:neteasy163z@163.com
1.1 特性
Ø 支持Ultrascale+,Ultrascale,7 Series的PCI Express Integrated Block
Ø 支持64,128,256,512-bit数据路径
Ø 64-bit源地址,目的地址,和描述符地址
Ø 多达8个独立的host-to-card(H2C/Read)数据通道或H2C DMA
Ø 多达8个独立的card-to-host(C2H/Write)数据通道或C2H DMA
Ø AXI4-Stream/FIFO用户接口(每个通道都有自己的AXI4-Stream/FIFO接口)
Ø 每个DMA引擎支持DMA地址队列,队列深度可达32
Ø 每个DMA引擎支持DMA Ring缓冲,Ring缓冲深度和个数可配置
Ø RDMA的超低延时和超低抖动性
Ø H2C DMA支持视频显示定时时序输入控制
Ø AXI4-Lite Master接口允许PCIe通信绕过DMA引擎
Ø Scather Gather描述符列表支持无限列表大小
Ø 每个描述符的最大传输长度为4GB
Ø MSI中断
Ø 连续描述符的块获取
Ø 中断或查询模式
1.2 应用
本内核体系结构支持广泛的计算和通信目标程序应用,强调性能、成本、可扩展性、功能可扩展性和关键任务可靠性。典型应用包括:
● 数据通信网络
● 电信网络
● 宽带有线和无线应用
● 网络接口卡
● 用于各种应用程序的服务器add-in card
典型应用如下图所示:

图 1 Multi-Channel PCIe QDMA&RDMA Subsystem典型应用:8通道视频采集和视频显示
2 概述
Multi-Channel PCIe QDMA&RDMA Subsystem作为一个高性能DMA数据搬移器,内核通过AXI4-Stream/FIFO接口直接连接RTL逻辑。使用提供的字符驱动程序,AXI4-Stream/FIFO接口可用于PCIe地址空间和AXI地址空间之间的高性能数据搬移。除了基本的DMA功能,DMA支持多达8个独立的upstream和downstream通道,每个通道支持深度为32的DMA地址队列,以及深度和个数可配置的DMA Ring缓冲,另外还允许PCIe通信绕过DMA引擎。

图 2 Multi-Channel PCIe QDMA&RDMA Subsystem概述
2.1 特性概要
基于描述符提供的信息:源地址,目的地址和传输数据长度,Multi-Channel PCIe QDMA&RDMA Subsystem实现Host存储器和PCIe DMA子系统之间的数据搬移。这些DMA可以同时是Host to Card(H2C)和Card to Host(C2H)传输。每个DMA通道对应各自的AX4-Stream/FIFO接口,DMA从Host存储器获取并解析描述符链表,基于描述符链表信息完成自己通道的数据传输,然后使用MSI中断发出描述符完成或错误的信令。内核也提供多达16个输出到Host的用户中断信号。
主机可以通过以下2个接口访问用户逻辑:
Ø AXI4-Lite Master配置接口:这个接口是一个固定的32-bit端口,用于对性能要求不高的用户配置和状态寄存器的访问
Ø User Register:这个接口是多个32-bit向量信号和1-bit信号,这些信号来自对应DMA通道数据搬移过程中产生的控制或状态信号
3 产品规格
结合Integrated Block for PCI Express IP,Multi-Channel PCIe QDMA&RDMA Subsystem为PCIe提供了一个高性能的DMA解决方案。
3.1 性能
Endpoint配置参数:Max Payload Size=256-byte,Max Read Request Size=512-byte
8-Channel PCIe-SGQDMA Subsystem,DMA Transfer Length = 4MB
表1 PCIe 3.0 x16 C2H DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 1690MB/s | 1690MB/s | 1690MB/s | 1690MB/s | 1690MB/s | 1690MB/s | 1690MB/s | 1690MB/s |
表2 PCIe 3.0 x16 H2C DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 1700MB/s | 1700MB/s | 1700MB/s | 1700MB/s | 1700MB/s | 1700MB/s | 1700MB/s | 1700MB/s |
表3 PCIe 3.0 x8 C2H DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s |
表4 PCIe 3.0 x8 H2C DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s | 890MB/s |
表5 PCIe 3.0 x4 C2H DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 440MB/s | 440MB/s | 440MB/s | 440MB/s | 440MB/s | 440MB/s | 440MB/s | 440MB/s |
表6 PCIe 3.0 x4 H2C DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s |
表7 PCIe 2.0 x8 C2H DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s |
表8 PCIe 2.0 x8 H2C DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s | 445MB/s |
表9 PCIe 2.0 x4 C2H DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 220MB/s | 220MB/s | 220MB/s | 220MB/s | 220MB/s | 220MB/s | 220MB/s | 220MB/s |
表10 PCIe 2.0 x4 H2C DMA速率
| DMA0 | DMA1 | DMA2 | DMA3 | DMA4 | DMA5 | DMA6 | DMA7 | |
| 速率 | 225MB/s | 225MB/s | 225MB/s | 225MB/s | 225MB/s | 225MB/s | 225MB/s | 225MB/s |
3.2 资源
8-Channel PCIe-SGQDMA Subsystem
表11 PCIe 3.0 x16 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 46985 | 101938 | 150 | 1 |
表12 PCIe 3.0 x8 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 26647 | 51071 | 84 | 1 |
表13 PCIe 3.0 x4 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 17671 | 35598 | 44 | 1 |
表14 PCIe 2.0 x8 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 25301 | 36973 | 66 | 1 |
表15 PCIe 2.0 x4 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 19807 | 29320 | 98 | 1 |
1-Channel PCIe-CQDMA Subsystem
表16 PCIe 3.0 x8 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 8122 | 19331 | 8 | 1 |
表17 PCIe 2.0 x8 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 7911 | 11771 | 6 | 1 |
表18 PCIe 2.0 x4 DMA Subsystem资源
| LUTs | FFs | BRAMs | PCIe | |
| 资源 | 4747 | 6479 | 21 | 1 |
相关文章:
自研Xilinx高性能PCIe多通道DMA控制器
1 介绍 基于PCI Express Integrated Block,Multi-Channel PCIe QDMA Subsystem实现了使用DMA地址队列的独立多通道、高性能Continous或Scather Gather DMA,提供FIFO/AXI4-Stream用户接口。 基于PCI Express Integrated Block,Multi-Channel…...
人工智能原理复习--知识表示(二)
文章目录 上一篇产生式表示法推理方式 结构化表示语义网络语义网络表示知识的方法和步骤应用题目 框架表示法下一篇 上一篇 人工智能原理复习–知识表示(一) 产生式表示法 把推理和行为的过程用产生式规则表示,所以又称基于规则的系统。 产…...
【SpringBoot篇】登录校验 — JWT令牌
文章目录 🌹简述JWT令牌⭐JWT特点 🌺JWT使用流程🛸JWT令牌代码实现🍔JWT应用 🌹简述JWT令牌 JWT全称为JSON Web Token,是一种用于身份验证的开放标准。它是一个基于JSON格式的安全令牌,主要用于…...
leetcode每日一题34
89.格雷编码 观察一下n不同时的格雷编码有什么特点 n1 [0,1] n2 [0,1,3,2] n3 [0,1,3,2,6,7,5,4] …… 可以看到nk时,编码数量是nk-1的数量的一倍 同时nk编码的前半部分和nk-1一模一样 nk编码的最后一位是2k-1 后半部分的编码是其对应的前半部分的对称的位置的数字…...
王者荣耀游戏制作
1.创建所需要的包 2.创建怪物类 bear package beast;import wangzherogyao.GameFrame;public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("img/bear.jpg");width 85;height 112;setDis(65);}} b…...
springboot post添加URL添加参数
出现 MissingServletRequestParameterException: Required String parameter pageNumber is not present 异常的原因是在请求中没有提供名为 pageNumber 的参数。 请确保发送 POST 请求时,在请求的 URL 或请求体中提供了名为 pageNumber 的参数,以满足方…...
『 MySQL数据库 』插入查询结果
文章目录 🎟️ 前言🎟️ 创建一张结构相同的表🎟️ 表内插入查询结果🎫 对表内数据进行去重🎫 配合ORDER BY排序后以及LIMIT分页对数据进行插入 🎟️ 前言 在MySQL数据库中不仅可以直接根据字段类型等对数据…...
【笔记】小白学习电路维修
学习视频(b站):从0开始学电路 从0开始学电路维修 p1 黄色长方体元件P2 故障率最高的元件p3带芯铜丝线圈是什么区分电感和变压器接入电路分析: p4 交流和直流分界线整流桥接线整流桥故障判断 带色环的不一定是电阻 p1 黄色长方体元…...
linux简述进程
目录 进程 一个正在运行的程序,一个程序运行至少要启动一个进程,主进程 子进程 一个进程正常运行,至少要启动一个线程,主线程 子线程 进程的生命周期: 进程状态产生的原因: 查看当前系统的进程 ps au…...
由于设置了全局 QWidget 背景导致QT QCalendarWidget 表态背景异常
解决: 单独设置QCalendarWidget 的qss : 对象是查看源码所得 QWidget#qt_calendar_navigationbar{ ...... } QToolButton#qt_calendar_prevmonth, #qt_calendar_nextmonth, #qt_calendar_monthbutton, #qt_calendar_yearbutt…...
数据库的重要你了解多少?如何保障数据库的安全?
随着信息技术的快速发展,数据库已经成为企业、组织以及个人日常生活中不可或缺的一部分。然而,随着数据库的广泛应用,其安全性问题也日益凸显。数据库的安全性主要包括数据的完整性、保密性和可用性。本文将探讨数据库安全性的重要性、以及如…...
距离“全自动”漏洞挖掘又近了一步!腾讯安全大数据实验室论文入选ACM CCS 2023
计算机领域国际权威学术顶会ACM CCS 2023于11月26日在丹麦哥本哈根开幕。腾讯安全大数据实验室团队论文《Hopper: Interpretative Fuzzing for Libraries》被大会收录,昨天,实验室研究员谢雨轩受邀出席大会进行主题分享。 该论文提出了解释性模糊测试&a…...
docker搭建rabbit集群
1.去rabbitMQ官网拉去images 我当前使用的是最新版本的镜像:rabbitmq:3.12-management 2.创建一个集群专用网络 docker的容器相互隔离是不可通信的,我们自行创建一个网络后,创建容器时 给他们放在一起,就可以通信了。 docker netw…...
西南科技大学C++程序设计实验一(C++基础知识)
目录 一、实验目的 二、实验任务 三、预习内容(复习书中前3章内容,说明C++相对于C的扩展有哪些?) 四、问题思考与讨论 一、实验目的 1.熟悉编程环境 2.掌握程序调试方法。 3.熟悉枚举类型、结构体类型等自定义数据类型的使用 4.熟悉函数的定义、说明与使用 5.熟悉引用…...
Rust内存布局
题图忘了来自哪里.. 整型,浮点型,struct,vec!,enum 本文是对 Rust内存布局 的学习与记录 struct A { a: i64, b: u64,}struct B { a: i32, b: u64,}struct C { a: i64, b: u64, c: i32,}struct D { a: i32, b: u64, c: i32, d: u64,}fn main(…...
android 12 添加菜单
1.创建一级菜单 packages\apps\Settings\res\xml\top_level_settings.xml <com.android.settings.widget.HomepagePreferenceandroid:fragment"com.android.settings.DeviceStatusSettings"android:icon"drawable/ic_settings_display_white"android:…...
Map 的 5 种遍历方式
Map 的 5 种遍历方式 强烈推荐 for-each entrySet()遍历 和 lambda 表达式遍历 ,简洁又好用!!! package com.maptest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;pub…...
Linux的基本指令 ( 一 )
目录 前言 Linux基本指令 快速认识五个指令 ls指令 补充内容 pwd指令 补充内容 cd指令 补充内容 重新认识指令 指令的本质 which指令 alias指令 最后 一个文件的三种时间 tree指令及安装 tree指令 前言 关于Linux操作系统的桌面,在学校教学中我们…...
【深度学习】学习率及多种选择策略
学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。相比于其它超参数学习率以一种更加复杂的方式控制着模型的有效容量,当学习率最优时,模型的有效容量最大。本文从手动选择学习率到使用预热机制…...
具有“真实触感”的动捕数据手套mhand pro,提供更精确的动作捕捉
随着人工智能的普及和万物互联,vr虚拟技术备受关注,为了更加真实的虚拟现实交互体验,动捕数据手套的使用逐渐普及,vr手套可以实时采集各手指关节运动数据,使用动捕数据手套可以在虚拟现实的场景中实现对真实手部运动的…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
