您当前的位置:五五电子网电子知识电子知识资料计算机应用利用WinDriver实现链式DMA 正文
利用WinDriver实现链式DMA

利用WinDriver实现链式DMA

点击数:7304 次   录入时间:03-04 11:40:08   整理:http://www.55dianzi.com   计算机应用

内容摘要: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操作。用户根据自己的需求填写该描述符表,如下表所示。

a.JPG


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



www.55dianzi.com
    使用链式DMA传输数据时,主机首先通过设置DMA控制寄存器,告诉设备要传输数据的描述符表的起始地址和描述符的个数,然后启动DMA传输。设备收到启动DMA传输的命令后,首先根据主机提供的描述符表信息,检索相应的描述符,并存储到设备的FIFO中,然后根据每一个描述符中的地址和长度信息,进行相应的DMA数据传输。所有的DMA描述符处理完成后,设备更新描述符头的EPLAST域。主机便可通过查询EPLA ST域获得链式DMA传输完成的信息,从而可以启动下一次链式DMA传输。

2 WinDrivet中的DMA功能
    WinDriver是Jungo公司提供的一种通用的驱动开发支持软件,它简化了用户的上层驱动开发和应用接口开发,而且易于再封装,实现商业化应用。该软件提供了对PCIExpress接口设备的驱动支持,而且也提供了对DMA实现功能的支持。
    WinDriver提供了两种DMA缓冲区的分配方式,即连续缓冲区和分散/聚合缓冲区。前者当用户申请缓冲区时,分配的是一个物理地址连续的内存块;而后者分配的缓冲区在物理位置上可以是分段的,这些物理上不连续的内存段通过虚拟地址空间映射给用户的是一个在应用层连续的缓冲区。
    由于采用DMA传输数据时,设备需要的主机地址是物理地址;而在主机端,申请大块的物理地址连续的内存区域往往是非常困难的。因此在使用DMA进行大量数据传输时,主机端使用分散/聚合缓冲区分配方式更方便和易于实现。此时,主机可以将缓冲区的每个内存段对应一个描述符,这样采用链式DMA方式可以解决大的内存区域物理地址不连续的问题,方便了大存储区域数据的传输。

3 具体实现
    
在具体实现时,主机是通过访问的设备的BAR2地址空间来设置DMA控制寄存器的。DMA控制寄存器分为DMA读控制寄存器和DMA写控制寄存器,它们均是由4个32位的双字组成,依次表示的含义是:控制域和描述表中描述符的个数、描述符表的高32位地址、描述符表的低32位地址、最后一个描述符的索引,其中第一个双字的控制域部分用来控制在每个描述符传输完成时设备是否更新主机描述符头的EPLAST域。DMA写(即数据由设备向主机传送)控制寄存器的开始地址位于BAR2地址空间的0字节偏移地址处,DMA读(即数据由主机向设备传送)控制寄存器的开始地址位于BAR2地址空间的16字节偏移地址处。主机可以通过调用WinDriver提供的API函数WDC_WriteAddr32每次设置DMA读/写控制寄存器的一个双字。
    在每次DMA传输开始时,根据设备DMA的设计要求,必须先调用WDC_WriteAddr32函数向DMA读/写控制寄存器的第一个双字写入0xFFFF的内容,以使设备DMA进入到可以工作的状态。这是因为设备每次执行完DMA操作后,处于停止工作状态,只有通过对控制寄存器的第一个双字写0xFFFF才能使设备DMA模块退出停止状态,重新准备检索DMA描述符。详见样本工程的ahpcierd_dma_descriptor模块的状态机部分。
    需要注意的是,描述表的描述符中的主机低32位地址必须是16的倍数,设备地址也必须是16的倍数。这是因为设备的端点存储器是一个带有字节写使能控制的RAM,且其每个周期读写16个字节的数据。对于DMA读操作来说,设备收到主机的带数据的完成包后,是根据主机端的地址设置端点存储器的字节写使能控制信号的。如果主机端地址的低4位与设备端地址的低4位不一致,将导致数据起始存储位置不正确。例如:如果主机端地址的低4位是8,设备端地址的低4位是0,端点存储器写的数据总线接收数据的第一有效时钟周期内接收的16字节数据,低8字节对应的字节使能位是0,高8个字节才是有效的数据。这些有效数据被写入端点存储器规定存储位置向后偏移8个字节的地方,这显然与设备要求的存储位置不符。
    对于DMA写操作来说,设备从端点存储器中读取数据时,直接将设备地址的低4位丢弃了,所以设备地址也应为16的倍数。如果主机端地址低32位不是16的倍数,根据设备的Descriptor/Data Interface处理规则和PCI Express规范中存储器写事务包的处理规则,将导致主机收到的数据包的有效数据位置向后偏移,部分有效数据丢失,例如:如果主机端低32位地址的低4位是8,那么将使得从端点存储器读取的数据的前8个字节丢失,主机端收到的数据的开始位置比预期位置向后移了8个字节。
    在设置主机的描述表时,先调用WinDriver提供的API函数WDC_DMASGBufLOCk对申请的进行DMA数据传输的内存块进行锁定,然后根据锁定的页数,确定描述表中描述符的个数,每个描述符对应其中的1页存储区域。根据上面对主机低32位地址的要求,在申请进行DMA传输的内存区域时,申请的空间大小可以比实际需要存储区域多16个字节。这样,在调用WDC_DMASGBufLock函数对申请的内存块进行锁定后,如果第一页的物理地址不是16的倍数(在多页的情况下,后面的页的物理地址均为16的倍数),可以DMA传输的实际区域向后移动相应的位置,以使数据存储的开始位置的物理地址为16的倍数。例如,如果第1页物理地址的低4位是4,那么可以向后移动12个字节作为DMA传输的开始位置。如果申请的空间由多页组成,应注意第1页对应的描述符传输数据的长度将减少,及对后面页对应描述符的设备地址的影响。

[1] [2]  下一页


本文关键字:暂无联系方式计算机应用电子知识资料 - 计算机应用