CCD系统下基于FPGA的PCI图像采集卡设计与实现
扫描二维码
随时随地手机看文章
摘要:文章设计了一种基于FPGA的CCD图像数据采集卡。以FPGA作为图像数据采集卡的核心,通过LVDS传输技术,异步FIFO,异步块RAM,SRAM缓存乒乓操作等技术,在PCI核的基础上实现了Initiator下的DMA传输;并基于VxWorks平台编写PCI图像采集卡的驱动程序。经测试和验证,PCI图像采集卡稳定可靠,能够实现数据流为60Mb/s的CCD系统图像数据的高速传输。
关键词:图像采集;PCI总线;FIFO;DMA传输;VxWorks
0 引言
CCD是一种高性能光电转换式图像传感器。由于其几何精度高、稳定性好、噪声小,广泛用于遥感遥测,天文测量等领域。现实中许多利用单片机作为控制核心,并配备其他一些外围电路实现CCD的数据采集,这种方式速度慢、集成度低。
由于CCD相机的精度和分辨率的不断提高,以及对CCD成像系统本身可靠性要求的不断提高,对数据采集系统采集速度、可靠性,以及易用性提出了更高的要求。本文设计的基于FPGA的PCI数据采集及回放系统,系统设计以Xilinx的FPGA为核心,以LVDS芯片传输过来的CCD数据为源头,运用成熟的PCI总线传输技术,实现了高速数据采集的功能。在VxWorks平台下编写了相应的驱动程序。经测试和验证,该系统稳定可靠,传输速率高,满足应用的要求。
1 系统的总体结构以及原理
整个系统由模拟前端和采集后端组成,如图1所示。前端主要由CCD镜头,CCD传感器、垂直驱动器、A/D转换器、FPGA、电源管理电路以及高速串行总线接口LVDS组成。CCD镜头把光线聚焦在CCD传感器的感光面上,CCD传感器完成光信号到电信号的转换。在驱动器的控制下完成像素电荷的转移,输出模拟信号,再经过A/D转换芯片把模拟信号转换成数字信号,经LVDS输出到后端。
采集后端的硬件主要由LVDS芯片、用作缓存图像数据的SRAM芯片、电源管理模块、FPGA组成。FPGA是整个后端采集模块的核心模块,FP GA不仅要完成数据的采集、组织、传输,还要根据PCI规范配置成标准的PCI设备,进行数据与主机之前的传送。由于数据传输要求60Mb/s的速度,所以简单的单次传输不能满足系统的整体需求。FPGA必须能支持DMA方式的数据传送。为了使PCI图像采集卡有更大的通用性,在修改最小的驱动代码的情况下跨平台地使用,须把FPGA配置成能作为主动发起DMA请求的PCI设备,从而屏蔽不同的桥芯片之间的差异。
本文主要关注采集后端,即PCI图像采集卡的硬件、逻辑、以及软件的设计与实现。
2 PCI图像采集卡回放系统硬件设计
为了提高数据传输的可靠性,降低串扰、辐射等在高速传输数据中常见的问题,PCI图像采集卡采用INDS(低压差分信号技术)进行图像数据的接收和控制数据的发送。在实际应用中,我们选择了国家半导体的DS92LV16芯片作为接收和发送数据芯片。功能框图如图2所示。
该芯片利用内部时钟把16位的并行数据转换成LVDS数据进行传输;同时可以把LVDS数据转换成16位并行数据供芯片或者可编程逻辑器件进行处理。该芯片最大传输速率可达2.56Gbps;单一的3.3V供电即可使用;较低的EMI;发送端和接收端有单独的时钟和省电管脚。
采用Xilinx公司的一片XC4VLX25-11FF668I可编程逻辑芯片,FPGA被配置成PCI接口。LX25逻辑单元可达24192个,最大分布式RAM是168 k,最大块RAM可达1296kb,并且有8个DCM供编程人员使用,LX25功耗较低,易于使用。选择FLASH芯片为XCF08P。
需要外部存储器对图像处理中的大量数据进行缓存,要求存储器存取速度快、读取时间短、实时性匹配强。选择CYPRESS公司的SRAMCY7 C1470BV33的SRAM作为数据缓存芯片。CY7C1470BV33的速度可以达到250MHz,满足系统时钟频率要求。
3 FPGA逻辑设计
3.1 总体设计
逻辑的整体设计如图3所示,当图像数据进入FPGA后,通过异步FIFO进行异步时钟域的转换。在第一个缓冲周期通过数据流选择电路将图像数据缓存到SRAM1中;在第二个缓冲周期,通过数据流选择电路将图像数据缓存到SRAM2中,同时将SRAM1中的数据经后端FIFO、PCI接口发送给主机。在第三个缓冲周期内再次通过输入数据流选择电路,把图像数据缓存到SRAM1中,同时将SRAM2中的数据经后端FIFO、PCI接口发送给主机,如此循环。由于乒乓操作的FPGA逻辑实现比较简单,这里不再赘述。下面主要来设计PCI接口的逻辑。
3.2 PCI接口的设计
PCI图像采集卡的接口设计非常重要。由于PCI总线规范复杂,设计复杂,为了加快开发周期,采用Xilinx提供的PCI core来完成PCI总线控制器的设计。PCI控制器核logic core的内部框图如图4所示。
PCI控制核主要完成用户设备和PCI总线之间的数据传输。PCI核可工作在Target传输模式和Initiator传输模式。每种传输模式又可以分单次传输和突发传输。由于单次传输速度达不到要求,我们选择突发传输模式以便提高传输速度。
Target模式下的突发传输模式相对Initiator下的突发传输模式的控制逻辑简单,但是考虑到PCI图像采集卡的可移植性,故采用Initia tor突发传输模式。在Initiator突发传输模式下,PCI图像采集卡主动向桥芯片申请PCI总线控制权,并主动传送数据;在Target模式下,必须用软件对桥芯片进行配置,也就是说PCI图像采集卡作为一个PCI从设备等待桥芯片的配置、数据读取等。所以采用Initiator下的突发传输模式逻辑控制复杂,但是移植性好。
3.3 PCI图像采集卡地址空间配置
PCI的地址空间可分为三种,分别是PCI配置空间、PCI I/O空间和PCI内存空间。
我们需要对PCI核进行配置。
Xilinx提供的PCI核提供了BAR0、BAR1、BAR2三个地址空间。这三个地址空间可以配置成内存地址空间或I/O地址空间。为了PCI图像采集卡在不同桥芯片下和不同的操作系统下工作。我们把所有的地址空间都配置成了内存空间,因为不是所有处理器都支持I/O操作。在我们的设计中,使用了BAR0和BAR1两个地址空间,配置成了内存空间,并全部配置成可以预取模式。以配制BAR0为例说明配置方法。
3.4 地址指针的设计
对于Initiator下的突发模式传输,因为从设备可以在任何时刻结束数据的传输,应用程序必须始终对地址进行跟踪,以便在Initiator再次发起传输时能得到正确的地址进行重新传送。
我们在设计的时候用了一个32bit的寄存器对地址进行跟踪,其中低2位始终为0,高30位用来保存数据。利用M_DATA_VLD信号来控制地址的增加。当M_ADDR_N有效的时候把地址输送到地址总线上。
3.5 Initiator突发数据传输状态机的实现
状态机用来控制突发模式的读写时序。整个状态机由六个状态组成,分别是IDLES、REOS、WRITES、READS、RSTS、OOPS。下面分对这六
个状态的功能进行描述。
IDLES:状态机处于空闲状态,状态机等待用户发起读或者写请求。
REOS:用户发起了传送请求。当是读请求时,状态机进入READS状态。当是写请求时,状态机进入WRITES状态。
READS:状态机一直处于数据读取状态直到传输完成,或者在传输过程中发生了不可恢复的错误。当数据正常传输完成时,状态机会跳到OOPS_S状态;当发生致命错误时,状态机会处于RSTS。
WRITES:状态WRITES和READS基本类似。不同的是数据传输方向不同。
RSTS:当状态机处于RSTS时说明整个系统发生了不可恢复的错误,必须重新复位让软硬件。
OOPS:当状态机处于OOPS状态,如果需要对前端的FIFO进行回滚操作,状态机就一直处于OOPS。如果前端FIFO检测传输完成信号,完成则进入IDLES状态,否则进入申请总线状态REQS。
3.6 异步存储器的实现
由于PCI读存储器的时钟频率和数据宽度与收发器写存储器的时钟频率和数据宽度不一致,所以要设计在两个异步时钟之间传输数据的接口电路。Xilinx自带的FIFO IP核是一种解决方案。但是由于异步FIFO没有Initiator突发数据传输下的需要的back_up信号,所以利用Xilinx自带的块RAM作为数据宽度可以控制的存储器。
4 VxWorks下驱动软件的编写
VxWorks是一种高可靠、微内核、可裁剪的实时嵌入式操作系统,由于它具有高效的实时任务调度、中断管理等优点,成为了航空、航天、医疗、通信等领域首选的实时操作系统。PCI图像采集卡的驱动就是基于VxWorks实时操作系统进行开发的。
4.1 PCI设备驱动开发
每个PCI设备都有一容量为256字节并具有特定结构的地址空间,前64个字节包含PCI接口的信息,也成为PCI配置头。其余的192个字节可以由板卡的设计自己定义。为了让VxWorks支持PCI驱动,需要对BSP中的sysLib.c文件进行修改,使得系统支持初始化配置支持库和中断支持库,以提供对PCI设备配置空间的访问租PCI中断复用功能的支持。
设备驱动程序初始化PCI图像采集卡的流程一般如下:根据PCI设备的厂商ID和设备ID号来找到PCI设备的总线号、设备号和功能号;根据总线号、设备号和功能号来映射PCI设备的地址空间;并且配置中断线性寄存器;最后使能PCI内存空间。其他寄存器要根据具体应用来配置。
4.2 数据采集方式
由于前端数据量很大,所以简单的单次传输不能满足系统的整体需求。必须用DMA方式进行传送。通知数据可以读取通常有两种模式,查询模式和中断模式。由于查询模式要大量消耗CPU资源,所以采用DMA结合中断模式进行数据采集。
对数据的采集使用乒乓操作。当写满一片SRAM中就发中断给CPU,通知数据已经准备好,这个时候驱动程序就开始读取数据,同时前端数据继续写入另一片SRAM,写满后再次发送中断。如此反复,直到PCI图像采集卡接收到应用程序的停止传送数据命令。
4.3 中断的运用和管理
在VxWorks中,中断的响应速度非常快。经测量,在我们的系统中PCI图像采集卡从发出中断到进入中断处理函数的时间为7 μs。通过函数intConnect把中断处理函数和中断向量挂接起来。
在VxWorks中,中断服务程序拥有独立于各种任务的程序上下文,所以中断服务程序不能执行需要任务上下文的函数。
5 结果验证
我们对整个系统进行了验证,CCD成像系统把采集的图像数据经变化,如加上校验和传送给PCI图像采集卡。用逻辑分析仪对PCI的一些关键信号进行了测量。如图5所示。
从图中不难看出,PCI图像采集卡一直处于数据传输状态,经测试,传输速度完全满足系统的要求。在应用程序中对图像数据进行了存盘,并计算校验和,发现校验和正确。
6 结论
本文设计的PCI图像采集卡以FPGA为核心,在PCI核的基础上用逻辑实现了PCI图像采集卡Initiator下的突发模式传输,从而实现了视频数据的高速传输。为了传输的稳定性和可靠性,使用低压差分信号技术进行图像数据的接收和控制数据的发送。最后在VxWorks平台上实现了PCI图像采集模块的驱动编写。经过测试,图像数据传输稳定可靠,传输速率也能满足系统的整体需求。