×
嵌入式开发 > 详情

利用WinDriver实现链式DMA

发布时间:2020-07-13 发布时间:
|

摘要:PCI Express协议由于其高速串行、系统拓扑简单等特点被广泛用于各种领域。Altera公司的Arria II GX FPGA内集成了支持链式DMA传输功能的PCI Express硬核,适应了PCI Express总线高速度的要求。文中利用Jungo公司的WinDriver软件实现了链式DMA的上层应用设计。首先给出了链式DMA实现的基本过程,接着分析了链式DMA数据传输需要处理的几个问题,给出了相应的解决办法和策略。采用这些方法,保证了DAM数据传输的正确性,简化了底层FPGA应用逻辑的设计。
关键词:链式DMA;WinDriver;PCI Express;端点存储器

在计算机与外设的通讯过程中,DMA方式,即DirectMemory access(直接内存访问),由于无需计算机CPU的干预就可以在内存和外设之间传输数据,是一种高效的数据交换方式。因为对于高速的设备,如PCI Express接口的板卡设备,如果采用普通方式在存储器和外设之间传输大量的数据将占用太多的CPU时间,严重影响系统的性能。而使用DMA方式则使传输数据的操作中CPU的涉及减小到最少。
要实现DMA的传输功能,在底层需要硬件本身具有这样的功能模块,即外设硬件可以主动发起数据传输。在上层则需要驱动与应用接口的配合。
文中给出如下的一种DMA传输方式的实现。硬件外设是基于Altera公司PCI Express硬核的FPGA加密卡,其与主机的接口采用是PCI Expre ss接口。上层则采用了Jungo公司的WinDriver软件提供的驱动和API接口。

1 链式DMA
PCI Express是用来互联诸如计算机和通信平台应用中外围设备的第三代高性能I/O总线。与原有的PCI并行总线相比,它没有大量的数据和控制线,对于硬件电路设计者来说,省去了很多硬件设计工作。PCI Express的传输速度远远大于PCI总线,PCI Express 1.1版本单个链路的单向吞吐量能达到250 MB/s。对于需要与主机进行大容量传输的系统来说,该总线标准的优势是非常明显的。Altera公司的Arria IICX系列器件内建PCI Express硬核,无需PHY和IP核,有利于节约FPGA资源,简化了PCI Express的接口设计。同时在用Quartus II软件生成的基于PCI Express硬核的样本工程中,集成了对DMA的支持功能,为进一步的硬件产品开发提供了基础。
实际应用中,DMA的传输方式可分为两种:简单DMA和链式DMA。简单DMA只需要主机告诉设备要传输数据的主机地址、设备地址和传输数据的长度,然后启动DMA传输即可。但简单DMA每进行一次传输,都要进行上面的设置,效率较低。
在用Quartus II软件的MegaWizard。Plug-In Manager工具生成的基于PCI Express硬核的样本工程中,实现了一个32 KB的带有字节写使能控制的双端口RAM的端点存储器,其读写数据总线宽度均为128位;并且实现了链式DMA的传输功能。这是一种效率远远高于简单DMA的传输方式,它只需要1次启动操作,就可以完成多次DMA传输。具体实现的方法是:在主机端,需要开辟一块内存区域,用来存储描述符表。所谓描述符表,是用来描述在主机与外设之间数据传输有关的地址与长度信息的,它由一个表头和多个描述符组成,其中每一个描述符对应一次DMA操作。用户根据自己的需求填写该描述符表,如下表所示。


在上表中,偏移地址是指到描述符表内存区域开始处的字节偏移地址。DMA长度用来设置本描述符对应的DMA传输的长度,是以32位双字为单位的。主机地址用来指示数据在主机端存放的位置。设备地址用来指示数据在设备的端点存储器中存放的位置。控制域用来控制在该描述符传输完成时设备是否更新描述符头的EPLAST域。





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
django是什么_django能做什么