关键词:PCI总线 PCI 9054 WinDriver
Pi Hai-feng Li Zi-tian Xu Xiu-zhen Xue Li-jun
Abstract: Followed the expatiation of design requirement, the development process for a system based on PCI bus is expounded, which is assumed as CCD high speed data outputting system and used for testing. The design idea and method is emphasized.
Key words: PCI bus PCI9054 WinDriver
光谱成像仪是集光学、光谱学、精密机械、电子技术及计算机技术于一体的新型探测仪器。其中,CCD(charge coupled device)成像系统,将采集到的光谱信息转换为可处理、存储的电信号。由于数据量庞大,CCD成像系统所采集的数据在存储之前通常都要经过压缩处理。在光谱成像仪的研制过程中,需要这样一种测试设备,它模拟光谱成像仪CCD成像系统,对外持续输出已知数据及时序信号。通过将已知的发送数据,和经过压缩后接收到的数据进行对比,可以量化地检测数据压缩系统的性能指标。
0. 系统要求及设计思路
本文中高速数据输出卡的功能是完成对光谱成像仪CCD系统数据输出过程的模拟。光谱成像仪CCD系统的数据输出格式如下:
图1 光谱成像仪CCD系统数据输出格式
其中,图象数据与辅助数据分时共用数据线,在帧正程传送256(行) x 512(列) x 12bit图像数据,在帧逆程传送128x12bit辅助数据,一帧周期的数据共有131200x12bit,而一幅完整的光谱图象要包含512帧数据。系统输出时钟为8.9M Hz,全部输出信号为LVDS电平接口。
为达到模拟效果,要求数据输出卡以相同的数据格式及接口,持续不间断地对外输出数据;同时,为测试后续数据压缩系统所采用压缩算法针对不同特性图像数据的有效性,还要求数据输出卡能够较为方便的更换输出数据。
针对以上系统要求,选用了基于PCI总线的设计方案:将要输出的图像数据文件放置于特定内存区中,作为为数据源,根据计算机控制,循环对该数据文件所在内存区进行读取,并将读取的数据向外发送。从而达到模拟CCD系统数据输出的效果。如果要更换输出数据,只需将新的数据重新置入内存区,具有较强的灵活性,使测试过程更为简洁。
1. 系统的硬件设计
高速数据输出卡的硬件结构框图如下图所示,PCI总线设备接口选用专用接口芯片PCI 9054,系统时钟信号分别来自计算机所提供的PCI时钟和卡自身所带的8.9M Hz晶振。整个过程的时序控制由可编程逻辑器件完成,由其控制对PCI 9054产生定时中断,PCI 9054响应这个外部中断,并在PCI总线上对计算机发出PCI中断信号,当上位机检测到PCI 9054这个中断信号后,就立即控制PCI 9054以连续DMA方式从上位机指定的内存区域读取数据,并向外发送至大容量FIFO进行数据缓冲。FIFO中的12位的图象数据以及数据时钟、帧同步两个时序信号经过LVDS驱动器转换为差分信号,发送至后续设备进行处理。
图2 高速数据输出卡硬件结构框图
在本系统中,将PCI 9054设定为C工作模式,即32位地址、32位数据、总线非复用工作模式。由于PCI 9054从上位机读取数据均发送到FIFO一个设备,因此其Local端地址线不起任何作用,而数据线仅选用高12位。此外,在本设计中采用串行EEPROM 93LC56B对PCI 9054进行配置,在上电后,PCI 9054自动读取93LC56B中的数据,设置相关寄存器,完成初始化操作。
鉴于本系统高速,大数据量的特点,一般常用的FIFO无法适应要求,因此选用了384K x 8 bit的视频帧存储器AL422B,作为数据缓冲。AL422B由3M位的DRAM组成,工作频率最高可达50 MHz,有独立的输入、输出接口及读写时钟,可同时进行读写操作;/RE,/WR,/REST及/WRST四个输入信号分别控制AL422B的读、写与读指针、写指针复位操作。本系统中,将两片AL422B并联,扩展为384K x 16 bit的FIFO存储器。
整个过程的时序控制由可编程逻辑器件完成,它的工作包括:向PCI 9054发出定时中断信号,由其向上位计算机申请中断;控制数据缓冲器AL422B的读写时序,包括其初始化复位操作;产生PCI 9054所需的时序信号。
2 系统软件开发
整个系统的软件包括PCI 9054驱动程序与上位机应用程序,图像数据预处理(格式转换)程序及可编程逻辑器件CPLD的VHLD程序。在此,仅对PCI 9054驱动程序与应用程序的开发作以简要介绍。
WinDriver是Jungo公司出品的开发工具包,它支持的总线结构包括PCI/CardBus/ISA/ISAPnP/EISA/CompactPCI和USB,可大大简化生成硬件驱动程序和开发应用程序的过程。本次开发使用的是WinDriver 6.03版。
WinDriver已经内置了包括PCI 9054在内的多种PCI/USB接口芯片的驱动程序,因此只需将设计完成的PCI卡插入计算机,然后运行Windriver的向导程序,并在列表中选择相应的PCI接口芯片,只要硬件接口连接正确,即可生成相应的 .inf文件。inf文件包含了设备类型、生产厂商、型号及拷贝文件的路径等PCI硬件设备的信息,通过inf文件,Windows才可以找到PCI卡并完成对其驱动程序的安装。
图3 使用WinDriver生成PCI卡硬件设备信息文件(.inf文件)界面
上位机软件开发采用用户模式,其流程图如图4所示:
图4 上位机软件流程图
由于AL422B并不象其它通用FIFO那样能提供数据空、半满、全满等逻辑信号,因此只能根据其数据发送速率、FIFO容量及PCI总线速率,来设定一个定时中断。这个定时中断设定为数据输出卡向外发送一帧数据所需的时间,约为14.8ms,即数据输出卡每向外发送一帧数据,必定会从上位机缓冲区中读入一帧数据。由于在启动定时中断前,数据输出卡已经预先读取一帧,因此,即便上位机对定时中断的响应有一定延迟,也不会出现FIFO被读空的情况。同时,由于FIFO的深度为384K,近似于3帧的数据量,因此也不可能出现FIFO被写满,而造成数据丢失的情况。定时中断由卡上的CPLD根据输入时钟精确产生,在定时中断服务程序中,程序依次读取一幅完整光谱图像中的一帧数据,若全部512帧数据被读完,则指针归零,从头再次开始,以此保证光谱图像数据的循环发送。下面给出了中断服务程序的部分源代码。WinDriver针对PCI 9054芯片,提供了大量API函数可供调用,因此使对PCI 9054的编程操作非常方便。
void WINAPI PLX_IntHandlerRoutine(P9054_HANDLE hPlx, P9054_INT_RESULT *intResult) ——中断服务程序
{ DWORD dwIntStatus;
P9054_DMAReadWriteBlock(hPlx,0x0,(PVOID)pBuffer,SEND_BLOCK_SIZE,FALSE,P9054_MODE_WORD,P9054_DMA_CHANNEL_0);
—— 控制PCI 9054以DMA方式从上位机缓冲区读取1帧数据
if(block_num
{ pBuffer=pBuffer+SEND_BLOCK_SIZE;
block_num++;
} ——每发送1帧数据后,数据指针向后移动一帧的数据量,已发送帧计数加1
else
{ pBuffer=Buffer; block_num=0; ——512帧发送完后,指针回零,从而实现512帧数据的循环读取
}
……
dwIntStatus = P9054_ReadReg (hPlx, P9054_INTCSR);
P9054_WriteReg (hPlx, P9054_INTCSR, dwIntStatus | 0x00000d00);
——开中断,中断服务程序结束,等待下一次中断
}
3. 测试结果和结论
将高速数据输出卡安装在计算机上,运行应用程序,即可使数据输出卡进行工作。下图是通过示波器采集的数据输出卡上部分信号的时序图。
图5 PCI高速数据输出卡部分信号时序图
其中,LINTi#为PCI 9054的局域端中断输入,由CPLD的定时中断信号产生;INTA为PCI 9054在PCI总线上输出的中断请求信号;WE\为数据输出卡上FIFO的写使能信号,当其有效时,向FIFO写入数据;INT_EN\为定时中断使能信号,由它控制CPLD开始产生定时中断。有图中可看出,在预读取一帧数据后,定时中断使能信号有效,CPLD开始向PCI 9054发出定时中断信号;PCI 9054接收到此信号后,随即通过PCI总线向上位计算机请求中断;在经过延时后,中断被响应;在中断服务程序中,数据输出卡从计算机内存中读出数据,读取一帧数据的时间是14.6 ms。
由时序图中可以看到,数据输出卡读取一帧数据的时间(即WE\信号有效时间),小于向外发送一帧数据的时间(即定时中断间隔),由此可保证FIFO内数据不会被读空。根据以上的试验结果,可以充分说明高速数据输出卡已实现了设计要求。
在高速数据输出卡的开发过程中,采用了专用PCI接口芯片PCI 9054和总线软件开发工具包WinDriver,能使我们从繁琐复杂的PCI协议和底层驱动程序中摆脱出来,将更多的精力投入硬件电路设计及软件功能的实现,大大节省了开发周期。目前此卡已用于实际的测试工作中,圆满完成了设计要求。
参考文献:
[1]. 李贵山,陈金鹏. PCI局部总线及应用. 西安电子科技大学出版社, 2003年
[2]. PCI Local Bus Specification,Revision 2.2. December 18, 1998
[3]. PCI 9054 Data Book,Version 2.1. http://www.plxtech.com January 2000
[4]. WinDriver v6.00 User’s Guide. Jungo Ltd, 17th March 2003
[5]. 李爱玲,张伯珩等. 基于CPLD的CCD相机图像信号模拟器的设计 《微计算机信息》 2006年第1-2期 P151-152、P162