基于NiosⅡ的图像采集和显示的实现
扫描二维码
随时随地手机看文章
1 系统设计
基于NiosⅡ的高速图像数据采集和显示系统的实现通常有两种方案。一种是在NiosⅡ处理器上使用软件控制PIO(Peripheral I/O)端口模拟采集模块的时序,从而可灵活地存储图像数据,并可按照图像宏块(如8×8像素的MCU块)存入SDRAM的连续地址中;第二种方案是加FIFO缓冲区,图像数据直接经DMA控制器存储SDRAM,这种方案能节省NiosⅡ的软件开销,更高效地完成图像的采集工作。
本系统采用的FPGA为Altera的EP1C6Q240C8,它有5980个LC(逻辑门单元)和20个M4K的RAM块。本系统设计的一个11位深度的DMA控制器,需要280个Logic Cells和151个LC Registers,占FPGA整个系统资源的7.2%,其资源占用较少。本系统设计了两个DMA控制器,一个用于前端采集模块通道,一个用于后端显示模块通道。
由于CMOS和CCD的固体图像传感器的类型很多,有些传感器(如OV7620)输出的是YCrCb(4:2:2)的格式,但大多数CMOS和CCD的图像传感器出来的图像数据是Raw Data(Bayer)的数据格式。所以首先需要对这些图像数据进行CFA插补。为了节省软件开销,本系统采用了一种最简单的CFA插补算法(Bilinear),与高阶B-spline和cubic-spline等插补函数相比,图像的像质相差不大。但Bilinear的算法要简单得多,消耗的软件资源相对要少。插补后的图像需要进一步裁剪成液晶屏能显示的分辨率(QVGA),RGB分量只取高6位。
2 硬件设计
2.1 系统的硬件电路图
系统电路图如图1所示。
从图1可以看出,系统的采集、存储和显示模块的控制器都是在EP1C6Q240C8这块FPGA上完成。
2.2 FPGA中的电路设计
在FPGA中需要设计3种控制器,即CMOS采集控制器、SDRAM控制器、TFT液晶显示控制器。Altera公司提供了SDRAM的控制器,需要根据具体的SDRAM器件正确配置SDRAM控制器的时间参数,才能正常、稳定地工作。本系统采用的SDRAM型号为HY57V561620T-H,其配置参数如表1所示。
OV2610和TFT液晶的控制器如图2和图3所示。两个控制器都用硬件描述语言写用户逻辑,创建Alvalon Slave接口,直接连接到DMA控制器的主端口。通过NiosII CPU数据和程序总线写DMA的控制器字来控制数据的采集和显示。
OV2610的图像数据在TFT液晶屏上显示时,需要设计两个DMA控制器,一个用做图像数据采集通道,一个用做图像显示通道。由于OV2610图像数据的接口是数据流的形式,用FIFO存储单元来做缓存与双口RAM相比,不需要设计地址发生器,减少了FPGA内部的逻辑综合布线。具体设计包括两部分:第一部分采用硬件描述语言设计CMOS采集和液晶显示模块的时序发生器;第二部分是在NiosⅡ IDE环境下,用C语言编写DMA初始化和控制程序。
CMOS采集时序模块和TFT液晶时序发生模块都需要严格按照CMOS图像传感器和TFT液晶显示的时序设计。在CMOS采集控制器和液晶控制器的设计中,关键是设计好时序产生模块的逻辑,同时采集和显示的数据需要存储到资源有限的FIFO中。在EP1C6Q240C8内部,由于只有20个M4K的存储单元,所以资源有限。在CMOS采集控制器中,会占用11位深度2KB的FIFO存储单元;QVGA分辨率(320×240),液晶显示模块要设计9位深度512B的FIFO存储单元做显存才能满足要求。
用硬件描述语言设计采集时序模块和液晶时序发生模块的控制器。在Quartus Ⅱ Simulator中模拟的液晶时序发生控制器波形如图4所示。
CMOS图像采集时序与TFT液晶时序类似。
在SOPC平台中,要设计CMOS传感器与Avalon的接口,将数据存储到SDRAM,挂接到Avalon总线上。本系统CMOS采集时序模块和TFT液晶时序发生模块都设计成为Avalon的从设备,需要用到address、clk、reset、chipselect、read、readdata、begintransfer、endofpacket引脚。
设计TFT_LCD与Avalon的接口也需要用到clk、reset、chipselect、address、write、writedata、begintransfer、endofpacket。在SOPCbuilder4.2环境中可以创建用户自定义的元件,这里采用HDL文件描述控制器的行为。
数据传输需要按照Avalon总线从模式传输的总线接口时序进行。从图5的传输时序可以看出,流模式的数据传输与FIFO的传输时序相似,因此在FIFO与Avalon总线的接口上能够做到无缝连接。这里Avalon总线将FIFO读入DMA或Nios Ⅱ的主端口的时钟是内部总线的时钟,本系统采用80MHz。也就是说,用流模式传输的最大带宽能达到160Mbps,可满足300万像素、图像采集30帧/s的要求,比用PIO方式采集的带宽要大。图像采集系统的关键为SDRAM的存储部分。在SOPC的设计中,如果更多的主端口挂接到SDRAM控制器上,则SDRAM的仲裁电路消耗的时间就会增加,从而造成SDRAM的数据存储速度下降。当连接到SDRAM控制器的主端口过多时,就会成为图像数据传输的瓶颈。
3 系统软件设计
3.1 NiosII IDE软件环境
系统硬件要正确运行,还需要在NiosⅡ IDE的软件环境中正确地配置两路DMA的控制寄存器,同时设计好DMA的源地址和目的地址。
由于Altera为NiosⅡ处理器用户提供硬件抽象层(HAL)系统库驱动程序,允许用户使用HAL应用程序接口(API)函数访问外设,所以用户能方便地操作底层硬件。
本系统设计中,HAL层采用NiosⅡIDE提供的驱动程序,在altera_avalon_dma_regs.h文件中定义了各个DMA的控制寄存器和各个位控单元的宏定义,为编程提供了一种标准的头文件。虽然altera_avalon_dma.c文件中也提供了一些标准的DMA调用函数,但对系统速度的提高作用不大,而调用HAL层的宏可以更快地实现DMA的初始化及后续的图像数据插补。DMA控制器寄存器都是32位,共有8个寄存器(包括与Nios相比新增加的3个寄存器),包括状态寄存器、源地址寄存器、目标地址寄存器、长度寄存器及控制寄存器等。
3.2 软件实现流程
实现CMOS图像采集到液晶显示的软件流程如图6所示。
整个系统中,初始化DMA是关键,其初始化流程如图7所示。
以下给出DMA初始化的源代码:
np_dma*dma_cmos_con;
dma_cmos_con=( np_dma*)DMA_0_BASE;
np_dma* pdma=(np_dma*)dma_cmos_con;
alt_irq_register(DMA_0_IRQ,(void*)pdma,(void*)isr_dma);
pdma->np_dmacontrol=0;
pdma->np_dmastatus=0;
pdma->np_dmalength=1600*1200;
pdma->np_dmareadaddress=(int)Sdram_address;
pdma->np_dmawriteaddress=(int)na_cmos_cont;
pdma->np_dmacontrol=
np_dmacontrol_go_mask |
np_dmacontrol_i_en_mask |
np_dmacontrol_byte_mask |
np_dmacontrol_reen_mask |
np_dmacontrol_rcon_mask |
np_dmacontrol_leen_mask;
在注册DMA设备的函数中,NiosⅡ会调sys_dev_init函数完成DMA HAL层的初始化,同时指明中断服务程序的函数入口地址,而其他语句主要是完成DMA寄存器的正确配置。
3.3 数据整理
采集的原始图像数据为Bayer模式,如表2所示。而采用了CFA技术,则需要转换成BT666的数据格式,用于TFT的LCD液晶显示。由于TFT液晶像素的分辨率为QVGA(320×240),而从图像传感器采集到的图像像素为SVGA(1600×1200),所以需要裁剪原来的图像。采取了16:1的抽取方式来显示图像,这些数据的处理都可以在NiosⅡ IDE的软件环境中灵活处理。
图8便是最终调试采集到的一幅200万像素的CMOS图像。它通过在NiosⅡ的环境中采用PIO内核,遵循CompactFlash Card接口协议模拟出CF卡的控制器,同时在NiosⅡIDE的环境中通过对采集到的RAW图像数据进行整理插补还原,按照FAT16的文件系统写到CompactFlash Card中。
从采集实验得到的图像可以看出,图像的质量很好,图像的信噪比高。由此在SOPC平台上开发图像的采集和显示控制器,能增强系统的灵活性和适应性。同时,由于一些组织提供了公开的IP核,将其应用到自开发系统上,可以缩短设计开发周期,也是一种低成本的途径。这种'软'硬件全新的设计概念,将会在智能测量、自动控制、便携式仪器仪表等领域得到广泛应用。
参考文献
[1] 徐宁仪,周祖成.Avalon总线与SOPC系统架构实例[J].半导体技术,2003,(2).
[2] 方茁,陈泽文,彭澄廉.SOPC设计中的用户自定义逻辑.计算机工程,2004,(17).
[3] ALTERA Coperation.Avalon video input module application note 372 altera(Version 1.0)[Z].2004,12.
[4] ALTERA Copertion.Nios DMA,Data Sheet(Version 1.1)[Z].2003,1.
[5] ALTERA Coperation.Nios software development tutoria (Version 1.2)[Z].2003,5.