自研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手套可以实时采集各手指关节运动数据,使用动捕数据手套可以在虚拟现实的场景中实现对真实手部运动的…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...