1 PCI总线介绍
PCI总线是一种不依附于某个具体处理器的局部总线。从结构上看,PCI是在CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的管理,并实现上下之间的接口以协调数据的传送。管理器提供了信号缓冲,使之能支持10种外设,并在高时钟频率下保持高性能。
与其它总线相比,PCI总线标准具有多方面的优点。表1为几种总线性能的比较。PCI局部总线的性能特点如下:
(1)传输速度快。最高工作频率33 MHz,峰值吞吐率在32位时为132 Mb/s,64位时为264 Mb/s。
(2)支持无限猝发读写方式。读写时后面可跟无数个数据周期,具有强大的数据猝发传输能力。
(3)支持并行工作方式。PCI控制器具有多级缓冲,利用它可使PCI总线上外设与CPU并行工作。例如CPU输出数据时,先将数据快速送到缓冲器中,当这些数据不断送往设备时,CPU就可转而执行其他工作了。
(4)独立于处理器。PCI在CPU和外设间插人一个复杂的管理层,用以协调数据传输,通常称之为桥。桥的主要功能是在两种不同的信号环境之间进行转换,并向系统中所有的主控制器提供一致的总线接口。因此PCI总线可支持多种系列的处理器,
并为处理器升级创造了条件。
(5)提供4种规格,可定义32位/64位以及5 V/3.3 V电压信号。3.3 V电压信号环境的定义为PCI总线进入便携机领域提供了便利。
(6)数据线和地址线采用了多路复用结构,减少了针脚数。一般而言.32位字长、仅作目标设备的接口只需47条引脚,作为总线控制者的设备接口再加2条引脚,并可有选择地增加信号线扩展功能,如64位字长的接口卡需加39条引脚,资源锁定加l条引脚,等等。
(7)支持即插即用功能,能实现自动配置。在PCI器件上包含有寄存器,上面带有配置所需的器件信息,使外设适配器在和系统连接时能自动进行配置,无须人工干预。
2 设计流程
本设计的主要流程是将应用层程序产生的数据送入底层驱动,然后由底层驱动软件将数据分发到硬件的存储空间中。这一过程由软件和硬件两部分完成。系统框图如图l所示。
2.1 软件设计
在本设计中,先通过高端数据处理软件进行信号的仿真处理,然后将仿真数据直接放入应用层缓冲区。由于本系统考虑到适应一定的快速数据交换,理想状况下不允许出现空间信号的间断现象,因此在应用层开辟两块数据缓冲区,如图2所示,分别标号BUFFERl和BUFFER2,在装完BUFFERl以后,再使用数据填充BUFFER2。只要软件设计的合理,就可以在应用层连续地将交换数据。
底层软件设计的驱动中,可以开多个分块缓冲,分别对应用层进行相应的数据缓冲映射,由于底层驱动直接与硬件相关,因此需要尽可能设计出与硬件十分匹配的缓冲区分块,以达到最佳的硬件数据传输效果。
2.2 硬件设计
数据的传输过程由应用层程序发起,但由PCI桥接口芯片PLX9054执行。PLX9054工作于主模式。在该模式下,软件应用层完全不需要耗费资源便能完成数据的传输。而应用层软件可以在这个过程中进行数据的产生和调配。整个传输过程通过DMA和中断完成。
当DMA传输开始后,首先对静态RAMl中数据进行传输,然后通知可编程逻辑器件CPLD,启动地址计数器,将SRAMl中的数据送向D/A,通过数模转换产生模拟信号波形。在SRAMl向D/A送数据期间,PLX9054开始向第二块静态RAM中传送数据,同时,应用层软件又可以为第一块数据区准备数据,当向第二块静态RAM传送完数据后,检测第一块静态RAM,如果此时第一块RAM中的数据已经发完,那么就启动第二块RAM,向D/A发送数据,与此同时,又开始向第一块静态RAM中传送数据,而应用层软件则开始为第二块RAM准备数据。如此周而复始。如果工作条件设计的较为理想,那么就可以得到连续、不间断、形式不同的模拟信号。
设计中注意以下三个要点:
(1)应用层软件的核心工作是数据的产生和数据的调配。
(2)驱动层软件的设计是为了在数据传输过程中最有效地配合硬件,和最有效的响应硬件的中断。
(3)本地可编程逻辑器件PLD的使用要最大限度的进行本地时序的调用,以达到最优的数据传输。
可以产生连续、不间断、样式不同的模拟信号,是本系统设计的优势和关键所在。如果只考虑普通任意波形发生器的做法,那么并不需要对应用层、驱动层以及硬件缓冲区的设计进行过多的考虑,只要开一个足够大的数据缓冲区,放一个足够容量的静态RAM,然后将需要的数据灌入静态RAM,就可以完成一个高性能任意波形发生器的功能。
3 器件和工具介绍
应用层软件的编制采用美国微软公司的VC++编译器环境。VC是Windows系统下的主要编程语言之一,用它开发的系统具有容易维护升级、界面友好、代码效率高,执行速度快等一系列优点,并且能够直接与系统及底层硬件交换数据。
驱动程序的设计和制作采用NuMega公司的DriverWorks驱动开发工具包。DriverWorks以面向对象(OOP)的方式,将编写WDM及WINNT驱动程序所需的对内核模式访问及硬件的访问封装成类。这样只要在其向导程序的指引下,根据硬件的具体参数填写必要步骤,就可以很方便地完成所需驱动程序的框架。最后根据具体的要求添加新的类对象和所需的代码就可以成功地完成自己的驱动程序。DriverWorks是基于VC++的,它生成的是标准的VC工程,只要将所建的工程在VC下编译,就可以生成最终的设备驱动程序。
PCI接口电路采用PCI专用接口芯片PLX9-054。PLX9054是由美国PIX公司生产的先进的PCI I/O Accelerator,符合PCI V2.2规范,采用176引脚PQFP和225引脚PBGA两种封装形式。PLX9054提供了PCI总线、EEPROM、LOCAL总线三个接口。PLX9054作为一种桥接芯片,在PCI总线和LOCAL总线之间传递信息,既可以作为两个总线的主控设备去控制总线,也可以作为两个总线的目标设备去响应总线。PLX9054采用了先进的PLX数据管道结构技术,是32位、33MHz的通用PCI总线控制器专用芯片,功能强大、使用灵活。PLX9054的静态RAM采用Cypress公司的CY7C1041静态RAM。PLX9054的D/A转换电路采用Analog Device公司的AD768高速16位D/A数模转换器,数据转换速度达到30MSPS,是一种高速,稳定的电流型D/A转换器。
4 数据的产生
本系统采用Matlab仿真软件对信号的数据产生文件进行仿真,仿真的条件完全设置为真实的数据模拟信号输出条件,仿真效果如图3所示。举例如下:若产生一个中心频率为5 MHz,调频宽度为2MHz的Chip信号,使用30MHz的信号恢复采样时钟,严格符合采样定理。仿真程序如下:
通过以上程序产生了一个16K的数据文件,只要将这个文件装入缓冲区,就可以得到输出的模拟波形。然后将D/A输出波形用示波器采集,就可以得到清晰的、与图4所示的D/A输出仿真图中台阶式一模一样的输出图形。
5 结束语
基于PCI总线的任意波形发生器具有灵活、快速、可变、可控,精度高等多方面的优势,由于其可编程性能优越,因此只要能够保证准确建立信号的数学模型,就可以得到相应准确的模拟输出结果,从而为提供复杂的信号产生环境和高质量的信号波形样式提供了有力的保证。
基于PCI总线的任意波形发生器的研制,能够满足各种高质量、复杂信号的需求,从而减轻了由于环境因素和波形质量而影响到的研究精度。