可交付资料:

  1. 详细的用户手册
  2. Design File:Post-synthesis EDIF netlist or RTL Source
  3. Timing and layout constraints,Test or Design Example Project
  4. 技术支持:邮件,电话,现场,培训服务

联系方式:

Email:neteasy163z@163.com

1    介绍

基于PCI Express Integrated Block,Multi-Channel PCIe QDMA Subsystem实现了基于DMA地址队列的高性能Continous或Scather Gather DMA,提供FIFO/AXI4-Stream用户接口。

1.1      特性

  • 支持Ultrascale+,Ultrascale,7 Series的PCI Express Integrated Block
  • 支持64,128,256,512-bit数据路径
  • 64-bit源地址,目的地址,和描述符地址
  • 多达16个host-to-card(H2C/Read)数据通道或H2C DMA
  • 多达16个card-to-host(C2H/Write)数据通道或C2H DMA
  • FIFO/ AXI4-Stream用户接口(每个通道都有自己的FIFO/AXI4-Stream接口)
  • 每个DMA引擎支持DMA地址队列,队列深度可达32
  • AXI4-Lite Master接口允许PCIe通信绕过DMA引擎
  • Scather Gather描述符列表支持无限列表大小
  • 每个描述符的最大传输长度为4GB
  • MSI中断
  • 连续描述符的块获取
  • 中断或查询模式

1.2      应用

本内核体系结构支持广泛的计算和通信目标程序应用,强调性能、成本、可扩展性、功能可扩展性和关键任务可靠性。典型应用包括:

● 数据通信网络

● 电信网络

● 宽带有线和无线应用

● 网络接口卡

● 用于各种应用程序的服务器add-in card

典型应用如下图所示:

图 1 Multi-Channel PCIe QDMA Subsystem典型应用:8通道视频采集和视频显示

2    概述

Multi-Channel PCIe QDMA Subsystem作为一个高性能DMA数据搬移器,内核通过AXI4-Stream接口直接连接RTL逻辑。使用提供的字符驱动程序,AXI4-Stream接口可用于PCIe地址空间和AXI地址空间之间的高性能数据搬移。除了基本的DMA功能,DMA支持多达16个upstream和downstream通道,每个通道支持深度为32的DMA地址队列,另外还允许PCIe通信绕过DMA引擎。

图 2 Multi-Channel PCIe QDMA Subsystem概述

2.1      特性概要

基于描述符提供的信息:源地址,目的地址和传输数据长度,Multi-Channel PCIe QDMA Subsystem实现Host存储器和PCIe DMA子系统之间的数据搬移。这些DMA可以同时是Host to Card(H2C)和Card to Host(C2H)传输。每个DMA通道对应各自的AX4-Stream接口,DMA从Host存储器获取并解析描述符链表,基于描述符链表信息完成自己通道的数据传输,然后使用MSI中断发出描述符完成或错误的信令。内核也提供多达16个输出到Host的用户中断信号。

主机可以通过以下2个接口访问用户逻辑:

  • AXI-Lite Master配置接口:这个接口是一个固定的32-bit端口,用于对性能要求不高的用户配置和状态寄存器的访问
  • User Register:这个接口是多个32-bit向量信号和1-bit信号,这些信号来自对应DMA通道数据搬移过程中产生的控制或状态信号

3    产品规格

结合Integrated Block for PCI Express IP,Multi-Channel PCIe QDMA 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

速率

1660MB/s

1660MB/s

1660MB/s

1660MB/s

1660MB/s

1660MB/s

1660MB/s

1660MB/s

表2 PCIe 3.0 x16 H2C DMA速率

DMA0

DMA1

DMA2

DMA3

DMA4

DMA5

DMA6

DMA7

速率

1670MB/s

1670MB/s

1670MB/s

1670MB/s

1670MB/s

1670MB/s

1670MB/s

1670MB/s

表3 PCIe 3.0 x8 C2H DMA速率

DMA0

DMA1

DMA2

DMA3

DMA4

DMA5

DMA6

DMA7

速率

880MB/s

880MB/s

880MB/s

880MB/s

880MB/s

880MB/s

880MB/s

880MB/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 2.0 x8 C2H DMA速率

DMA0

DMA1

DMA2

DMA3

DMA4

DMA5

DMA6

DMA7

速率

450MB/s

450MB/s

450MB/s

450MB/s

450MB/s

450MB/s

450MB/s

450MB/s

表6 PCIe 2.0 x8 H2C DMA速率

DMA0

DMA1

DMA2

DMA3

DMA4

DMA5

DMA6

DMA7

速率

455MB/s

455MB/s

455MB/s

455MB/s

455MB/s

455MB/s

455MB/s

455MB/s

3.2            资源

8-Channel PCIe-SGQDMA Subsystem

表7 PCIe 3.0 x16 DMA Subsystem资源

LUTs

FFs

BRAMs

PCIe

资源

46985

101938

150

1

表8 PCIe 3.0 x8 DMA Subsystem资源

LUTs

FFs

BRAMs

PCIe

资源

26388

51935

78

1

表9 PCIe 2.0 x8 DMA Subsystem资源

LUTs

FFs

BRAMs

PCIe

资源

26945

38687

55

1

8-Channel PCIe-CQDMA Subsystem

表10 PCIe 3.0 x16 DMA Subsystem资源

LUTs

FFs

BRAMs

PCIe

资源

34976

75994

150

1

表11 PCIe 3.0 x8 DMA Subsystem资源

LUTs

FFs

BRAMs

PCIe

资源

19364

37487

78

1

表12 PCIe 2.0 x8 DMA Subsystem资源

LUTs

FFs

BRAMs

PCIe

资源

20973

29963

55

1

3.3            内核Component

内核内部实现多达32个独立的物理DMA引擎(多达16个C2H和16个H2C)。这些DMA引擎被映射到各自的AXI4-Stream用户应用接口。AXI4-Stream接口只传递数据。

通道的类型配置决定了在哪个总线上进行事务传输。

  • Host-to-Card(H2C)通道向PCIe产生读请求,然后给用户应用提供数据
  • 同样,Card-to-Host(C2H)通道等待用户侧的数据,然后向PCIe产生写请求(包含接收到的数据)

Host通过AXI4-Lite Master接口访问用户逻辑的配置和状态寄存器。这些请求是32-bit的读或写。

3.3.1    Target Bridge

Target bridge从Host接收请求。基于BARs,这些请求通过AXI4-Lite Master接口传递到内部的目标用户。下行用户逻辑返回non-post请求的数据后,target bridge产生一个读返回TLP,然后通过CC总线发送给PCIe IP。

PCIe BARs配置如下表所示。

表13 32-bit BARs

BAR0(32-bit)

BAR1(32-bit)

DMA

PCIe to AXI4-Lite Master

3.3.2    H2C通道

H2C通道处理host-to-card的DMA传输。根据最大读请求大小和可用的内部资源,H2C通道负责拆分这些读请求。读取请求的每个拆分(如果有)都会消耗一条额外的读取请求条目。DMA通道向PCIe RQ模块发出读请求后,直到按顺序接收到用户接口的写完成确认,这个读请求才算完成。在数据传输完成后,DMA通道向Host发出一个中断。

H2C通道会根据配置的最大读请求大小和数据FIFO可用空间来拆分Host读接口上的数据传输。从PCIe RC模块输出的读请求返回完成数据包会存储到已分配的数据FIFO中。为了减少数据传输延时,一旦接收到任何一个完成数据包,H2C通道就开始把读取的数据输出到AXI4-Stream Write接口。

3.3.3    C2H通道

C2H通道处理card-to-host的DMA传输。在AXI4-Stream Read接口接收数据之前,C2H通道首先接收DMA描述符,建立DMA传输的环境,然后在准备好请求ID和启用C2H通道后,通道的AXI4-Stream接口可以接收数据并对主机执行DMA。在数据传输完成后,DMA通道向Host发出一个中断。

3.3.4    AXI4-Lite Master

Host使用这个接口向用户逻辑发出32-bit读和32-bit写请求。通过PCIe总线接收读或者写请求,路由到AXI-Lite Master BAR中,target bridge通过PCIe IP CC总线返回读取的完成数据。

3.3.5    IRQ Module

IRQ module接收来自用户逻辑中断请求和每个DMA通道的独立中断线。这个模块通过PCIe向Host产生MSI中断。

3.3.6    DMA操作

从DMA的原理出发,PCIe DMA引擎通常在Host内存和驻留在FPGA中的内存之间搬移数据,FPGA的内存通常(但不总是)位于add-in板卡。当数据从Host内存搬移到FPGA内存时,称为Host to Card(H2C)传输。相反,当数据从FPGA内存搬移到Host内存,称为Card to Host(C2H)传输。

在通常的操作中,Host中的应用程序必须在FPGA和Host内存之间搬移数据。为了完成此次传输,Host在系统内存中设置缓冲区空间,并创建DMA引擎用于搬移数据的描述符。

Multi-Channel PCIe QDMA Subsystem使用连续的描述符链表,单个描述符指定了地址和DMA传输长度。Host驱动创建描述符链表,并存储在Host内存。Host驱动只需要少量控制寄存器就可以初始化DMA通道,接着该DMA通道就开始去获取描述符链表并执行DMA操作。

描述符描述了Multi-Channel PCIe QDMA Subsystem执行的内存传输。每个DMA通道有自己的描述符链表。Host驱动通过硬件寄存器初始化每个DMA通道描述符链表的起始地址。在启动DMA通道后,该DMA通道开始从起始地址获取描述符。

EOP控制比特显示描述符链表的终止。当DMA通道检测到某个描述符的EOP控制比特后,会停止获取该描述符链表。EOP控制比特只能在描述符链表的最后一个描述符中被设置。

描述符格式如下表所示。

表14 描述符格式

Offset

Fields

0x0

Bit 31:EOP

Bit 30~16:保留

Bit 15~0:Magic,常数16’hAD4B

0x4

DMA Transfer Length

0x8

Address[31:0]

0xC

Address[63:32]

Address:64-bit,Destination address for C2H或Source address for H2C

EOP:1-bit,End of packet for stream data

DMA Transfer Length:32-bit,Length of data in bytes

3.4            端口描述

Multi-Channel PCIe QDMA Subsystem直接和integrated block for PCIe连接。和PCIe integrated block IP数据路径接口的宽度是64,128,256或512-bit,时钟频率最高可达250MHz。除了AXI4-Lite Master接口,数据路径宽度适用于所有数据接口。AXI4-Lite Master接口的宽度固定为32-bit。

以下列表描述了这个IP的端口(默认数据路径接口宽度是512-bit,PCIe接口是x16)。

表15 参数定义

参数名称

描述

默认值

CNUM

H2C和C2H的通道数量

8

C2H_BUF_BRAM_CASCADE_DEPTH

C2H数据缓冲区的BRAM级联深度

0:BRAM深度=29=512

1:BRAM深度=29+1=1024

……

N:BRAM深度=29+N

0

C2H_BUF_USE_URAM

C2H数据缓冲区是否使用URAM

0:不使用URAM

1:使用URAM

0

C2H_BUF_URAM_CASCADE_DEPTH

H2C数据缓冲区的URAM级联深度

0:URAM深度=212=4096

1:URAM深度=212+1=8192

……

N:URAM深度=212+N

0

H2C_BUF_BRAM_CASCADE_DEPTH

H2C数据缓冲区的BRAM级联深度

0:BRAM深度=29=512

1:BRAM深度=29+1=1024

……

N:BRAM深度=29+N

0

H2C_BUF_USE_URAM

H2C数据缓冲区是否使用URAM

0:不使用URAM

1:使用URAM

0

H2C_BUF_URAM_CASCADE_DEPTH

C2H数据缓冲区的URAM级联深度

0:URAM深度=212=4096

1:URAM深度=212+1=8192

……

N:URAM深度=212+N

0

表16 顶层接口信号

信号名称

输入输出

描述

pcie_trn_clk

输出

PCI Express Transaction接口时钟

pcie_trn_reset_n

输出

PCI Express Transaction复位,低有效

trn_lnk_up

输出

PCI Express Transaction Link Up信号,高有效

表17 PCIe接口信号

信号名称

输入输出

描述

pcie_refclk_p

输入

PCI Express 接口参考时钟+

pcie_refclk_n

输入

PCI Express 接口参考时钟-

pcie_perst_n

输入

PCI Express接口基本复位,低有效

pci_exp_txp[15:0]

输出

PCI Express串行差分输出+,16通道

pci_exp_txn[15:0]

输出

PCI Express串行差分输出-,16通道

pci_exp_rxp[15:0]

输入

PCI Express串行差分输入+,16通道

pci_exp_rxn[15:0]

输入

PCI Express串行差分输入-,16通道

表18 H2C通道0-CNUM-1 FIFO(FWFT)接口信号

信号名称

输入输出

描述

fifo_rdclk_disp

[CNUM-1:0]

输入

FIFO读时钟

Bit i,表示H2C通道i的读时钟

fifo_rdreq_disp

[CNUM-1:0]

输入

FIFO读使能,高有效

Bit i,表示H2C通道i的读使能

fifo_q_disp

[512*CNUM-1:0]

输出

FIFO读数据

Bit 512*(i+1)-1~512*i,表示H2C通道i的读数据

fifo_empty_disp

[CNUM-1:0]

输出

FIFO空,高有效

Bit i,表示H2C通道i的缓存空信号

fifo_prog_empty_disp

[CNUM-1:0]

输出

FIFO可编程空(阈值等于16),高有效

Bit i,表示H2C通道i的缓存可编程空信号

表19 C2H通道0-CNUM-1 FIFO接口信号

信号名称

输入输出

描述

fifo_wrclk_acq

[CNUM-1:0]

输入

FIFO写时钟

Bit i,表示C2H通道i的写时钟

fifo_wrreq_acq

[CNUM-1:0]

输入

FIFO写使能,高有效

Bit i,表示C2H通道i的写使能

fifo_data_acq

[512*CNUM-1:0]

输入

FIFO写数据

Bit 512*(i+1)-1~512*i,表示C2H通道i的写数据

fifo_prog_full_acq

[CNUM-1:0]

输出

FIFO可编程满(阈值等于深度-16),高有效

Bit i,表示C2H通道i的缓存可编程满信号

表20 Config AXI4-Lite Master接口信号

信号名称

输入输出

描述

m_axil_awaddr

输出

write address

m_axil_awprot[2:0]

输出

write protection type

m_axil_awvalid

输出

write address valid

m_axil_awready

输入

write address ready

m_axil_wdata[31:0]

输出

write data

m_axil_wstrb[3:0]

输入

write strobes

m_axil_wvalid

输出

write valid

m_axil_wready

输入

write ready

m_axil_bresp[1:0]

输入

write response

m_axil_bvalid

输入

write response valid

m_axil_bready

输出

response ready

m_axil_araddr[31:0]

输出

read address

m_axil_arprot[2:0]

输出

read protection type

m_axil_arvalid

输出

read address valid

m_axil_arready

输入

read address ready

m_axil_rdata[31:0]

输入

read data

m_axil_rresp[1:0]

输入

read response

m_axil_rvalid

输入

read valid

m_axil_rready

输出

read ready

表21 中断接口信号

信号名称

输入输出

描述

usr_intr_pos[15:0]

输入

用户中断输入。

Bit i:用户中断#i输入,上升沿有效。

表22 软复位接口信号

信号名称

输入输出

描述

sw_srst_n

输出

软复位输出,低有效。

表23 用户寄存器接口信号

信号名称

输入输出

描述

acquisition_res

[32*CNUM-1:0]

输出

CNUM个C2H通道的分辨率设置

Bit 32*(i+1)-1~32*i,表示C2H通道i的分辨率

display_res

[32*CNUM-1:0]

输出

CNUM个H2C通道的分辨率设置

Bit 32*(i+1)-1~32*i,表示H2C通道i的分辨率

acquisition_fps

[32*CNUM-1:0]

输出

CNUM个C2H通道的帧率设置

Bit 32*(i+1)-1~32*i,表示C2H通道i的帧率

display_fps

[32*CNUM-1:0]

输出

CNUM个H2C通道的帧率设置

Bit 32*(i+1)-1~32*i,表示H2C通道i的帧率

acquisition_enable

[CNUM-1:0]

输出

CNUM个C2H通道的采集使能,高有效

Bit i = 1,表示使能C2H通道i采集

display_enable

[CNUM-1:0]

输出

CNUM个H2C通道的显示使能,高有效

Bit i = 1,表示使能H2C通道i显示

acquisition_stat

[32*CNUM-1:0]

输入

CNUM个C2H通道的状态

Bit 32*(i+1)-1~32*i,表示C2H通道i的状态

display_stat

[32*CNUM-1:0]

输入

CNUM个H2C通道的状态

Bit 32*(i+1)-1~32*i,表示H2C通道i的状态

usr_ctrl[31:0]

输出

控制信号输出

usr_stat[31:0]

输入

状态信号输入

Multi-Channel PCIe QDMA Subsystem的更多相关文章

  1. DM8168 DVRRDK软件框架研究

    转载注明:http://blog.csdn.net/guo8113/article/details/41120491 Netra(DM8168)处理器是个多核处理器,每一个核之间相互独立却又相互关联, ...

  2. jvm的代码缓存耗尽导致性能下降

    在没遇到这个问题之前,我对JVM的解释模式与编译模式的代码性能相差有多大,是没有感觉的,只是觉得编译模式会比解释模式性能好那么一点点吧. 但是经历过这次以后,让我对JVM的即时编译产生了兴趣.先来看看 ...

  3. 《zw版·Halcon-delphi系列原创教程》 酸奶自动分类脚本(机器学习、人工智能)

    <zw版·Halcon-delphi系列原创教程>酸奶自动分类脚本(机器学习.人工智能) Halcon强大的图像处理能力,令人往往会忽视其内核,是更加彪悍的机器学习.人工智能.       ...

  4. Amazon Launches FBA Export to Expand Beyond Media Categories

    Amazon launched a new program called FBA Export for third-party sellers to help them export products ...

  5. Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone

    For most people the above image means absolutely nothing, but for that one guy that has been searchi ...

  6. A Distributed Multichannel MAC Protocol for Multihop Cognitive Radio Networks

    2010 这个呢,就是time slotted的DSA网络MAC层协议. 跟上一篇单纯的Multi Channel实现类似,不过这里是CR网络,因为多了嗅探等操作. 简单的说,time slotted ...

  7. Halcon相关

      1.Halcon的自我描述 Program Logic Ø Each program consists of a sequence of HALCON operators Ø The progra ...

  8. 嵌入式驱动开发之sensor---"VIP0 PortA", "VIP0 PortB", "VIP1 PortA", "VIP1 PortB",dvo0(vout1) dvo1(vout0)

    (1)vip 简介 (2)vip 电路图 (3)vip 更换采集相机输入 (4)vip 驱动 ---------------------author:pkf --------------------- ...

  9. PatentTips - Power management implementation in an optical link

    BACKGROUND INFORMATION Embodiments of the present invention are directed to optical links and, more ...

随机推荐

  1. Canvas 线性图形(一):路径

    路径的概念 路径是从起始点到结束点之间的连线.个人认为,二维画布中分为线性图形和非线性图形,线性图形包括矩形.直线.曲线.圆形等各种几何图形:非线性图形包括图象.文本.像素.线性图形中又分为路径和非路 ...

  2. 牛客IOI周赛26-提高组 A. 逆序对

    题面 逆序对 有一个长度为 N \tt N N 的排列 a a a,进行 M \tt M M 次操作,操作有 4 \tt 4 4 种: 1 l r :交换 a l \tt a_l al​ 和 a r ...

  3. 第五十一篇:webpack中的loader(二) --less-loader

    好家伙 先扩充一下知识点: 什么是.less文件? 作为一名前端开发的同学,很多时候我们都无法避免地要去写大量的 CSS 代码, 而且耗费的时间还不少,所以学习一种能够提升开发效率的 CSS 预处理器 ...

  4. 第四十一篇:Vue生命周期(二)

    好家伙,书接上回 上图:(Vue官网中Vue实例图片的下半张) 以下为解释: 5.1.1. mounted执行完后,表示整个Vue实例已经初始化完毕了; 此时,组件已经脱离了创建阶段;进入到运行阶段 ...

  5. 第三十九篇:Vue3 watch(ref和reactive的监视)

    好家伙, 1.vue2中的watch是调用配置项,(只能写一个) vue3中的watch是一个函数(可以写很多个) 2.watch一些用法: 这里是定义的数据 set up(){ let sum =r ...

  6. Linux_ps总结

    ps命令用于监测进程的工作情况.进程是一直处于动态变化中,而ps命令所显示的进程工作状态时瞬间的 使用方式: ps [options] 常用参数 -A 显示所有进程 -a 显示现行终端机下的所有进程, ...

  7. 我的Vue之旅、01 深入Flexbox布局完全指南

    花了几个小时整合的"A Complete Guide to Flexbox"最新版本,介绍了flexbox的所有属性,外带几个实用的例子. 传统布局.Flexbox 布局的传统解决 ...

  8. 第一个Java代码的编写 :HelloWorld代码的编写

    HelloWorld代码的编写 创建一个新的文件夹,通过Notepad++编写第一个Java程序 , 文件名为"Hello.java" 在文件中编写,如下代码: public cl ...

  9. 内网部署YApi

    官网地址:https://hellosean1025.github.io/yapi/devops/index.html 环境要求 nodejs(7.6+) mongodb(2.6+),安装看这篇文章: ...

  10. Rust学习入门

    介绍 特性: 高性能,内存利用率高,没有运行时和垃圾回收 可靠 , 丰富的类型系统和所有权模型保证内存和线程安全,编译器可以消除各种错误 生产力, 包管理器.构建工具一流, 多编辑器支持自动补齐和格式 ...