### 基于Xilinx PCIe Core的DMA设计详解 #### 摘要 本文档详细介绍了一种基于Xilinx Endpoint Block Plus PCIe IP Core的DMA(直接内存访问)设计。该设计支持由板卡主动发起的DMA操作,允许快速传输数据至PC或从PC获取数据。通过使用通用的Local Link接口,该设计兼容多种Xilinx PCIe硬核器件,包括Virtex 5、Virtex 6和Spartan 6系列,并已在ML555和ML605开发板上进行了验证。 #### 简介 本设计的主要功能包括: 1. **支持板卡发起的DMA操作**:这种操作可以高效地将数据从板卡传输到PC,或者反方向传输。DMA可以通过PCIe的BAR0空间进行控制。 2. **兼容多种Xilinx系列**:利用Xilinx LogiCORE Endpoint Block Plus硬核,本设计支持Virtex 5、Virtex 6和Spartan 6系列,并无缝支持PCIe x8、x4和x1速率。 3. **灵活的数据接入**:板卡终端采用标准FIFO接口,可以接入各种类型的数据,如AD采样数据、光纤数据或DA数据。 4. **高效的驱动代码**:使用DriverStudio生成的驱动代码,以最大限度提高连续传输速率的同时减少PC的处理负担。 5. **用户自定义BAR2空间**:用于自定义控制,提供更多灵活性。 6. **支持32位和64位操作系统**:确保广泛的兼容性。 #### 典型系统结构 PC与PCIe板卡之间的交互有两种主要方式: 1. **PC主动读写板卡内容**:在这种模式下,板卡通过BAR空间的形式呈现给PC,使得PC能够简单地控制和读写这些空间中的数据。然而,这种模式下的传输速率有限,通常不超过10MBps,且会导致较高的CPU负载。 2. **PCIe板卡主动发起读写PC总线数据**:这种方式使用板卡内的DMA引擎实现更高效的数据传输。具体过程如下: - **数据从板卡到PC**: 1. PC申请一段连续的物理内存空间并锁定,以防被其他程序使用。 2. 当FPGA内部的数据积累到一定规模时,向PC发送中断通知。 3. PC接收中断后,通过写入BAR0空间的寄存器来指定目标物理地址及其大小,并启动DMA。 4. FPGA内部的DMA引擎接收到启动命令后,主动组织PCIe Memory Write TLPs包发送到PC,其中包含用户需要传输的数据。DMA引擎自动填充TLP包的地址等信息直至达到预设长度。 5. 完成传输后,FPGA向PC发送中断通知,PC读取BAR0空间的状态寄存器并做出相应处理。 - **数据从PC到板卡**: 1. 同样地,PC首先申请并锁定一段连续的物理内存空间。 2. 当FPGA内部有足够的空闲空间时,向PC发送中断请求数据。 3. PC接收中断后,同样通过BAR0空间寄存器指定源物理地址及大小,并启动DMA。 4. FPGA内部的DMA引擎组织PCIe Memory Read TLPs包发送到PC,PC自动将物理空间中的数据组织成Completion TLPs回送给FPGA。 5. FPGA接收并分析数据后,按顺序存储在缓冲区内,并向PC发送中断通知;PC读取BAR0空间的状态寄存器并处理后续动作。 #### DMA控制逻辑 DMA控制逻辑的设计如图2所示。通过这种方式,可以有效地管理数据的流动,提高数据传输效率并减轻PC的负担。本设计的关键在于DMA引擎的高效组织与控制,以及通过PCIe TLPs的有效利用来加速数据传输。这种设计特别适用于需要高速数据交换的应用场景,如信号处理、图像处理等领域。 基于Xilinx PCIe Core的DMA设计是一种高效、灵活的数据传输方案,它不仅可以提高系统的整体性能,还具有良好的扩展性和兼容性,非常适合应用于各种高性能计算和通信领域。
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助