本文着眼于图像处理系统的发展要求,说明了基于PCI总线的DSP图像处理系统的优点,并详细阐明了系统的硬件结构和PCI总线的驱动实现,最后介绍了系统实现的效果。
1 图像处理系统发展现状
在计算机信息处理及应用中,图像信息处理以及处理结果的应用占有十分重要的地位。图像处理的发展依赖于处理器芯片(包括单片机、DSP等)技术的应用和发展,以及大容量、价格低廉的存储器的出现。图像处理系统虽然由机箱式大体积结构发展为插卡式小型化结构,但是由于图像处理存在大量的数据信息,在实时性和容量上一般不能满足多数需要实时处理的场合。这主要体现在如下2个方面。
1.1 实时性要求
图像处理系统有很多种实现方法,比如在通用计算机上用软件实现、用单片机实现、利用特殊用途的DSP芯片来实现等。但这些实现方法都有着缺点,例如软件实现速度太慢,不能用于实时系统;单片机采用的是冯·诺依曼总线结构,而且乘法运算速度太慢;如果用特殊用途的DSP芯片又缺乏灵活性,而且开发工具不是很完善。
在本系统中,图像处理系统是在通用计算机上加入DSP加速卡来实现。利用DSP芯片的高速处理特性完成大部分的图像处理工作,计算机只是作为辅助操作和存储系统。这种方法发挥了DSP的高速性能又具有相当大的灵活性的特点,开发工具比较完善。
实现实时性要求还必须有足够的传输速度,PCI总线速度最高可达132MB/s,这是其他总线无法比拟的速度,如ISA总线速度只有5MB/s。
1.2 小型化要求
现今图像处理应用越来越趋于小型化系统,趋向于把整个处理系统集成在一个小"黑盒子"里面,甚至于一块电路板上。这就要求图像处理系统具有高速度、高集成度的处理芯片来完成原本需要许多部件合作完成的任务。DSP的中央处理器特性使得可以把众多的功能集于一身,并通过外部扩展来实现复杂的功能,实现系统的小型化。
另外,视频数据一个很大的特点就是大容量性,这是与音频数据最大的区别之一。对于大容量数据的实时处理不但需要高速的CPU,还需要能扩展的大容量存储空间。在通用计算机上用软件实现时,其存储空间由计算机的存储空间决定,其扩展性能受到了限制;同时单片机的扩展空间有限。它们都无法满足视频数据的大容量要求。
本文正是着眼于实时性和小型化要求这两方面问题,设计了用DSP加速卡实现的图像采集系统。利用DSP芯片的高速处理特性完成大部分的图像处理工作,上位机只完成辅助操作和存储系统。这种方法发挥了DSP的高速性能又具有相当大的灵活性,而且开发工具比较完善。另外,PCI总线速度最高可达528MB/s(66MHz、64位),这是其他总线无法比拟的速度。系统中C6000系列中DSP的可扩展存储空间高达1GB,这完全可以满足一般图像处理系统的需要。
2 DSP图像处理系统结构
本系统采用TI公司C6000系列DSP中的TMS320C6211作为系统的CPU。图像数据通过视频头输入模拟图像信号,这些信号经过视频解码芯片进行A/D转换为数字信号,经FIFO输入DSP进行图像的增强、分割、特征提取和数据压缩等,然后输出信号经PCI解码芯片转换为符合PCI总线规范的标准信号,通过PCI总线接口传到上位机。
本系统设计目的是用于智能楼宇的管理,主要实现对楼宇一些重要参数的实时检测功能等。当然可以用于其他的监控系统,其硬件系统基本一致,不同的在于软件功能的区别。系统结构图如图1。 (图片) 从图1可以看出,整个系统可分为3个模块: DSP图像处理模块,视频解码模块,PCI总线模块。下面分别介绍这3个模块的实现过程和功能。
2.1 DSP图像处理模块
本系统选用TI公司的C6000系列DSP之中的TMS320C611作为本系统的CPU。C6000是TI公司发布的面向视频处理领域的新款高速数字处理芯片,适用于移动通信基站、图像监控、雷达系统等需要高速度和高度智能化的应用领域。存储空间选用现代公司的2片HY57V651620B作为运行过程中的存储器(SDRAM)和AMD公司的AM29LV800B 作为启动时候需加载程序和参数的存储器(FLASH)。其结构如图2所示。图中的HPI(Host Port Interface)为主机口;EMIF(External Memory Interface)为外部存储器接口,兼容同步/异步方式。(图片) (1) TMS320C6211处理器特性及完成功能
TMS320C6211处理器由3个主要部分组成:CPU内核、外设和存储器。它的高速性能主要体现在如下几个方面:① TMS320C6211的存储空间最大扩展可以达到512MB,这完全可以满足各种图像处理系统所需的内存空间,而且其最高时钟可达167MHz,峰值性能可达1600MIPS(百万条指令/秒)、2400MOPS(百万次操作/秒)。② 并行处理结构。TMS320C6211芯片内有8个并行处理单元,分为相同的两组,并行结构突破传统设计使得芯片具有很高的性能。③ 芯片体系采用VelociTI结构。VelociTI是一种高性能的甚长指令字(VLIW)结构,单指令字字长为32bit,8个指令组成一个指令包,总字长为256bit,即每秒钟可以执行8条指令,同时芯片内部设置了专门的指令分配模块,可以将每个256bits的指令包同时分配到8个处理单元,并由8个单元同时执行。④ 采用流水线操作实现高速度、高效率。TMS320C6211只有在流水线充分发挥作用的情况下,才能达到最高的MIPS。C6211的流水线分为3个阶段:指令读入、解码和执行,总共11级。
DSP完成的功能主要是对从FIFO读入的数据进行处理,包括依照程序进行识别、特征提取以参数检测等。当视频头采集速度为每秒25帧图像时,它留给DSP处理的时间最多为每帧40ms,如果考虑系统中一定的延时以及处理后图像的存储时间,那么DSP处理一幅图像时间不能超过30ms,按照C6211的处理速度,在30ms内可以处理36M条指令。DSP读出FIFO中的行数据并存入SDRAM,一帧图像有576行,在最后一行时会收到帧中断,这时SDRAM中的图像数据总共有1440×576=810KB。让C6211用36M条指令的时间处理810K的数据是绰绰有余。
(2) SDRAM存储器
HY57V651620B是现代公司发布的128Mb SDRAM,支持分页寻址,访问速度为7.5ns,与DSP系统同步工作,但因为DSP工作在150MHz,故系统中SDRAM工作在DSP时钟的一半或者2/3,即75MHz或者100MHz。当工作在100MHz时候,SDRAM在时序上需要一些特殊的控制,不是简单的与DSP同步。SDRAM主要在系统运行过程中存储临时数据和处理结果。系统中共有256Mb的存储空间,其消耗情况视启动程序和图像处理程序的大小而定。
(3) FLASH存储器
AM29LV800B是AMD公司发布的8Mb FLASH芯片,同样支持分页寻址,工作在异步方式。启动程序固化在FLASH芯片中。当系统加电启动时,FLASH中的程序下载到DSP的SDRAM中运行。FLASH具有在线重写入功能,这对系统启动程序的修改和升级都带来了很大的方便。
2.2 视频解码模块
本系统视频A/D采用的是Philips公司的SAA7111A作为视频解码芯片,SAA7111A可以提供四路模拟视频输入,具有两个模拟处理通道,支持四路CVBS模拟信号或二路Y/C模拟信号或(2×CVBS和1×Y/C)。SAA7111A对视频头输入的标准PAL格式的模拟图像信号进行A/D转换,然后输出符合CCIR601建议格式的4:2:2的16位YUV数据到FIFO,其中亮度信号Y为8位、色度信号Cr和Cb合为8位数据。FIFO采用的是IDT公司的IDT72V215LB芯片,深度为512×18。按照CCIR601标准,YUV图像分辨率为720×576,那么按行输出时,SAA7111A输出数据流大小为:720×16=1440bit。因为DSP通过32位的SBSRAM接口与FIFO通信,故YUV数据写入FIFO时需要在FIFO之间实现乒乓切换,这时一行720×16的数据在两片FIFO中存储变为360×32。
2.3 PCI通信模块
PCI(Peripheral Component Interconnect,外围组件接口)它既可以作为中间层的总线也可以作为周边总线系统使用。与其他普通总线规范相对照,PCI总线为高速I/O设备提供了更好的支持,比如可以很好的支持图像适配器、网络接口控制器、磁盘控制器等。现行的标准允许在33MHz下使用64根数据线,传输速率可达2.12Gbps。并且PCI总线支持线性突发的数据传输模式,可确保总线不断满载数据,因此能有效利用总线带宽。另外,PCI总线还具有低延时的随机存取特性,对从总线上的主控寄存器到从属寄存器的写延时为60ns。
PCI总线规范吸引人的地方不仅是其高速度,更在于它适应了现代I/O设备对系统的要求,对PCI扩展卡及器件能进行全自动配置,并且只需很少的接口逻辑就可以实现并支持其他总线系统。
TMS320C6211的HPI口不支持PCI总线的无缝接口。本系统中采用TI公司的PCI2040来实现DSP的HPI与PCI总线的连接。DSP处理后的数据经HPI口输出到PCI2040进行解码,然后输出到PCI总线上。其逻辑结构图如图3所示。(图片) PCI2040是TI公司设计的专门用来完成C5000系列和C6000系列DSP和PCI总线进行接口的专用芯片。PCI2040符合PCI局部总线2.2规范,能够方便的实现PCI总线与TMS320C54X或TMS320C6X DSP的HPI断口的无缝连接。PCI2040可以兼容3.3V和5V,以适应不同的PCI总线电压。PCI2040与C6211之间不需要进行信号的电平转换,也不需要额外的控制逻辑电路,因此接口电路十分简单。
在本系统中,PCI2040上存在2种电压:5V和3.3V,其中3.3V是HPI口电压,而5V是PCI总线电压。PCI2040在启动时需要对其PCI总线寄存器和HPI寄存器参数进行预加载。系统中PCI解码模块包括一块配置ROM--AT24C08A,属于EEPROM型ROM,便于对配置参数的修改和升级。当系统启动时,存储在AT24C08A的数据被下载到PCI2040的寄存器中并进行配置。
图中/HINT[3:0]、/HCS[3:0]、HRDY[3:0]、HRST[3:0]分别与4片DSP中的相应信号相连,即PCI2040可以同时与4片DSP接口。
3 PCI总线驱动实现方法
在系统软件方面,基于PCI总线的图像处理系统面临的难点颇多,其中难度最大的是PCI驱动问题。
为阐明如何在Windows操作系统下实现PCI总线的驱动,还需了解PCI设备的配置空间系统。PCI设备有3种物理存储空间:配置空间、存储器空间和I/O空间。配置空间是长度为256字节的一段连续空间,空间的定义如图4。在配置空间中只读空间有设备标识、供应商代码、修改版本、分类代码以及头标类型。其中供应商代码用来标识设备供应商的代码;设备标识用来标识某一特殊的设备;修改版本标识设备的版本号;分类代码用来标识设备的种类;而头标类型用来标识头类型以及是否为多功能设备。除供应商代码之外,其他字段的值由供应商分配。基地址寄存器最重要的功能是分配PCI设备的系统地址空间。在基地址寄存器中bit0(最低位)用来标识存储器空间还是I/O地址空间,基地址寄存器映射到存储器空间时bit0为“0”,映射到I/O地址空间时bit0为“1”。
3.1 Windows环境下驱动程序
驱动程序可以理解为一系列控制硬件设备的函数。在Windows操作系统中,封装驱动程序的方法是制作一个DLL或VxD。当硬件是非标准设备时,必须针对特定的硬件来设计Windows环境下的设备驱动程序。
在DOS操作系统,对于一个应用程序而言它总认为自己是唯一运行的程序,因此应用程序可以直接访问硬件,独占所有的系统内存以及系统运行时间,当然也就不需要设备驱动程序。但到了Windows操作系统,系统中同时可能有若干个应用程序在运行,这就使得系统不可能让它随意的直接访问硬件,否则就会引起应用程序访问冲突而导致系统崩溃。为解决这一问题,人们提出将系统的资源虚拟化,让应用程序运行在一个虚拟定环境中的虚拟机(VM)上,而管理程序和驱动程序运行在实际机器上(Ring0级),由它们来处理针对硬件的操作。虚拟资源是硬件(甚至软件)资源的仿真,当系统虚拟了所有或者几乎所有的程序可以访问的资源时,它就创造了一个“虚拟机”(VM)。Windows虚拟机完全透明的仿真了以下资源和性能:
(1) 可访问的内存空间
(2) I/O操作
(3) 中断操作
(4) 外围设备(显示器、键盘等)
如此以来,Windows应用程序在Ring3级(最低级)的保护模式上运行,不能直接访问硬件,执行一个对硬件的操作就会引起一个异常事件,此时处理器切换到Ring0级,并且将控制权交给相应当控制器。所有Windows应用程序分享一个系统虚拟机。
Windows主要根据页错误机制实现对存储器映射设备访问的虚拟化。要捕获对某个设备内存的访问,设备VxD驱动程序会将页表中对应于相应当内存页标注为“不可用”。当在虚拟环境中运行的程序试图访问这个页时,会产生一个错误。VM的异常处理器会调用已注册的设备VxD驱动程序的页错误处理器进行相关处理,即当VM访问该端口时产生异常时进入该硬件的回调处理器,由我们自己编写的函数进行处理。
3.2 各种驱动程序比较
常见的驱动程序包括三种:VxD,KMD和WDM。
(1) VxD:虚拟设备驱动程序,是系统用于各种硬件资源识别、管理、维护运作的扩展。VxD和VMM一起维持着系统的运作。VxD运作组Intel系列CPU保护模式下的Ring0,拥有对硬件的最高控制权。
(2) KMD,Kernel Mode Driver。它是WindowsNT下提出的管理、维护硬件运作的驱动程序模式。该Driver运行于WindowsNT的Kernel模式下(类似于Ring0)。但一个KMD的运行环境在不同的时候是根本不同的,Driver收到设备请求时的运行环境很可能和设备请求实际操作的运行环境根本不同,因此在WindowsNT下Driver的运作受到WindowsNT本身的很多限制。
(3) WDM,Win32 Driver Model。它可以和Windows2000兼容,MS力推的全新的驱动程序模式,它实际也可以理解为一个即插即用的KMD。WMD代码很长,Windows98对WDM支持有限,因此WMD难以一时取代VxD。
3.3 PCI2040驱动程序开发
PCI2040不是标准的硬件设备,因此必须自己编写PCI2040的硬件安装信息文件和驱动程序。PCI2040配置空间如附表:(图片) 其中设备ID用以标识特定的设备,具体的代码由供应商来分派;供应商ID用以表明设备的制造者,这二者是识别PCI设备的唯一标识。对于PCI2040来说,当读Vendor-device ID时,返回值为AC60104C。
(1) 设备信息安装文件
设备信息安装文件(.INF)包含了驱动程序的名称、驱动程序应该复制到的目录,以及在驱动程序安装时必须生成和修改的注册表入口。
在编写INF文件时,可以使用了VtoolsD开发包中的INF Editor工具,以下是我所编写的PCI2040安装信息文件。
[Version]
Signature=$CHICAGO$
Class=PCI Bridge file://设备类型为PCI桥设备
Provider=%String0% file://供应商的名称
[ClassInstall]
[DestinationDirs]
DefaultDestDir=11 file://将驱动程序安装在
file://C:WindowsSystem目录下
[Manufacturer]
%String1%=SECTION_0
[SECTION_0]
%String2%=sevenstar,PCIVEN_104C&DEV_AC60
[sevenstar]
CopyFiles=CopyFiles_sevenstar
AddReg=AddReg_sevenstar
[CopyFiles_sevenstar]
DSP_PCI_Bridge.vxd file://驱动程序的名称为 file://DSP_PCI_Bridge.vxd
[AddReg_sevenstar]
HKR,,DevLoader,0, DSP_PCI_Bridge.vxd file://在注 file://册表中添加相关信息
[sevenstar_LogConfig]
ConfigPriority=NORMAL
IRQConfig=3,7,9,10,15 file://指定PCI2040可 file://选的中断口
[ControlFlags]
[SourceDisksNames]
1=pci2040驱动盘,,0000-0000
[SourceDisksFiles]
DSP_PCI_Bridge.vxd=1
[Strings]
String0="Texas Instruments"
String1="TI"
String2=“PCI桥接”
(2) VxD的创建
Windows支持静态安装和动态安装VxD,前者是在Windows初始化时安装VxD并一直保存在Windows中,后者是在一个应用程序或其他VxD的控制下安装和卸载。静态安装的VxD始终占用着一定的内存资源以及中断口,若不是一直运行,则导致了资源浪费。
在使用QuickVxD开发VxD只需在Dynamically Loadable选项中打勾就行了,其中Device Name是指我们的VxD的设备名,每个VxD都有设备名这儿是指PCI2040芯片,Device ID是用来标识设备,只有当该VxD需要提供对其他VxD的调用入口时才用,且不能任意取应该由Microsoft公司提供,一般情况直接用UNDEFINED_DEVICE_ID就行了,Device Initialization Order确定Windows对VxD的安装顺序,比如你想要你的VxD先于VDD初始化就应该设置为VDD_INIT_ORDER-1,一般情况也使用默认值。
4 结束语
图像处理系统实现的关键在于如何对大容量的信息进行暂存、压缩和传输等问题进行处理。本系统的实现很好的解决了这三个难题。在图像信息暂存方面充分利用了DSP存储空间的可扩展性,保证了系统可暂存的信息量足够大;信息压缩是DSP的最擅长做的事情,可以在很短的时间内完成大量的信息压缩工作;PCI总线的引入保证了信息在足够的带宽下进行快速传输。
12/5/2004
|