在所从事的项目中需要用到PCIE和DMA,经过再三研究,反复查看相关资料,终于弄懂了**alon_MM DMA Interface for PCIe的使用方法。

PCIE在fpga和上位机之间起着中间桥梁的作用,具有双向传输数据的功能。以下是**alon_MM DMA Interface for PCIe结构图,后面再分别详细介绍。

该ip可以使用Internal Descriptor Controller和External Descriptor Controller,下文所做介绍以Internal Descriptor Controller为基础。

接口介绍

Read DMA **alon-MM Master Port:主要完成两方面的工作:1、该模块发送读请求从host memory中取descriptor table,并将descriptor table通过**alon-MM Master 写入Descriptor Controller FIFO

2、从source address读取诗句之后,将数据写入**alon-MM 地址映射的外部DDR中。

Write DMA **alon-MM Master Port:该模块向**alon-MM 地址映射的外部DDR发送读请求,将读取的数据写入系统内存中。

RX Master Module:将从pcie接收到的读和写信号发送给**alon-MM ,request给连接在internnect的component.当Descriptor Controller在内部建立时,BAR0在内部使用,不能用作外部使用。上位机通过RXM给Descriptor Controller的寄存器进行编程,包括descriptor table的地址和大小。

descriptor controller 指示Read Data Mover 取descriptor table,并存在fifo中,controller取table并指导DMA在**alon-MM 和 PCIe之间传输数据。

TX Sl**e Module:将**alon-MM Master的读和写请求发送给PCI Express TLPs;当DMA完成时,descriptor controller利用此接口向上位机中的descriptor data写DMA status,并发送MSIinterrupts.

DMA Descriptor Controller Registers

上位机通过bar0来配置DMA Descriptor Controller Registers,read controller的地址偏置为0x0000,write controller的地址偏置为0x1000

DMA Descriptor Controller Registers for Read DMAs

RD_RC_LOW_SRC_ADDR = 0x0000 (The base address for the read descriptor table in the Root    Port

RD_RC_HIGH_SRC_ADDR = 0x0004

以上寄存器的值表示将descriptor table和status存在系统内存中的地址
RD_CTLR_LOW_DEST_ADDR 0x0008
d. RD_CTLR_HIGH_DEST_ADDR = 0x000C
以上寄存器的值表示将descriptor table和status存在fpga 中onchip memory中的地址
RD_DMA_LAST_PTR = 0x0010
以上寄存器的值表示将最后一个descriptor table的ID,当配置该寄存器时,用来触发DMA工作。

WR_TABLE_SIZE=0x0014

该寄存器表示一共有多少个descriptor table

WR_CONTROL =0x0018

该寄存器[0]表示done ,当dma完成时,向descriptor table中的status写done bit。

DMA Descriptor Controller Registers for Write DMAs

同上
Read DMA and Write DMA Descriptor Table Format

0x00,0x04:源地址

0x08,0x0c:目的地址

0x10:[24:18],对应descriptor的ID号,[17:0],DMA发送的数据量。

完成一次DMA操作的步骤

1、计算需要分配的内存大小:描述一个descriptor 的status需要的内存为32bit,即4bytes,描述一个descriptor table需要的内存32bytes。一共最多有128个descriptor,存放status需要的内存为512bytes,存放descriptor  table 需要32bytes*128 (针对 read DMA,write DMA同样),分配内存起始地址base_address。

2、给存放数据分配内存,

3、descriptor table存在descriptor status之后,存放第一个descriptor table的起始地址为base_address+0x200

4、创建descriptor table,按照Descriptor Table Format的格式

5、通过编程配置DMA Descriptor Controller  register,配置status and descriptor table地址的寄存器,0x0,0x4

6、配置存放status and descriptor table的on_chip fifo address,对应的是**alon-MM address,internal on-chip FIFO是Descriptor Controller的一部分,就是RX Master看到的大小。

7、编程配置RD_DMA_LAST_PTR register,用来触发DMA。

如果只需要得到所有的descriptor 都完成后得到done的信号,只需要写最后一个descriptor id给0x10;

如果每一个descriptor完成后都返回done,需要对每一个descriptor都配置0x10。

8、软件可以监测到done信号。

转载自:http://www.eefocus.com/zh880813/blog/16-06/385376_89d9c.html

**alon_MM DMA Interface for PCIe使用详解相关推荐

  1. PCIe TLP详解

    PCIe TLP详解 事务层数据包格式: TLP前缀 TLP包头 数据负载 TLP摘要 0, 1, 2,3,- H+1, H+2,- J, J+1,J+2,- K,K+1,K+2,- 前缀,这是一个可 ...

  2. linux 串口 dma,STM32 USART串口DMA 接收和发送流程详解

    1.dma发送流程 1.配置DMA发送中断 - NVIC_Init 2.配置串口中断 - NVIC_Init 3.GPIO配置 - GPIO_Init 4.DMA发送配置 -DMA_Init  DMA ...

  3. PCIE传输速率详解、Gbps和GB的区分

    PCIE通道数 1.PCIe规范,它又称为PCI-Express规范 2.PCIe吞吐量(可用带宽)计算方法:吞吐量 = 传输速率 *  编码方案,现行的PCIe 3.0规范,信号速率为8GT/s,编 ...

  4. STM32 H7系列ADC DMA模式过采样设置详解 cubeMX

    最近做项目需要用H743的ADC采样,发现和M3及M4的差别还是蛮多的,MPU的配置对DMA读取数据的影响.过采样机制等,其中H7的硬件过采样是个很实用的东西,硬汉大佬也进行了测试: STM32H7的 ...

  5. PCIE接口详解及应用模式

    PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为"3GIO",是由英特尔 ...

  6. golang 面试题(十三)interface内部结构和nil详解

    1.以下代码打印出来什么内容,说出为什么. package mainimport ("fmt" )type People interface {Show() }type Stude ...

  7. [SSD科普1] PCIE接口详解及应用模式

    PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为"3GIO",是由英特尔 ...

  8. RK3568平台开发系列讲解(调试篇)PCIe调试详解

  9. DMA RDMA 技术详解

    DMA 技术是一个 直接内存访问技术. 在传统的linux 内存读写操作都必须经过cpu,读写寻址都是有cpu 完成的, 现在有一中技术 让数据读写完全由网卡自己完成. 这样就必须有硬件支持,及系统必 ...

  10. 串行总线的详解XAUI/XLAUI SFP+ PCIE SATA QPI

    主要介绍一下工作常用到的串行总线: FPGA DMA控制器: DMA:direct memory access;包括一条地址总线,一条控制总线,和控制寄存器. 1.XAUI和xlaui https:/ ...

最新文章

  1. Nat. Commun. | AI语言工具揭示分子运动
  2. 程序员买买买,纸书半价,电子书55折,抢券叠加使用更划算
  3. 19倍超音速“大炮”轰出可控核聚变!成本仅为传统方法0.1%,腾讯已投资
  4. 2018牛客网暑期ACM多校训练营第二场 D - money(贪心)
  5. 全球及中国太阳能光热发电市场重点项目规划及发展格局展望报告2021-2027年
  6. hadoop yarn 获取日志_在 YARN 中简化用户日志的管理和使用
  7. Xtreme ToolkitPro 初使用
  8. 网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?
  9. Lombok开发指南
  10. flutter向上动画弹出菜单效果
  11. SilverLight:基础控件使用(5)-TreeView控件-基本使用
  12. linux显卡驱动卸载和安装,Linux下Nvidia显卡驱动卸载和卸载后的问题
  13. python输出文档内容_python输出文件
  14. 【 Logistic Regression 】林轩田机器学习基石
  15. IAST 初探:博采众长、精准定位、DevOps友好
  16. 抓取B站所有用户信息(11/29更新数据)
  17. java-使用keytool信任自签证书,需要重启
  18. mixamo进不去_酷站推荐!3D人物动画工具
  19. 爬虫技术原来可以做这么多牛逼哄哄的事情!
  20. maya正交视图锁定与解锁

热门文章

  1. 曙光服务器如何重新设置u盘启动_曙光开机光驱启动设置
  2. java 错误 找不到符号_java错误:找不到符号
  3. 浅说物联网之一:物联网圈子的三个玩家
  4. 图(3)——邻接链表法
  5. 微信终于能注册小号了,无需绑定手机号!
  6. idea安装jclasslib和BindEd,以及使用
  7. 1040 实数的打印
  8. 【推荐】实现跟随鼠标移动的浮动提示框、气泡框、Tip效果
  9. 压缩文件右击找不到Bandizip解压选项
  10. 欧姆龙的PLC的FINS通讯协议的C例子