DMA数据传输(共7篇)
DMA数据传输 篇1
在图像数据采集过程中, 为了提高处理效率, 在FPGA中完成图像数据的算法处理, 经过ABH总线传送到SDRAM, 再经由LCD显示出来。在FPGA到SDRAM的过程中, 往往采用DMA技术, 尽可能提高数据吞吐量。在DMA传输的过程中, 需要知道何时启动DMA传输, 何时传输结束以及应用软件何时将数据取走, 以保证传输的数据不会出现错帧。这就是所谓数据的同步传输。如果不采用同步技术, 应用程序会读到空的或者重复的数据甚至错误的数据。
1 系统硬件结构
系统硬件部分主要由CCD探测器、驱动电路、FPGA图像数据处理电路、ARM嵌入式系统、电源电路及其他接口电路组成。系统结构图如图1所示。
CCD及驱动电路采集图像数据后, 在FPGA中对采集的数据进行校正、增强等处理, 形成对比度较好的灰度图像数据并缓存在FIFO中, 同时向ARM端发送一个图像数据准备好中断信号。ARM收到中断信号之后, 启动DMA传输, 将图像灰度数据读取到ARM嵌入式系统的存储器, 以便于送LCD显示或者做进一步处理。
2 FPGA与ARM之间的接口
FPGA形成20位地址总线, 分别连接在ARM处理器的A0-A20, 16位数据总线分别连接在ARM的D0-D15, 中断信号连接在ARM处理器的EINT1引脚, 片选信号连接在ARM处理器的n GCS1引脚, 读写信号分别与ARM相对应。
3 嵌入式系统中DAM及中断系统原理
DMA指在数据传送过程中, 不需要CPU的参与, 这种方式可以大大提高数据传输效率, DMA传输在实现的过程中, 往往会结合中断使用。通常, CPU初始化DMA控制器 (包括选择DMA通道, 数据传输的源地址、目的地址、传输字节数、传输模式) , 然后启动DMA开始传输, 这时CPU就空闲下来, 可以去处理其他事情。待DMA传输完成之后, DMA控制器会向CPU提出DMA结束中断, 这时, DMA再响应该中断, 将目标地址中的数据取走, 完成一次传输。
4 同步传输机制
系统上电之后, CCD采集一帧图像数据, 并通过EINT1向ARM发起数据准备好中断请求, 在一定时间之后, 采集第二帧图像数据 (图2左) 。用户空间的应用程序循环发起读命令, 但这时, 需要等待DMA传输结束才将数据从内核空间传递到用户空间。因此, 应用程序发起读命令之后就会阻塞, 直到数据准备好。此时, ARM检测到外部中断EINT1信号有效 (表示FPGA已经准备好一帧数据) , 内核启动DMA传输, 当传输结束之后, 向ARM发出DMA传输结束中断。这时, 应用程序的阻塞状态得到解除, 将内核空间的这一帧图像数据取走 (图2右) 。流程如图2所示:
可以看到, 每次用户空间的读命令, 都会取到一帧完整的图像数据, 否则, 程序就会等待 (或阻塞) , 直到一帧完整的数据复制到用户空间。
5 程序实现
我们在ARMlinux环境下构造DMA传输的字符驱动程序来实现了这一同步传输机制。 (图2左在FPGA中实现) 。部分代码 (关
键函数) 如下:
6 测试结果及结论
样机参数:CCD器件采用320*240面阵的ULS探测器, FPGA采用Xinlix的spartan3A, , S3C2440A处理器, 主频200MHz, 操作系统为armlinu x, 内核版本2.6.30, 交叉工具链为arm-linux-gcc3.4.1。数据采集后保存为BMP文件, 通过样机验证, 能准确实时传输图像数据, 未出现错位及错帧现象, 说明该同步传输方法是有效且可靠的。效果如图4所示。
摘要:在基于FPGA的数据采集过程中, 往往需要面对FPGA与ARM的DMA技术, 其中, FPGA在ARMLinux下的同步DMA数据传输是难点。本文在实际工作的过程中, 实现了FPGA的DMA驱动, 完成了图像数据的实时无误传输。
关键词:嵌入式,ARMLinux,DMA,同步传输
参考文献
[1] (美) 科波特.LINUX设备驱动程序[M].第三版.中国电力出版社, 2006.
[2]三星公司.S3C2440A数据手册[M].第一版.韩国:三星公司, 2004:8.1-8.14.
[3]宋宇.基于USB的DMA方式实现CCD高速数据采集[J].光电子.激光, 2004, (10) :37-40.
[4]王俊.基于DMA的并行数字信号高速采集系统[J].电子技术应用, 2010, (3) :42-44.
DMA数据传输 篇2
关键词:PCI Express(PCIE),WinDriver,驱动,直接内存访问(DMA)
PCIE( PCI Express) 是第三代高性能I / O总线,在总线结构上采取了根本的变革,主要体现在两个方面: 一是由并行总线变为串行总线; 二是采用了点到点的互联。它具有速度快并且点对点串行传输,使两端设备可以独享带宽,扩展灵活方便等优点[1]。为实现高速数据传输采用PCIE 2. 0 ×8接口,为此设计了基于PCIE接口的驱动程序以实现传输卡的DMA高速数据传输功能。
1数据传输卡的结构及基本工作原理
系统为了检验存储器存储性能,基本结构框图如图1所示: FPGA采用Xilinx公司的Virtex -6芯片,主要实现PCIE系统逻辑、DDR3控制逻辑以及TLK的控制逻辑。
数据传输卡分为发送板和接收板,发送板在发送端PC机启动向板卡发送数据请求时,在PCIE系统逻辑的控制下将数据从PC机内存接收到DDR3中,然后再从DDR3中将数据取出放在TLK2711发送端口上, 通过TLK2711将数据发送出去; 接收板从TLK2711接收端接收发送端过来的数据传递给FPGA,然后在控制逻辑作用下存放于DDR3,当接收端PC机启动读板卡内数据请求时,在PCIE系统逻辑的控制下将数据传送给接收端PC机内存区。
本传输卡中加入DDR3,利用其采用8 - bit预取技术解决了外部数据传输率与核心频率之间的矛盾, 保证了数据传输率的持续增长,同时增加了带宽; 此外存储器模块的地址、命令、控制信号和时钟采用了 “fly - by”的拓扑结构,大幅减轻了地址、命令、控制与数据总线的负载,提高了信号的完整性从而确保了数据的正确稳定传输。
2驱动程序的实现及主要代码分析
2. 1开发工具的选择
本驱动开发选择Jungo公司的WinDriver作为开发工具,因为利用WinDriver开发驱动程序不需熟悉操作系统的内核,整个驱动程序是工作在用户态下的,这样可以大幅加速PCIE设备驱动程序的开发[2]。 WinDriver的易用性并不影响驱动程序的运行效率,实验证明用WinDriver开发的驱动程序符合高速数据传输的要求。
2. 2 PCI Express接口的配置空间
PCI Express的配置空间如图2所示,主要由4部分组成: 配置头标区、PCI设备专用寄存器组、能力寄存器组及PCI Express扩展配置空间[3]。配置空间是设备硬件与软件进行联系和交互的区域,是设备实现即插即用的基础。每一个功能的配置空间容量为4 kB,PCI兼容空间占据4 kB功能配置空间的256个字节( 即64个双字) ,驱动程序设计中主要是对其中的基地址寄存器进行操作[4]。
2. 3设备驱动程序的开发
本驱动程序设计共有4个模块: 设备的打开与释放、设备寄存器控制、对设备中断的轮询处理以及设备读写( 主要是DMA读写) 。
2. 3. 1设备的寄存器控制
在PCI Express系统逻辑结构中,DMA状态控制寄存器主要是实现PCI Express端口核与PC机根联合体之间数据的传递,DMA控制状态寄存器映射于PCI Express配置空间中的BAR0空间,对设备的寄存器控制就是对映射与BAR0空间的DMA控制状态寄存器进行控制,代码如下所示( 以读为例) :
WDC _ ReadAddr32 ( hDev,0,offset,outdata) ; / / 读偏移地址为offset的寄存器值
2. 3. 2设备的中断处理
PCI Express数据传输卡作为DMA的主控制器,当DMA传输完成后,传输卡会发起一个硬件中断。PCI Express驱动程序处理硬件中断的流程如图3所示。
驱动程序收到硬件中断,调用中断服务程序。中断服务程序工作主要有两个: 一是清除中断标志位,避免一个中断信号导致两次中断服务程序调用的情况; 二是激活等待事件对内存区数据进行处理。
2. 3. 3 DMA读写
为实现大容量数据的高速传输,就需要采用DMA数据传输方式,整体流程如图4所示。
在进行DMA读写之前首先对硬件进行初始化复位操作,初始化完成后开启DMA中断,然后为DMA读写设置参数如读写地址、读写长度等,在完成上述操作后启动DMA进行数据读写传输,当DMA读写完成时响应中断进入中断服务程序进行判断是否所有数据处理结束,若没有则启动下一次DMA传输,否则终止DMA读写。当DMA写或读完成时,板卡发起中断,在系统捕捉到中断后进行中断处理,若数据未处理完则重新填写DMA读写参数,再一次启动DMA直至处理完全。在处理完后对程序占用的内存区进行释放。
3驱动程序和应用程序的通信
当驱动程序捕获到事件信号时应该主动和应用程序进行通信,方案中采用事件通知的方法。应用程序与驱动程序之间通信的软件流程如图5所示。
在应用程序创建一个线程等待后,用CreateEvent函数创建自动重置事件,应用程序通过WaitForSing- leObject( hEvent,0) 函数来等待事件发生。当有中断产生时调用中断服务程序,然后在中断服务程序中激活事件,此时应用程序捕捉到激活事件后执行创建的线程程序,从而进行数据处理操作。
4实验结果
通过WinDriver编写的驱动程序经过实验测试可以实现DMA数据高速传输功能,图6所示即为DMA读传输界面。
实验将一定量内存区数据量在PCIE 2. 0版本、数据链路X8通道的条件下用DMA模式循环发送到板卡,所显示平均回放速度即为DMA读传输速度,由此表明开发的驱动程序完全能够实现板卡的DMA高速传输功能。
5结束语
DMA数据传输 篇3
1 PCIe总线层次结构
(1) 在设备的发送部分, 首先根据来自设备的信息在事务层形成事务层包 (TLP) , 储存在发送缓存器里, 在数据链路层, 在TLP包上串接一些附加信息, 这些信息用于对方接收TLP包时进行错误检查。在物理层, 对TLP包进行编码, 占用链路中的通道, 从查封发送器发送出去, 最后通过光或电等介质和另一方通讯。其中数据链路层和物理层包平常不需要关心, 在FPGA的IP核中封装好了, 把PCIe功能变成完成事务层包的处理。
(2) 用FPGA实现需要的PCIe功能, 简单的说就是完成TLP的处理。TLP有三部分组成, 帧头、数据、摘要 (或者称ECRC) 。TLP头标长3 或者4 个DW, 格式和内容随事物类型变化;数据端为TLP帧头定义下的数据段, 如果该TLP不携带数据, 那该段为空。Digest段是基于头标、数据字段计算出来的CRC, 成为ECRC, 一般Digest段有IP核填充。所以, PCIe的处理在用户层表现为处理TLP中头标和数据段。
(3) BAR空间申请。 在PCI设备的BAR寄存器中, 包含该设备使用的PCI总线域的地址范围。在PCI设备的配置空间中共有6 个BAR寄存器, 因此一个PCI设备最多可以使用6 组32 位的PCI总线地址空间, 或者3 组64 位的PCI总线地址空间。这些BAR空间可以保存PCI总线域的存储器地址空间或者I/O地址空间, 目前多数PCI设备仅使用存储器地址空间。Xilinx PCIe硬核提供6 个32bit基地址寄存器BAR0~BAR5, 本设计使用一个32bit的bar0 寄存器来存储DMA操作的寄存器地址, 地址空间位250M, 初始地址为32’h FFFC_0000。
2 基于PCIe的高速DMA传输设计
CPU通过PCIe总线写BAR0 地址空间数据来配置, 本设计将PCIe的BAR0 地址空间存储DMA控制、缓存器地址、读取数据长度及接收或发送数据的校验信息。当CPU写FPGA外部存储器时, FPGA发出对CPU的DMA读请求, 之后等待CPU发送DMA数据。同样的, 当CPU读FPGA外部存储器时, FPGA发出对CPU的DMA的写请求, 之后CPU等待PCIe接口发来的DMA数据包。
3 设计工程实现
由于本设计DMA数据传输用硬件描述语言 (Verilog) 实现, 所以综合仿真测试也是整个设计中很重要的一环。本设计用仿真工具Modelsim进行功能仿真, 仿真正确后用Chip Scope进行抓图。图1、图2 为DMA读写时序图。
4 结束语
本设计是基于Xilinx Virtex6 系列FPGA芯片基础上完成, 已在实际的工程当中得到了验证, FPGA比ASIC强大之处在于灵活性和可配置性。本设计通过赛灵思PCIe硬核很好的实现了串行高速DMA传输, 有效的提高了系统传输数据速率。
参考文献
[1]郭从良.现代信号数据获取与信息处理系统[M].北京:清华大学出版社, 2009.
[2]周林, 殷侠.数据采集与分析技术[M].西安:西安电子科技大学出版社, 2005.
[3]马鸣锦, 朱剑冰, 何红旗等.PCI、PCI-X和PCI Express的原理及体系结构[M].北京:清华大学出版社, 2007:4.
DMA数据传输 篇4
ZYNQ-7000是基于Xilinx全可编程的可扩展处理平台 (Extensible Processing Platform, EPP) 结构, 该结构在单芯片内集成了基于具有丰富特点的双核ARM Cortex™-A9多核处理器的处理系统 (Processing System, PS) 和Xilinx可编程逻辑 (Programmable Logic, PL) 。常规的UART收发数据包通过UART内部的FIFO完成的。不管是用中断还是用查询的方法, 都需要占用CPU的时间。当数据包比较大的情况下, 即使最大限度地利用UART的FIFO资源, 也会占用CPU很长的时间, 为了节省这段时间, 最大限度的提高CPU的利率效率, 使用ARM Cortex™-A9内部的DMA控制器, 在没有CPU干预的情况下, 在存储器之间移动数据。CPU将控制权交给硬件控制器去完成数据包的发送接收, 让CPU有时间去处理其他的事务。
一、ZYNQ-7000 DMA和UART控制器介绍
1.1 ZYNQ-7000的UART控制器。UART是全双工异步接收器和发射器的缩写, 是一类用途广泛的通信接口, 特别是在嵌入式主机和上位机的通信中。ZYNQ-7000内部有两个UART, 和普通的UART一样, 提供可编程修改的波特率和数据格式, 具有奇偶校验和检错功能, 并提供64字节的接收和发送FIFO缓存。这里只是系统用的内部的UART接口。
软件上传输的数据可根据用户自己的需求而定, 本文只是笼统的称作数据包。
1.2 ZYNQ-7000的DMA控制器。DMA控制器使用一个AXI主接口, 在系统存储器和外设之间的数据传输。DMA控制器包含一个小的指令集, 它为制定的DMA控制器操作提供了一个灵活的方法。这比基于固定能力的链接列表项的DMA控制器来说, 提供了更大的灵活性。程序代码保存在系统存储器空间范围内, DMA控制器使用它的AXI主设备接口访问程序代码。DMA控制器能配置最多8个通道, 每个通道能支持一个单独并发的DMA操作线程。DMA控制器有一个DMA管理器, 用于初始化DMA通道线程。当一个DMA通道线程执行一个加载或者保存指令时, DMA控制器将指令添加到相关的读或写队列中。
在AXI总线上发布命令时, DMA控制器使用这些队列作为一个指令存储缓冲区。在一个DMA传输过程中, DMA控制器也包含一个多通道先进先出队列 (Multichannel First-inFirst-Out, MFIFO) 数据缓冲区, 用于保存读或写数据。对于一个程序, 它看上去好像是一个可变深度的FIFO集。每个通道都有一个FIFO集, 其限制是所有FIFO总的深度不能超过MFIFO的大小。
DMA控制器内部结构如图1所示, DMA控制器具有以下特性:1.DMA引擎处理器带有一个灵活的指令集, 用于DMA传输:1) 灵活地分散-聚集存储器传输;2) 充分地控制用于源和目的的寻址;3) 定义AXI交易属性;4) 管理字节流。支持8个缓存行, 每个缓存行是4个深度。2.支持8个并发的DMA通道:1) 允许并行执行多个线程;2) 发布命令, 最多8个读和8个写AXI交易。3.8个到PS中断控制器和PL的中断。4.在DMA引擎程序代码内的8个事件。5.用于数据缓冲的128字FIFO。在一个传输过程中控制器读或写MFIFO。6.安全性:1) 专门的APB从接口, 用于安全寄存器的访问;2) 将整个控制器配置为安全的或者不安全的。7.存储器-存储器的DMA传输。8.4个PL外设请求接口, 用于控制加入或者从PL逻辑输出的流。每个接口支持最多4个活动的请求。
二、设计与实现
ZYNQ-7000的DMA控制器提供了8个DMA通道, 每个通道有独立的寄存器组, 包括控制状态寄存器、源/目的地址寄存器、源/目的地址指针寄存器、源/目的地址掩码寄存器、传输长度寄存器、链表描述符指针寄存器。数据包的传输过程分为2个过程: (1) 从源地址指向的存储空间读取数据; (2) 将此数据写入目的地址指向的存储空间。每个通道的数据包传输过程是单个传输过程的重复, 当此过程的重复次数达到传输长度寄存器中的值后, 即完成了一个完整的DMA数据包传输过程。
此次设计所使用的编译软件是Xilinx SDK 2014.2, 所使用的硬件环境是Xilinx公司的ZYNQ 7020开发板。在Xilinx SDK 2014.2里面有已经封装好了的库函数, 直接调用库函数完成相关功能。ZYNQ-7000的DMA控制器的UART传输数据的设计主要包括两部分:串口的配置、DMA的配置。
2.1串口的配置。添加xuartps.h头文件, 函数名称命名为Uart_Config, 串口的配置流程:1) 初始化串口驱动:调用XUart Ps_Lookup Config、XUart Ps_Cfg Initialize库函数;将串口的波特率配置为115200bps, 数据位为8位, 停止位为1位, 校验位为无。2) 配置串口的选择模式:调用XUart Ps_Set Oper Mode库函数。将串口配置为普通模式。
2.2 DMA的配置.添加xdmaps.h头文件, 函数名称命名为Dma_Config, DMA的配置流程:
1) 初始化DMA驱动:调用XDma Ps_Lookup Config、XDma Ps_Cfg Initialize库函数;默认的情况下, 数据的配置为8位数据位, 1位停止位, 无校验位。2) 配置DMA的通道和DMA的缓冲描述符:配置DMA的通道的Src Burst Size、Src Burst Len、Src Inc、Dst Burst Size、Dst Burst Len、Dst Inc和DMA的缓冲描述符相关的源地址、目的地址、数据长度。Src数组作为DMA的源地址, 串口的FIFO地址作为DMA的目的地址。3) 启动DMA发送:调用XDma Ps_Start库函数。
得到的结果如图2所示:
2.3结论。程序中设置DMA传输的长度为20, 远小于DMA配置中寄存器的长度, 这样做保证了数据在传输的过程中不会溢出, 提高数据传输的准确性。为了能够与通过基于DMA控制UART传输数据进行对比, UART的配置不变, 采用传统的UART查询方式发送相同的数据, 得到的数据和图2完全一致。更改UART的波特率, 波特率范围为110bps~256000bps, 用传统的UART传输和用基于DMA控制UART传输, 得到的结果完全一致。试验结果表明, 与利用CPU进行数据传输方式相比, 基于DMA控制UART传输数据在保证UART终端能够得到正确的数据的情况下, 当传输的数据量大的时候, 减轻CPU的工作负担, 提高系统的执行效率。
三、结束语
本文就Xilinx新推出的Zynq-7000芯片的DMA控制器及UART做了简单的介绍, 通过Zynq-7000内部的DMA控制器实现UART发送数据。节省ARM Cortex™-A9 CPU的时间, 让CPU有时间去处理其他的事务, 提高效率。
摘要:ZYNQ-7000的直接存储器存取 (DMA) 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。在常规的UART串行数据通信的基础上, 结合Cortex?-A9微控制器中的DMA控制器的作用, 实现DMA控制的UART串口数据收发, 无须CPU干预, 数据通过DMA快速地移动, 节省CPU的资源来做其他操作。
关键词:ZYNQ-7000,DMA,UART
参考文献
[1]何宾编著.Xilinx All Programmable Zynq-7000 SoC设计指南[M].北京清华大学出版社, 2013.
DMA数据传输 篇5
两个处理器系统的数据通信方式可以采用网络通信方式或者总线连接通信方式等。网络通信的带宽约为1Gbps~4Gbps即128MB/s~512MB/s,在不同的工作条件下,网络带宽不同,网络信号存在不稳定性,这使得系统间建立的通信系统存在影响传输速率的不可控因素。PCI Express作为目前使用最流行的总线,广泛用于主机与外部设备间通信[1],16bit总线宽度的PCI Express2.0速率达到16GB/s(双工),远远超过了网络通信速率且不需要配置网络环境。
本文设计的传输系统应至少提供8路传输通道供转码设备与主机进行通信,然而在以PCIe接口芯片设计传输系统时,芯片中有限的DMA通道(一般为4路)难以满足转码设备多路实时转码的传输要求。因此,如何实现多路虚拟DMA通道[2]、传输速率满足要求且保证各通道传输速率均衡是软件设计的重点。在此之上,文中将进一步探讨如何降低传输系统对处理器系统CPU资源的占用率。
1 系统模型设计及系统通信机制
1.1 系统模型设计
数据传输系统软件模型可分为3个层次,包括设备驱动层、系统应用层和用户接口层。系统结构如图1所示。
薛巨峰,副教授/硕士,主研领域:自动化控制技术和加工工程自动化技术。黄爱娟,硕士生,研究方向:计算机应用技术。
由图1可知传输系统由设备驱动模块、DMA管理模块、系统通信模块、客户端通信模块和客户端API组成。
设备驱动程序用于在处理器系统中识别PCIe接口芯片设备;DMA管理模块(只在主机端存在)用于管理和分配处理器系统需要进行数据传输时对DMA通道的使用请求并完成数据传输功能;系统通信模块用于处理器系统间的消息传递;客户端通信模块负责响应客户端与传输系统的链接请求和数据传输请求;客户端API(Client_Register)是提供给用户进行链接和传输请求的函数接口。
1.2 系统通信机制
在主从机端分别运行传输系统应用程序(Plx_Server)完成传输系统的建立,Plx_Server等待客户端调用Client_Register进行链接请求。当主从机端的Plx_Server都有可配对的客户端链接请求,则为可配对客户端建立1路虚拟DMA传输通道。客户端使用Plx_Server为其分配的传输句柄(Client_Socket)即可实现数据收发和断开传输链接。
2 系统硬件设计
开发PCIe接口可以采用FPGA设计PCIe接口[3],但由于PCIe总线规范较复杂,这种开发方法难度很大;而采用专用PCIe接口芯片,可以免除繁琐的时序分析,缩短开发周期,降低开发成本。本系统选择后者,PCIe接口芯片选择为PLX公司开发的PEX8619接口芯片。
PCIe桥连接方式有2种:透明桥(Transparent Bridge)和非透明桥(Non-Transparent Bridge)[4]。总系统中存在两个独立的处理器,此时使用透明桥方式不利于整个系统的配置与管理,可能出现PCIe总线地址的映射冲突,此外不能使用PCIe透明桥连接两个PCIe Agent设备,如x86处理器。采用非透明桥可有效的解决这些问题,提高PCIe传输系统的可移植性。非透明桥不是PCIe总线定义的标准桥片,但是这类桥片在连接两个处理器系统中得到了广泛的应用[5]。
PEX8619支持NT桥功能,芯片在智能配置器模式下的软件模型如图2所示。
图2智能配置器软件模型图(参见右栏)
在图2中有两个用于设备识别的配置空间寄存器(CSR),离内部虚拟PCIe总线较近的称之为虚拟接口(Virtual Interface),离得较远的称之为链路接口(Link Interface)。
在智能配置器模式中,NT桥链路端口连接的是从机的地址域,从机系统只管理NT桥链路接口Type 0功能(NT设备功能)。NT桥虚拟端口连接的是主机的地址域,主机管理所有NT桥虚拟接口Type 0功能和Type 1功能(DMA引擎功能)。跨域传输是通过地址转换机制的路由来完成的。
3 系统软件设计
3.2 设备驱动程序
主从机端分别安装P L X公司提供的PLX_SDK_v7_11_Final设备驱动程序,从机端识别出NT桥的NT设备,主机端识别出NT桥的NT设备和DMA引擎。
3.3系统应用程序
P C I e传输系统P l x_S e r v e r与客户端A P I(Client_Register)是一对多的关系,传输系统最多允许128对客户端进行链接和数据传输,传输系统的函数关联图如图3所示。
3.2.1 系统初始化
系统初始化主要是对PCIe设备进行初始化配置和地址映射等工作。调用系统库函数PlxPci_Device Find找到NT设备和DMA设备(只在主机端有),并获得设备描述符。使用PlxPci_PciBarMap函数将NT Bar0、DMA Bar0(只在主机端有)和NT Bar2~NT Bar5映射到用户虚地址空间。使用PlxPci_PhysicalMap函数申请128个大小为4MB的物理内存并将其映射到用户虚地址空间作为DMA数据缓冲区使用。这些寄存器的作用如表1所示。
3.2.2 DMA管理模块
使用规定传输系统最多允许建立128对传输通道,而PEX8619芯片上只有4个DMA通道。面对128路虚拟传输通道和4路DMA物理通道的不匹配,系统中使用分时复用DMA通道的方法解决这一矛盾。
首先,分时复用要解决共享内存资源的分配,DMA数据缓冲区大小为128×4MB。为达到资源利用最大化及公平性,每一次虚拟传输通道的建立与断开都要为现存的每一路传输通道重新计算和分配DMA数据缓冲区。每一路传输通道可用于接收或发送数据的缓冲区大小计算公式为:128×4/channel_total×1/2,其中channel_total为总通道数。
其次,需要解决DMA通道的使用分配。在多线程机制下对DMA通道请求队列的管理有2种方案,队列管理方案如图4所示。
在方案一中,每个虚拟通道的线程把自己的DMA请求(DMA_Req)放入DMA请求队列(DAM_Queue)中,Queue_Read负责从队列中取出DMA请求。在此使用锁机制,将队列写操作作为临界区,在锁定的临界区只允许让一个线程访问,其它线程排队等待[6]。这样的方案设计简单易懂好管理,然而在实际的测试中,由于线程资源及调度是由操作系统来完成的,测试结果表明各个通道的DMA_Req并不能公平地写入队列,DMA物理通道并不能公平的服务于每一路虚拟通道,导致了各个通道间传输速率不均衡。
在方案二中,各个虚拟通道把自己的DMA_Req写入自己的DMA_Queue中,Queue_Read通过轮询的方式读取各个DMA_Queue的DMA请求,测试结果表明DMA物理通道资源能被公平的分配且请求处理效率更高。因此传输系统的DMA请求队列管理采用方案二实现。
3.2.3 系统通信模块
主机与从机两个处理器系统天然的分离特性,使得性能与正确性产生矛盾,如果两端的消息通信只是简单的发送/接收和处理,不能保证两端不同时使用同一资源。因此为传输系统规定了一个有顺序语义的通信机制如图5所示。
图5中黑色箭头表示的是程序的执行顺序,白色部分代表了对主机端消息的处理,黑色部分代表了对从机端消息的处理。主从机端皆有一个消息队列,所有需要发送的消息(msgQ)都先存入消息队列中,主机和从机端通过令牌机制来轮流向对方递送消息。如果一方消息队列为空,也需要让度令牌,使得对方能继续递送消息。以主机机端为例,其消息处理过程如下:(1)等待从机端发送让度令牌的消息Ack;(2)收到Ack后接收从机端的发送的消息Req;(3)对消息进行处理并且准备要发送给对方的Ack和从消息队列中取出msgQ(若消息队列为空,则填入NULL);(4)向对方发送Ack和msgQ。从机端的消息处理与主机端是一一对应的。
系统中使用NT桥的8个32位的MailBox寄存器来实现主从机的消息通信,MailBox寄存器是NT桥的链路端口和虚拟端口共有的,都可见可读可写。
令牌跳跃式的消息传递机制是否会成为整个传输系统提升传输速率的瓶颈,将在下文的实验测试中给出结论。
3.3.4 客户端通信模块
使用“Abstract”样式。为了提供一个简易通用的客户端接口,Plx_Server和Client_Register的进程间通信使用Socket实现。传输系统的主程序Plx_Server通过创建服务器(Server Socket)来向连接服务器的客户端(Client_Register)提供服务。服务包括了数据收发请求,连接建立/端开请求等。Plx_Server处理Client_Register连接请求的流程如图6所示。
在图6中客户端的连接注册、客户端配对和建立传输通道都是由主机端完成的,从机端的连接注册需要交付给主机端来完成。
3.3.5 客户端API
调用客户端API(Client_Register)完成连接配对请求后,Client_Register将返回一个Socket描述符。用户只需要参考标准Socket编程规范,即可使用Socket标准函数接口,比如read、write、close等进行数据通信[7]。
4 系统性能优化分析
为满足视频转码设备对数据传输性能的要求,传输系统除了要满足传输速率、速率均衡的要求外,CPU资源使用率也要作为考虑的因素。在测试中当处理器系统的CPU使用率超过50%后,传输系统的总带宽随之下降。为此,传输系统做了以下优化:(1)设置Plx_Server的CPU相关性[8],使进程同时关联多个CPU;(2)线程在等待或空闲时适当挂起以释放占用的CPU资源。
5 实验结果分析
本传输系统结合视频转码设备的使用做了大量的测试,首先测试传输系统数据传输带宽,测试结果如图7所示。实验结果表明了系统传输性能稳定,传输总带宽约为1100MB/s。随着传输通道数的增加,每一对正在传输的通道将重新公平分配资源,分配到的资源将减少,使得单路传输带宽将减小,但总带宽基本保持不变。
另外验证传输系统消息通信机制是否会成为限制传输速率的瓶颈。测试数据如表2所示。传输系统最少每秒可发送/接收一共1776个消息,完成一次传输(每次DMA传输可发送4MB大小数据)一共需要发送/接收5个消息,则经换算传输系统消息通信带宽为1776/5×4=2220MB/s,远远超过了传输系统数据传输总带宽,不会成为限制传输速率的瓶颈。
在处理器型号为Intel Core i5系列,双核4线程的主机上运行传输系统进程时,进程对主机CPU使用率低于20%,这使得主机在使用从机(视频转码设备)时还有足够的余力处理其它任务。
6 结语
本文基于PEX8619的PCIe接口芯片完成了跨PCIe NT桥的传输系统的设计,实现了双处理器间的多通道数据传输功能。经试验测试,传输系统总带宽达到1100MB/s,实时性好,性能优越且可移植性强,在需要高速传输系统的领域如视频实时转码等有很好的应用前景。
摘要:文章针对双处理器设备间的数据通信提出了基于PCIe非透明桥的高速传输系统的设计方法。该方法应用于视频转码设备,实验结果表明当转码设备作为外设与PC主机进行通信时,采用多路虚拟DMA方法的数据传输总带宽可以稳定的达到1100MB/s,为实现多路实时转码提供了前提保证。文中还重点介绍了虚拟DMA通道的实现、双系统间通信模型的设计及传输系统性能优化分析。
关键词:PCIe总线,DMA传输,非透明桥,虚拟通道
参考文献
[1]王齐.PCI Express体系结构导读[M].北京:机械工业出版社,2013.
[2]Abhay Bhargav.PCI Compliance:The Definitive Guide[M].America:Auerbach Publishers Inc,201
[3]Richard Blum,Christine Bresnahan.Linux命令行与shell脚本编程大全(第2版)[M].北京:人民邮电出版社,2012.
[4]Branden R.Williams,Dr.Anton Chuvakin.PCI Compliance,Third Edition:Understand and Implement Effective PCI Data Security Standard Compliance[M].America:Syngress,2012.
[5]甄国涌卫一然.基于PCI Express总线的数据传输卡设计[J].火力与指挥控制,2013(06):31-36.
[6]张晓敏,刘炜.基于PCI Express总线的接口模块设计与实现[J].航空计算技术,2014(05):17-22.
[7]Anonymous.FPGA evaluation platform in PCI Exprees from factor[J].Electronics Weekly,2013(2563):18-23.
DMA数据传输 篇6
动态可重 构高速串 行总线 (UM-BUS) 是一种利 用多通道 冗余方式 来实现总 线动态容 错功能的 新型总线[1]。
为了验证UM-BUS总线在传 输速率 、 带宽灵活 性 、 动态容错 能力以及 故障隔离 能力等方 面的优势[2], 本文提出UM-BUS总线测试 系统 。 实现测试 系统功能 的基础是 采集总线 上传输的 数据包 ,UM-BUS测试系统 中的数据 采集模块 首先将采 集到的总 线数据缓 存到SDRAM存储器中 ,再将数据 传输到PC进行分析 和处理 。
本文采用PCIe总线实现 数据采集 模块与PC之间的通 信 , 在研究PCIe总线协议 和端点核 (PCIe Endpoint Block ) 的基础上 , 使用VIRTEX5系列XC5VLX85T芯片实现 了PICe接口硬件 电路 , 设计了基 于FPGA的PCIe总线直接 内存存取 (Direct Memory Access ,DMA) 数据传输 方案 。 该方案不 仅实现了 数据从PC内存通过PCIe总线传输 至SDRAM内存芯片 中存储 ,同时能够 将SDRAM芯片中存 储的数据 读出 , 并通过PCIe总线接口 将数据传 输回PC内存显示 。
1研究背景
1.1UM-BUS总线介绍
如图1所示 ,UM-BUS采用一种 多线路并 发冗余的 总线型拓 扑结构 , 它最多可 使用32条通道并 发进行数据传输 ,能够对31个通道的 故障进行 动态容错[2]。
1.2UM-BUS测试系统简介
UM - BUS总线的测 试系统主 要实现3个功能 : 无过滤监 听总线通 信过程 、 故障注入 以及总线 状态分析[3]。 实现PC对UM -BUS总线上传 输数据包 的接收和 处理功能 是实现总 线测试功 能的基础 。
为了让PC及时分析 和处理测 试系统采 集到总线 数据 , 本文采用PCIe2.0技术完成UM-BUS测试系统 中数据与PC之间的传 输 。
2基于PCIe的DMA传输方案设计
本方案设 计中 ,FPGA是最关键 部分 。 它主要包 括测试系 统中数据 的采集模 块 、SDRAM控制时序 模块 、 用于在硬 核的用户 接口和传 输接口实 现PCIe时序逻辑 的PCIe的控制模 块 。 图2是基于PCIe的数据传 输系统结 构图 ,其中宽箭 头指向的 模块是本 文设计的 数据传输 系统中重 点设计的 模块 。
UM - BUS测试系统 将采集到 的总线数 据缓存在SDRAM存储器中 。 PCIe控制模块 根据PC发出的数 据传输请 求 , 将SDRAM中存储的 总线数据 传输到PC上 ; PCIe控制模块 也可以根 据PC发出的数 据传输请 求 , 将数据从PC内存通过PCIe接口向下 传输到FPGA内部 , 并通过FPGA内部的SDRAM控制逻辑 将数据传 输到的SDRAM内存芯片 中存储 。
本文利用Xilinx官网提供 的IP核来实现 基于PCIe总线的DMA数据传输 方式设计 。 图3是IP核的功能 框图及各个 接口[4]。
各个接口 的功能 : 用户逻辑 接口用于 与PCIe的IP核通信 ;配置接口 实现主机 对IP核的配置 ;物理层接 口用于与 根复合体 或桥连接 ;系统接口 含有时钟 信号和系 统复位信 号 。
本文应用PCIe2.0技术 , 实现UM-BUS总线测试 系统与PC之间的通 信 ,通过编写PCIe用户逻辑 接口程序 实现PCIe的数据传 输功能 。
3硬件设计方案
本文在FPGA中设计了PCIe的控制模 块和SDRAM控制模块 。 PCIe的控制模 块有PCIe读写时序 控制 、 对SDRAM控制器的 控制 。 SDRAM控制模块 是一个双 口SDRAM控制器 , 它的左口 逻辑作为PCIe总线的DMA写传输时 数据的读 出口 , 右口逻辑 作为PCIe总线的DMA读传输时 数据的写 入口 。 本设计的 硬件部分 主要有PCIe的控制模 块和SDRAM控制模块 。 下面主要 介绍这两 个模块的 设计 。
3.1PCIe的控制模块设计
本设计中 的PCIe总线接口 卡含有一 片XC5VLX85T芯片 , 使用该FPGA实现PCIe总线数据 传输的时 序逻辑 , 图4为总线接 口卡FPGA的程序结 构框图及 用户逻辑结构图[5]。
XC5VLX85T芯片内嵌 的PCIe IP核为Endpoint Block plus for PCI Express , 实现了PCIe总线的基 本协议功 能 。
为了实现PCIe的数据传 输功能 ,主要是要 进行用户 逻辑的设 计 。 用户逻辑 与PCIe的事务层 接口直接 连接 , 可发送或 接收事务 层数据包 , 用以实现BAR0空间的访 问功能和DMA读写功能[6]。 下面将分 存储器读 写两个操 作以及DMA数据传输 方式的实 现来说明PCIe用户逻辑 的设计 。
3.1.1Burst存储器写操作的设计与实现
对于存储 器写请求 ,实现的主 要方法是 数据接收 控制器EP_RX将接收到 的TLP包头中各 个字段进 行正确解 析 ,并区分是 单字写还 是Burst写请求 ,以及确定 写操作的 数据长度 。 如果是单 字写请求 , 就将TLP包中的64 bit数据存入 寄存器中 ; 如果是Burst写请求 , 就将TLP包中的有 效数据载 荷区的数 据按照64 bit写入双口 缓冲区 , 每过一个 时钟周期 地址自动 增加 , 直到数据 全部存入 到双口缓 冲区 ,一次Burst写操作完 成 。
3.1.2Burst存储器读操作的设计与实现
对于存储 器读请求 , 实现的主 要方法是 数据接收 控制器EP_RX将接收到 的TLP包头中各 个字段进 行正确解 析 , 并将请求 数据的起 始地址和 数据长度 发送给数 据发送控 制器EP_TX , 然后启动EP_TX发送完成 数据 。
3.1.3DMA功能的实现
本文采用DMA的方式用 于FPGA外部存储 器SDRAM与系统内 存之间的 数据传输 。 采用DMA方式访问 外部存储 器的最大 优势是CPU配置完DMA状态机后 可继续执 行其他指 令操作 。 DMA状态机通 过请求PCIe总线中断 完成数据 传输 。
本设计中DMA写传输的 数据包格 式是存储 器写请求TLP,DMA读传输的 数据包格 式是存储 器读请求TLP与存储器 读完成TLP[7]。
下面以DMA写为例说 明DMA的设计 。 PCIe的DMA写数据传 输方式主 要是将TLP包头中的 各个字段 进行正确 填充 , 并将数据 按照64 bit并行放在TLP的包头 , 然后传输 给PCIe IP硬核 ,最后硬核 以PCIe总线协议 串行传输 给PC。 DMA写数据传 输的状态 机转换图 如图5所示 。
DMA在进行数 据传输时 , 传输一次TLP包的最大 载荷为128 B, 图5中当M=128时 , 表明包的 一次传输 结束 。 此时判断 当前传输 的字节数 与DMA所要传输 的字节数 是否相等 , 如果不相 等则继续 传输 , 直至所有 数据传输 完毕 ,DMA传输结束 。
3.2高速缓存SDRAM控制模块设计
高速缓存SDRAM控制模块 主要实现SDRAM控制器的 功能 ,进而实现 对系统中 的高速数 据进行缓 存的功能 。 SDRAM控制器直 接控制SDRAM存储器进 行数据的 读取 。 为了提高 整个测试 系统的可 靠性和高 速性 ,本文使用 的SDRAM控制器采 用猝发式 数据读写 模式 , 可以高速 实时地向SDRAM读写数据 。
由于PCIe IP核传输的 数据是64 bit, 而测试系 统中SDRAM存储器对 数据位宽 要求是32 bit , 因此要完 成对数据 位宽的匹 配 。 在进行数 据位宽匹 配时 ,一定要兼 顾到PCIe数据传输 的时序逻 辑 。 本文采用 异步FIFO来实现数 据位宽的 匹配 。 由于数据 传输时采 用DMA的方式 , 所以在进 行DMA读写操作 时都需要 异步FIFO来完成数 据匹配功 能 。 图6为在进行DMA写操作时PCIe和SDRAM存储器进 行数据位 宽匹配的 状态机 , 图7为在进行DMA读操作时PCIe和SDRAM存储器进 行数据位 宽匹配的 状态机 。
4结果与验证
本文设置 使用PCIe的x1通道 , 经过测试 软件多次 测试 , 从PC经过PCIe总线存储 到SDRAM存储器的 数据正确 ,满足PCIe总线传输 数据的时 序要求 , 同时满足SDRAM存储器的 数据读写 时序要求 。 DMA数据传输 操作正确,且速度可稳定达到200 MB/s以上 ,满足UM-BUS总线对测 试系统数 据传输速 率的要求 。
经过多次 测试 ,发现传输 速率与传 输数据包 的大小 ( size ) 以及包的 个数 ( tlp ) 有关 。 设定数据 包的大小 为32个双字 , 当数据包 的大小和 包的个数 越多时 , 数据的传 输速率呈 现下降趋 势 。 图8为DMA写操作传 输数据包 的大小 (size)为固定值32个双字的 传输速率 图 。
5结束语
本文实现 的基于PCIe总线DMA方式的数 据传输系 统可以完 成上位机 与SDRAM存储器通 过PCIe总线以DMA的方式进 行数据传 输的功能 。
本文的设 计方法釆 用内嵌在FPGA的PCIe IP核 ,降低了硬 件设计复 杂度 。 实际工程 应用表明 该PCIe接口达到 了较高的 数据传输 速率 , 满足UM-BUS总线测试 系统对高 速数据传 输的需求 。
摘要:动态可重构高速串行总线(UM-BUS)是一种利用多通道并发冗余的方式来实现总线动态容错的高速串行总线。它的测试系统可以实现对总线的通信过程进行监测、存储与分析。由于测试系统需要在数据采集终端与PC之间建立高带宽的通信通道,设计了UM-BUS总线测试系统的PCIe2.0 x1通道的应用方案,设计并实现了基于FPGA的PCIe总线DMA数据传输方案。实验测试结果表明,实际传输速度可以稳定达到200 MB/s以上,完全满足总线测试系统中对数据传输速率的要求。
DMA数据传输 篇7
1. 1 硬件系统设计
基于PCIe总线接口的高速数据传输系统分为发送板与接收板两块PCB板,其在硬件上由相同的模块组成:主要由FPGA芯片,DDR3 内存条模块以及GTX高速差分收发器、时钟芯片与电源芯片组成,如图1 所示。
1. 2 FPGA系统逻辑设计
本设计中的FPGA逻辑设计分为两部分,分别是在发送板中的发送系统逻辑与接收板中的接收系统逻辑,如图2 所示。
发送系统逻辑的主要功能为:当计算机主机将待发送数据放入计算机内存后发起DMA传输。接收系统逻辑的主要功能为:由GTX模块将远端发送板的数据接收到DDR中,最后DMA控制器将DDR中的数据以PCIe报文的形式发送至系统主机内存中。
2 PCIe总线接口实现与DMA控制器设计
2. 1 PCIe协议
(1)PCIe分层结构
PCIe规范定义了分层的协议架构。整个PCIe协议由事务层、数据链路层和物理层组成。每一层都被分为发送部分和接收部分,发送部分处理待发送报文数据,接收部分处理已接收报文数据。如图3 所示。
(2)PCIe地址空间与事务报文
在系统初始化时,系统主机通过访问PCIe设备的配置空间来识别和配置PCIe设备的工作参数。在PCIe协议中,访问不同的地址空间需要不同的报文来完成。报文种类有:存储器读、写报文,IO读、写报文,配置读、写报文,完成报文等。
(3)PCIe中断与事务序
本设计中的PCIe设备使用MSI中断方式,该方式通过对系统主机的特定地址发起写指定数据的存储器写事务来实现中断请求。
2. 2 PCIe协议接口实现
PCIe接口的实现使用了Xilinx公司的FPGA内部提供的知识产权核,设计者只需根据设计需求设置核参数即可实现PCIe接口协议。该IP核实现了PCIe协议中事务层以下的所有功能,设计者只需实现数据报文的拆包组包即可。
(1)PCIe硬核调用
Xilinx公司FPGA采用ISE集成开发环境进行系统开发,其中IP核的例化采用开发环境中的Core Generator模组进行参数设置。
(2)PCIe硬核的AXI接口分析
PCIe IP核的接口上采用了AXI接口,本系统设计中的IP核使用AXI接口发送和接收总线分离,可以实现全双工通信模式;发送和接收事务层报文的时序如图4 所示。
2. 3 DMA控制器逻辑设计
本设计中的DMA控制器逻辑设计主要完成了以PCIe板卡设备做为Bus Master主动发起DMA读写事务的功能;整个DMA控制器主要由发送引擎、接收引擎、中断控制、DMA控制状态寄存器、乱序报文与Tag管理模块组成;其模块组成的整体结构如图5 所示。
(1)DMA控制状态寄存器设计
DMA控制状态寄存器映射在PCIe设备的BAR0 空间中,偏移地址为0x00 至0x3f。系统主机在初始化PCIe板卡设备时,给BAR0 空间分配基地址。在本设计中,DMA写操作的数据传输方向为从PCIe板卡到系统主机内存。DMA读写流程如图6所示。
(2)发送引擎与接收引擎设计
在DMA控制器中,发送引擎的主要任务是根据DMA控制状态寄存器的DMA读写状态或根据接收引擎由完成报文的请求来发送报文至PCIe硬核,发送和接收引擎状态机如图7 所示。
发送引擎中,Tstate_0 为系统上电的初始状态;当设备初始化完成后,状态机自动跳进Tstate_1。
在发送引擎的实现中为了在做DMA传输过程中不阻塞主机通过BAR0 空间读、写DMA控制状态寄存器或映射于BAR0 空间的PCIe配置信息,设计中使用了round - robin机制。在该机制下每发送4个DMA事务报文时,查询一次读完成请求信号。若该信号有效则优先发送读完成报文。
接收引擎中,Rstate_0 为系统上电复位后的初始状态,当PCIe设备链路初始化完成后状态机自动进入Rstate_1 状态;在该状态下若接收到事务报文则根据报文包头译码确定报文种类。
PCIe中断实现:
Virtex - 6 系列FPGA中的PCIe IP核提供了Legacy模式和MSI模式两种中断模式,本设计中的读写中断采用MSI中断方式。本系统中DMA写完成中断的向量号为5’h00,DMA读完成中断的向量号为5’h01。
3 系统验证与测试
本节重点进行DDR3 模块和DMA控制器模块的读写测试以及本设计的整体性能测试。本设计中的硬件平台结构如图8 所示,其中PCIe板卡即为本方案中设计的板卡。
3. 1 DMA控制器接口性能测试
(1)DMA读写测试验证
①DMA写测试验证
DMA写事务的工作任务是将从DDR3 中读取的数据通过PCIe硬核以DMA方式传输到系统内存上。在测试时,建立一个测试模块,在合适的时刻向DMA控制器发送递增码。图9( a) 中显示的是DMA写数据波形的初始波形。在系统上位机发起DMA写事务后执行以下操作。如图中标号1 所指示位置。DMA控制器中的接收引擎将接收到系统主机向PCIe设备的BAR0 空间发起的存储器写事务。此事务是为了设置DMA传输的写目的地址,DMA传输长度等DMA工作参数。如图中标号2 所指示位置。在完成DMA工作参数的设置后,dma_wr_start信号变为有效,随后发送殷勤引擎开始发送数据为递增码的报文至系统主机。
②DMA读测试验证
DMA读事务的工作任务是在系统内存中指定地址的位置读取指定大小的数据到PCIe设备上。该事务是由通过PCIe设备向系统主机发起存储器读事务来实现的。在DMA传输开始前,系统主机将准备好的递增码数据放到对应的系统内存中,等待DMA传输时读取该段数据。图9(b)中显示的是DMA读数据波形的初始波形。如图中标号1 所指示,系统主机将向PCIe设备的BAR0 空间发起几次写数据事务,图中标号2 所指,在完成DMA工作参数的设置后,发送引擎向系统主机发起DMA读请求事务。图中标号3 所指,在DMA控制器的发送引擎发送存储器读报文请求至系统主机后,接收引擎将接收到来自系统主机的存储器读完成报文,该报文携带了数据信息。
(2)PCIe中断测试验证
在完成DMA读写事务时,DMA控制器根据中断屏蔽状态决定是否发起MSI中断。当系统主机接收到来自PCIe设备发起的中断后将处理DMA传输结果。本设计中使用的中断方式以及波形图如图9( c) 和图9( d) 所示。
3. 2 系统整体性能测试
(1)发送板性能测试
发送控制板将系统内存中的递增码,通过PCIe接口以DMA方式将数据转移到发送板上的DDR3SDRAM中,最后通过4 路GTX模块将数据串行发送出去。发送板的上位机截图如图9(e)所示。
(2)接收板性能测试
PCIe接收板通过四路GTX接收数据,之后将其存入接收板中的DDR3 内存条中,最后通过PCIe接口以DMA方式将数据写入到系统主机的内存中。接收板的上位机截图如图9(f)所示。
4 结束语
本文提出了一种基于PCIe总线的高速数据收发板卡的实现方案,本方案的硬件是以FPGA为控制中心实现基于PCIe总线的DMA高速数据传输。在传输过程中处理器无需干预数据传输,仅由PCIe板卡设备作为总线事务发起者发起数据传输事务,完成数据传输;以DDR3 内存条作为外部高速大容量缓存,其存储容量达到1GB,线速度达到800MHz,在设计内部将DDR3 内存条接口封装为虚拟FIFO,实现了操作简易的高速大容量缓存;以4 路GTX高速差分收发器作为收发接口实现发送板与接收板之间的数据传递。
参考文献
[1]黄寅.高速数据存储系统的设计与应用[D].武汉:华中科技大学硕士论文,2009.
[2]Raviv Budruk.PCI Express System Architecture[M].Don Anderson,Tom Shanley.USA:MINDSHARE,2003:10-11.
[3]崔炳喆.基于PCIE总线的多DSP系统接口设计和驱动开发[J].电子设计工程,2012(9):89-91.
[4]夏玉立,雷宏,黄瑶.用Xilinx FPGA实现DDR SDRAM控制器[J].微计算机信息,2007(26):209-211.
[5]潘一飞,余海.基于FPGA的DDR3用户接口设计[J].电子科技,2013(15):9-11.
[6]王齐.PCI Express体系结构导读[M].北京:机械工业出版社,2010:101-102.
[7]何宾.Xilinx可编程逻辑器件设计技术详解[M].北京:清华大学出版社,2010:12-13.