搜索
您的当前位置:首页正文

基于PCI总线的DMA高速数据传输系统

来源:尚车旅游网
维普资讯 http://www.cqvip.com

第36卷第5期 2007年l0月 电子科技大学学报 Journal ofUniversity ofElectronic Science and Technology ofChina V_01.36 No.5 Oct.2007 基于PCI总线 ̄ICJDMA高速数据传输系统 颜建峰,吴宁 (南京航空航天大学信息科学与技术学院南京210016) 【摘要】提出了基于PCI总线接口技术实现DMA数据传输系统的通用设计方法.该方法应用于雷达接收机综合测试仪, 当雷达接收机工作时,采用DMA方式的数据传输速率可以稳定地达到70 MB/s,能够有效地采集并保存雷达各种参数,供主 机快速进行雷达故障分析与判断.还重点介绍了数据传输系统中基于PCI总线的接口电路设计及基于WDM的PCIDMA驱动程 序的开发. 关键词中图分类号DMA传输;PCI总线接口:PC19054 ̄口芯片;、ⅣDM驱动程序 TP3l】 文献标识码A High Speed DMA Data Transfer System Based on PCI Bus YAN Jian-feng,WUNing (CollegeofInformationScience andTechnology,N肌jingUniversityofAeronautisacndAstronautics Nanjing 210016) Abstract This paper describes tIle procedure of designing Direct Memory Access(DMA)data transfer system based on Peripheral Component(PCI)bus interface technology.The system iS applied to tIle test nistrument for ladar receiver.When tIle ladar receiver working.tIle PCI ntierface card based on DM_A data ratnsfer ystsem Can achieve 70 MB/s rtnsafer rates,collect nd asave tIle parameter of ladar effectively,and offer tIle data for computer to analyse rapidly.We emphasize tIle desin of ghardware circuit based on PCI bus interface technology and tIle development of PCI DMA driver program based on Windows Driver Model(WDM). Key words DMA ratnsfer;PCI bus nteriface;PCI9054 interface chip;WDM driver PCI总线标准经过几年的发展,已经替代ISA、 MAC等总线成为PC机主流总线标准。相对于ISA总 要实现的功能来考虑[21。(1)PCI总线的命令译码。 接口电路对C/BE[3:0]和IDSEL总线信号进行译码, 以确定来自主机的PCI命令是I/O访问还是存储器访 线的8 MHz工作频率,其33 Hz(最高可支持66 Hz)的 总线工作频率在总线宽度为32位时,传输速率为 132 MB/s(或264 MB/s,对应64位总线宽度)[11。在一 问,并产生相应的控制信号。(2)地址产生电路。在 PCI突发传输方式中包含一个地址周期和若干个数 据周期,因此PCI接口电路必须能向前端的数据采集 电路提供连续的地址。(3)控制信号产生。PCI总线 的数据传输基本上由F 6 正}f、IRDY#、TRDY#、 DEVSE 四个总线信号控制,因此,PCI接口电路 必须产生这些控制信号。(4)DMA控制器的功能。 在DMA传输时,接口电路必须能够实现DMA。综合 以上四个方面,设计中选用PLX公司的PCI9054作为 接口芯片,能够完全实现PCI总线控制器以及DMA 控制器的功能。基于PCI接口电路的数据传输系统原 定意义上可以认为,PCI总线标准解决了高性能的 CPU处理能力和低效的系统结构之间的瓶颈问题。 在高速数据采集与传输应用系统中,可以通过PCI 桥接芯片实现DMA数据传输,完成主机与外部设备 间的高速数据交换。本文介绍基于PCI总线接口技术 的DMA数据传输系统的一种通用设计方法。 1 基于PCI总线接口技术的DMA传输 系统 设计基于PCI总线接口技术的DMA传输系统, 需要解决的主要问题是基于PCI总线的接口电路的 设计,以及在Windows操作系统下的DMA驱动程序 的开发。 一理框图如图l所示【jJ。 系统中,存储模块用于采集数据的缓存;控制 模块实现对存储模块的读写控制;EEPROM存储PCI 接口模块的配置信息。 配置信息是PC机识别接口设备并分配相应资 般来说,一个PCI接口电路的设计主要围绕需 收稿日期:2005—09—14 作者简介:颜建峰(1977一).男。硕士生.主要从事数字系统设计与计算机应用方面的研究. 维普资讯 http://www.cqvip.com 第5期 颜建峰等:基于PCI总线的 ! 蕉 塑 墨 源的依据,如果配置不当,会引起计算机不能正常 启动。在本文系统中,当主机启动时,EEPROM完 成对PCI90541 ̄部的PCI总线配置寄存器和局部总线 (Local 13us)iEW ̄存器的初始化。局部总线配置寄 存器主要实现局部地址资源的分配,即局部总线端 映射 ̄lJPCI端的地址,包括存储器空间与I/OS ̄Nt4j。 lI控制模块}l地:: 址 I 存储模块lI l 数据总线 I地址总线 ,控制总线t 峰 局PC部回 I 图1 DMA传输系统硬件框图 PCI9054有PCI BARO~PCI BAR5六个基址寄 存器【5】。其中PCI BAR0和PCI BAR1用来访问 PCI9054 Locla端配置寄存器的基地址,BAR0映射到 内存,BAR1映射I,O空间的基地址,就可以以内存 方式或I/O的方式访问PCI9054 Local端配置寄存器。 BAR2 ̄BAR3提供访问Locla端的芯片,其他的保留 不用。在本文系统设计中,BAR2映射NLOcla端的 “O地址空间”,使用内存映射方式。当Local端内存 基地址为0x20000000,且大小为1 M时,配置 LASOBA为0x20000000、LASORR为0xFFF00000。 2 DMA数据传输系统中各个模块的 设计 2.1 PCI接口模块 PCI接口模块由PCI9054来实现。PCI9054是一个 32位33 ̄/H-Iz总线主控gown速器,它是当今最先进的 通用总线主控设备,能完美地实施PCI 2.2版规范的 要求,可获得高达132Ⅷ/s的突发传输速度。 PCI9054提供PCI总线、E2PROM总线和Locla总线三 个接口。Local总线有J、M和C--种工作模式。本文 系统里将Locla总线设置为C模式。 PCI9054作为桥接芯片,在PCI总线和Locla总线 之间有PCI Initiator(PCI起始器)、PCI Target(目标数 据传输模式)和DMA传输模式三种数据传输模式。 PCI Initiator传输模式支持局部总线直接访问 PCI总线的存储空间和I/O空间,而PCI Target模式则 支持PCI总线主设备通过9054访问局部总线的存储 空间和I,O空间l6J。当设定PCI9054为PCI Target模式 时,支持三个PCI to Local地址空间。任何PCI总线的 主设备可以以可编程的等待状态、总线宽度和突发 传输功能访问PcI9o54的三个Local空间。 PCI9054有两个相互独立的DMA传输通道,通 道0和通道1都支持从PCI to Local或Local to PCI的 DMA数据传输。两个通道都具备块传输和分散 集中 传输模式,通道0还支持请求模式的DMA传输。在 DMA方式传输时,PCI9054对于PCI和Local两总线来 说都是主控设备。DMA传输前,必须设置主控设备使 能位(PCICR[2])使PCI9O54成为PCI总线的主设备。 分散/集中DMA传输模式要求主机在PCI空间或 Local空间设定描述符模块,其中包括PCI和Local总 线的起始地址、传输字节、传输方向和下一个描述 符模块的地址。在PCI9054的DMA控制寄存器中, 分散/集中模式使能位为DMAMODE0[9]或者 DMAMODEI[9】,发起传输的控制位为DMACSR0 【1:O】或者DMACSR1【1:O】。PCI9054在载入第一个描 述符模块时发起传输,此后连续加载下一个模块, 直至监测到链结束位(DMADPR0[1]或者DMADPR1 【1】)有效,则设置传输结束位(DMACSR0[4】或者 DMACSR1【4】),结束DMA传输。 DMA块传输模式要求PCI主机或Locla主机提供 传输时的PCI空间和Local空间起始地址、传输字节、 传输方向,并由主机设定DMA开始位启动一次数据 传输,一旦传输完成,设置传输结束位,结束DMA 传输。 在雷达接收机综合测试系统中,运用PCI Target 传输模式实现对DMA控制寄存器读写,运用DMA 块传输模式实现对存储模块的数据传输。 2.2存储模块 利用DMA方式进行数据传输时,PCI9054内部 的FIFO大小远远不能满足数据传输的要求。因此在 Local总线上外加存储器用于缓冲数据的存取。系统 采用的存储芯片为Mr58L128L32F1,可以满足设计 要求【7】a 2.3控制模块 控制模块主要实现对存储模块的读写控制,其 提供的控制信号如图2所示。 S CIJ SO ST ADS SRAMADDR[RB DY  ̄6..2 SA[16..21 Bf3..0l } BLAST _SRAMCS— SRAMCS R l LBE【3 O】 SRAMOE l SRAMOE [16 2】 l LWDP,D_ SRAM BW【3..O】 SRAM BW[3. 『31..281 { ADDR lN【16. LHOLDA {U{()【DA 0LD l ADDR 4MSBS[31..28 LBO[1..0 LBGn..01 LHOLD CS【3..O iCS『3 O1 1..O1 } .LBRI1 01 图2控制模块的接口 维普资讯 http://www.cqvip.com 电子科技大学学报 第36卷 SRAM需要的主要控制信号为:片选 (SR MCS )、使能输 ̄l(SRAMOE#)、字节使能位 (SRAM BW(3:O))KSRAMI ̄[8J。片选信号 (S CS )由局部总线的高四位地址线 (LA31.LA28)译码而得,SRAM的地址信号SA[16..2】 由局部总线输入地址信号LA[16..2】通过CPLD的内 置计数器给出。低有效的READY信号用于终止 PCI9054的存储周期。控制模块根据相应的局部总线 3 DM,A驱动程序开发 3.1 DriverStudio简介 DriverStudio是Numega公司推出的一套开发驱 动程序的完整工具包,几乎包含了开发驱动所用到 的大部分工具,但可以用来开发虚拟设备驱动(vxd), 而且也可以开发WDM(Windows Driver Mode1)驱 动,还包含一个用于调试设备驱动的工具SOF『ICE。 请求信号LBR[1..0】和PCI9054的总线请求信号 LHOLD产生对应的应答信号LGB[1一O】和LHOLDA。 设计时选用ALTERA的CPLD EPM7128AE芯 片,用VHDL语言编写代码实现硬件控制逻辑的设 计。PCI9054产生LHOLD信号申请本地总线,如果 本地总线空闲,EPM7128AE向PCI9054产生 LHOLDA应答信号,则PcI9O54掌握本地总线控制 权。然后产生ADS#信号,在下降沿处总线上开始出 现要访问的地址,接着进行数据burst ̄输,每个burst 读4个32 b数据,数据传送到最后一个字节时, PCT9054产生BLAST#信号表示传输结束,则 EPM7128AE将READY#信号置有效,等待读取第二 组数据。时序关系图如图3所示。 I HolD U{oU)A AD BLAST弹 L、Ⅵ 31..2】 LD[31..0】 READY#(input) BTERM ̄input 图3 PCI9054 DMA传输时序 图4突发周期状态机设计 以上功能可以采用图4所示的状态机来描述 。 图中,So为空闲状态,Sl为突发开始状态,S2为突发 等待状态,S3为突发重复状态,S4为突发最后状态。 用VHDL语言编写该状态机变化的代码,则可实现 对存储模块的读写控制逻辑的硬件设计。 DriverWorks是DriverStudio的一个组成部分, DriverWorks中的类库封装了针对驱动程序的各种通 用操作,使用其中的DriverWizard向导功能,不仅能 帮助开发人员直接进入设备驱动程序的开发过程, 而且有助于缩短开发周期,开发出高质量、结构化 的驱动程序IJⅢ。 3.2 Windows环境下设计DMA驱动程序的方法 DriverWorks提供-j'KdmaAdapter、KdmaTransfer 和KCommonDmaBufferZ个类,用于实现DMA操 作。KdmaAdapter类用于建立一个DMA适配器,说 明DMA通道的特性;KdmaTransfer ̄用于DMA传输 控制;KcommonDmaBuffer类用于申请系统提供的 公共缓冲区。实现DMA既可以由主机发起,也可以 由外部设备( ̄PLocal主机)发起。当由主机发起DMA 时,主机的程序需要对PCI9054的DMA寄存器进行 设置(如DMA地址、DMA传输长度、DMA传输方向 以及中断控制等),最后通过使能DMA命令/状态寄 存器(DMACSR)启动一次DMA。在传输的过程中, 当DMA传输计数器为O或者有中断到来时,终止 DMA传输。 3.3基于PCI总线接口技术的DMA驱动程序设计 定义PCI接口卡局部总线的接口模式为C模式, 访问资源有三个。基址寄存器O和l固定,分别对应 9054芯片的操作寄存器的内存映射地址和YO映射 地址;基址寄存器2为Memory映射空间,对应于存 储模块的内存映射地址。访问资源的映射在驱动程 序初始化设备时实现。 设计DMA驱动程序时,首先在设备类中定义一 个KdmaAdapter类的对象作为成员变量m Dma,然 后在函数OnStartDevice(K/rp I)中初始化该变量 m Dma。同时,还需在设备类中定义一个 KcommonDmaBuffer类的对象m comDmaBuf ̄H-- 个KdmaTransfer类的对象m CurrentTransfer,其中 m CurrentTransfer既可以作为全局静态变量,也可 以作为设备类的成员变量。 维普资讯 http://www.cqvip.com 第5期 颜建峰等:基于PCI总线的DMA高速数据传输系统 图5 DMA传输流程 当需要DMA传输时,驱动程序调用 KdmaTransfer类的成员函数InitiateO来初始化。 Initiate()fl数将分配DMA适配器,建立传输的初始 段并调用回调函数。在DMA传输中,总是将一次传 输分成多个片断进行,所以需要有一个回调函数启 动第一次传输和在一个片断传输完成后启动下一次 传输。 回调函数定义为DEⅥ MBER DMAREADY(PCI9054Device,Dma_Callback)。 在回调函数中,首先检查DMA传输是否完成(可 以通过调用成员函数BytesRemaining0实现),如果返 回值为0,则调用成员函数Terminate0结束本次DMA 传输;否则传输继续进行。回调函数通知设备开始 传输,然后立即返回,并不等待传输完成。当一个 片段传输完成后,一般硬件将会产生一个中断, 此时驱动程序将会进入中断处理程序。在中断处理 程序中,调用KdmaTransfer类的成员函数Continue() 结束本次传输并开始建立下一次传输的片段,再一 次调用回调函数。最终DMA传输将在回调函数 Dma Callback0@结束。DMA传输流程如图5所示。 4结束语 本文主要阐述了在雷达接收机综合测试系统 中,基于PCI总线接口技术实现DMA数据传输的设 计模式及其驱动程序的设计思想。实践证明, PCI9054以其强大的功能和简单的用户接口,为基于 PCI总线接口技术的DMA传输系统的设计开发提供 了简便的方法,大大减少了工作量,提高了设计的 可靠性。目前,设计的PCI数据接口卡已经用于测试 系统,数据传输速率可以稳定地达 ̄lJ70 MB/s。 参考文献 【1】李贵山,戚德虎.PcI局部总线开发者指南 .西安:西 安电子科技大学出版社。2001, 【2】PCI SIG.PCI local bus speciifcation revision 2.2IDB/OL】. httpllwww.Pcisig.eom.,2005-06—25. 【3】SHANLEY ANDERSOND.PCI system architecture[M]. 北京:电子工业出版社,2O01, 【4】张杰,马庭强.PCI设备空间的访问及实现【J】.重庆邮 电学院学报,2000,l2(3):60—63,90. 【5】Plx Technology.PCI 9054 data book V2.1,2000[DBIOL]. httpllwww.plxtech.com.,2005-06—25. 【6】戴紫彬,孙万忠.PCI9054局部总线设计及应用【J】.微电 子学与计算机,2003,20(8):122—124. 【7】谭博钊,徐元军.PCI总线接口技术及其在高速数据采集 系统中的应用【J】.电子技术应用,2002,28(1):21—23. 【8】苗浩,韩 焱.基于外围部件互连总线接口电路的实 现与应用【J】.测试技术学报,2002,16(4):16-24. 【9袁俊泉,孙敏琪,曾9】瑞.Verilog HDL数字系统设计及 其应用 .西安:西安电子科技大学出版社,2003. 【l01郑伟绩.用DriverStudio开发PCI设备驱动程序【J】.微型 计算机与应用,2002,2l(9):13.14,45. 编辑熊思亮 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top