最高法院:反向工程法律声明

当前位置:龙芯世纪抄板设计服务商 >> 技术文档 >> CPCI的高速图像采集卡的设计

CPCI的高速图像采集卡的设计

  随着数字相机的不断发展,图像分辨率不断提高,相应的需要处理的图像数据也不断增长,在涉及到红外图像采集以及处理的系统中,常常要求大量图像数据的实时采集。国内外有很多高速图像采集板卡,但是其应用的单一性以及对用户接口的不透明性都限制了它的广泛应用,并且ISA总线等的传输速度也逐渐无法满足数据传输的要求。而采用CPCI总线作为接口,可以满足大多高速图像采集的需求。
  本文介绍了一种利用PCI9054桥接芯片和FPGA技术实现CPCI总线接口电路和数据采集逻辑的图像采集板卡的设计实现,并通过实际的图像采集系统证明了它的优越性。
  1 硬件电路实现
  本采集卡采用基于CompactPCI(CPCI)总线的设计。CPCI是国际PICMG协会于1994提出来的一种总线标准。它与传统的PCI总线相比具有更多的优点:(1)更好的机械特性,CPCI卡的前后上下都被固定,抗震性大大提高;(2)CPCI卡采用欧规卡结构,散热效果更好,且支持热插拔;(3)防腐和电磁屏蔽性好;(4)CPCI板卡可以完全兼容于PXI(一种全新的开放性,模块化仪器总线规范)总线系统中。
  几个关键芯片的介绍:
  (1)PCI9054的应用
  为了减少新产品设计的风险,选用了技术成熟,接口设计简单,价格便宜的PCI9054接口芯片。它采用先进的PLX数据管道结构技术,可以使局部总线快速转换到PCI总线上。并且支持DMA传输模式,为之后设计DMA(直接内存存取)传输奠定了基础。
  (2)FPGA的应用
  FPGA在本设计中起到了关键作用,它简化了数字逻辑电路的设计,实现了硬件部分的多个功能模块。首先实现了总线时钟和外部时钟信号的逻辑匹配,FIFO操作的时序逻辑控制;此外还实现了对不同数据格式的图像采集的功能,应用VerilogHDL硬件编程语言来完成各种格式转换,例如串行数据转为并行数据,区别正反不同扫描方式的图像等。这使得板卡更加灵活,适应更多的用户需求。根据性价比,采用Cyclone系列的EP1C12Q240C8。
  (3)FIFO的应用
  由于图像采集卡的采集部分的时钟频率与PCI传输部分的时钟不匹配,为了保证数据传输的可靠性,采用大容量FIFO来实现数据的缓冲。并且可以通过接口驱动的设计采用双缓存机制,更保证了数据传输的时序逻辑匹配。这里采用IDT公司的IDT72V36110,512KB的容量。
  此板卡还设计了一定的扩展功能,根据FPGA的剩余资源扩展12路可编程I/O,可以控制显示板卡的工作状态和设置指示灯。剩余的一片大容量的RAM,可以暂存大量临时数据。
  2 高速数据传输软件几个关键模块
  计算机将数据采集到内存后,需要对数据进行处理显示,如果处理速度不够快,就会影响到下一次数据的传输,因为要保证数据传输的实时性,在此设计成双缓冲传输机制。接口驱动采用DDK进行编写,对图像显示采用GDI编程,对数据的存储采用纯C编写,这样就有效的提高了软件对数据的处理速度。
  (1)    双缓冲机制
  将FIFO设置成半满中断响应方式,当数据存储到FIFO一半的容量时,触发PCI9054中断,开始DMA数据传输。另一方面,采集进来的数据存入FIFO的半空区。在软件上设计采用一个全局的状态变量来标注当前DMA传输的是哪个缓冲区,并且在每次DMA传输结束的时候进行状态的翻转,数据采集程序可以根据状态变量指向相应半空的缓冲区。这种双缓冲机制很好的解决了对图像进行处理的同时不中断的对数据进行存储的情况。
  (2)DMA传输模式的选择
  对于不同的传输情况,DMA模式的选择会影响到传输的效率。由于FIFO半满的容量是128KB,所以单次DMA的传输数据是128KB,而其传输速率由采集速率及FIFO中断响应速率决定。所以这里采用公共缓存DMA模式,省去了传输前繁琐的建立工作和传输后的清理工作,只是在传输完后将数据从内核模式缓存区复制到用户模式缓冲区。
  (3) 中断响应软件编程
  中断包括外部中断响应和DMA传输中断响应,所以需要两个线程来实现。以达到异步触发方式,一个线程用于响应FIFO的半满中断,并开始进行DMA传输。另外一个线程用于响应DMA中断,对采集上来的数据进行实时处理显示。这并不影响图像数据的采集线程。为了避免资源共享冲突,在此应用事件对象Event这一简单的同步对象,来作为中断信号量,它包括有信号和无信号两种状态,在应用程序需要处理数据资源之前,必须要等待中断信号量。在图像采集初始化中用CreateEvent()建立一个事件对象,初始设置为无信号状态,然后在DMA传输结束以及外部中断响应结束时用SetEvent设置为有信号状态。在两个中断线程中用WaitForSingleObject()来等待信号量的触发,之后再进行一系列的处理。这样就很好的避免了线程间资源共享的冲突。
  (4) DDK驱动程序编写
  利用DDK开发驱动程序比起其它开发工具例如WinDriver等来说结构清晰,效率也高。图像采集卡的驱动程序主要完成图像数据的传输功能,除此之外,还要完成通过I/O操作完成对硬件逻辑的控制,寄存器操作以及响应硬件中断等功能。当然还包括系统上电启动时的初始化功能。
  (5)GDI编程
  GDI即图形设备接口,利用GDI提供的众多函数可以方便的在显示设备上输出图形,数据等操作,使编程无需关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发和硬件设备的隔离。纯C代码具有清晰易懂,可维护性好,可移植性好,通用性强的特点。相比于C++它具有效率高,代码简单短小的优点。
  3总体的设计流程
  当打开外部照相设备时,标志采集系统与外部接口上已经有图像数据传输。此时,上位机发送采集命令给板卡。
  图像采集板卡接收数据并触发中断的过程,在此上位机软件用开线程来实现异步中断响应。这样既可以提高效率又不影响系统执行其他工作[4]。例如可以在采集卡采集数据还未达到FIFO半满的空闲期间,DMA传送停止时,还可以进行其他操作,如I/O控制。
  4 实验结论
  本采集卡使用VerilogHDL硬件描述语言建模,采用DMA双缓冲机制传输数据。通过调试证明能够完成最初的设计要求,最高可以达到80MB/s的传输速度。当同时进行数据存储和图像处理时,图像采集卡稳定进行数据传输的最高速率为20MB/s。如果只进行一项处理可以达到40MB/s的速率。