<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=272 </link><title>基于NiosⅡ的图像采集和显示的实现</title><author>cinde</author><pubDate>2009-12-04 9:55:12</pubDate><description><![CDATA[随着大规模集成电路设计技术的进步、制造工艺水平的提高以及单个芯片上的逻辑门数的增加，嵌入式系统设计变得日益复杂。把整个系统集成到一个芯片上,即片上系统<a style="color: blue; text-decoration: underline" title="SoC" href="http://article.ednchina.com/word/161638.aspx">SoC</a>(System on Chip)技术是当前嵌入式系统设计的一个研究热点。在Altera公司提供的SOPC平台上设计的基于<a style="color: blue; text-decoration: underline" title="FPGA" href="http://article.ednchina.com/word/161636.aspx">FPGA</a>的SoC系统，具有开发周期短、成本低和可重构等多种优点。
<p>　　<strong>1 系统设计</strong></p>
<p>　　基于<a style="color: blue; text-decoration: underline" title="NiosⅡ" href="http://article.ednchina.com/word/161637.aspx">NiosⅡ</a>的高速图像数据采集和<a style="color: blue; text-decoration: underline" title="显示" href="http://article.ednchina.com/word/161640.aspx">显示</a>系统的实现通常有两种方案。一种是在NiosⅡ处理器上使用软件控制PIO(Peripheral I/O)端口<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" jquery1259891640719="57">模拟</nobr>采集模块的时序，从而可灵活地存储图像数据，并可按照图像宏块(如8&times;8像素的MCU块)存入SDRAM的连续地址中；第二种方案是加FIFO缓冲区，图像数据直接经DMA控制器存储SDRAM，这种方案能节省NiosⅡ的软件开销，更高效地完成图像的采集工作。</p>
<p>　　本系统采用的FPGA为Altera的EP1C6Q240C8，它有5980个LC(逻辑门单元)和20个M4K的RAM块。本系统设计的一个11位深度的DMA控制器，需要280个Logic Cells和151个LC Registers，占FPGA整个系统资源的7.2%，其资源占用较少。本系统设计了两个DMA控制器，一个用于前端采集模块通道，一个用于后端显示模块通道。</p>
<p>　　由于CMOS和CCD的固体图像<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr77" jquery1259891640719="58">传感器</nobr>的类型很多，有些传感器(如OV7620)输出的是YCrCb(4:2:2)的格式，但大多数CMOS和CCD的图像传感器出来的图像数据是Raw Data（Bayer）的数据格式。所以首先需要对这些图像数据进行CFA插补。为了节省软件开销，本系统采用了一种最简单的CFA插补算法(Bilinear)，与高阶B-spline和cubic-spline等插补函数相比，图像的像质相差不大。但Bilinear的算法要简单得多，消耗的软件资源相对要少。插补后的图像需要进一步裁剪成液晶屏能显示的分辨率(QVGA)，RGB分量只取高6位。</p>
<p>　　<strong>2 硬件设计</strong></p>
<p><strong>　　2.1 系统的硬件电路图</strong></p>
<p>　　系统电路图如图1所示。</p>
<p align="center"><img border="0" hspace="0" alt="系统电路图" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/1.jpg" width="200" height="149" /></p>
<p>　　从图1可以看出，系统的采集、存储和显示模块的控制器都是在EP1C6Q240C8这块FPGA上完成。</p>
<p>　　<strong>2.2 FPGA中的电路设计</strong></p>
<p>　　在FPGA中需要设计3种控制器，即CMOS采集控制器、SDRAM控制器、TFT液晶显示控制器。Altera公司提供了SDRAM的控制器，需要根据具体的SDRAM器件正确配置SDRAM控制器的时间参数，才能正常、稳定地工作。本系统采用的SDRAM型号为HY57V561620T-H，其配置参数如表1所示。</p>
<p align="center"><img border="0" hspace="0" alt="配置参数" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/01.jpg" width="200" height="55" /></p>
<p>　　OV2610和TFT液晶的控制器如图2和图3所示。两个控制器都用硬件描述语言写用户逻辑，创建Alvalon Slave接口，直接连接到DMA控制器的主端口。通过NiosII CPU数据和程序总线写DMA的控制器字来控制数据的采集和显示。</p>
<p align="center"><img border="0" hspace="0" alt="OV2610和TFT液晶的控制器" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/2.jpg" width="172" height="150" /></p>
<p>　　OV2610的图像数据在TFT液晶屏上显示时，需要设计两个DMA控制器，一个用做图像数据采集通道，一个用做图像显示通道。由于OV2610图像数据的接口是数据流的形式，用FIFO存储单元来做缓存与双口RAM相比，不需要设计地址发生器，减少了FPGA内部的逻辑综合布线。具体设计包括两部分：第一部分采用硬件描述语言设计CMOS采集和液晶显示模块的时序发生器；第二部分是在NiosⅡ IDE环境下，用C语言编写DMA初始化和控制程序。</p>
<p>　　CMOS采集时序模块和TFT液晶时序发生模块都需要严格按照CMOS图像传感器和TFT液晶显示的时序设计。在CMOS采集控制器和液晶控制器的设计中，关键是设计好时序产生模块的逻辑，同时采集和显示的数据需要存储到资源有限的FIFO中。在EP1C6Q240C8内部，由于只有20个M4K的存储单元，所以资源有限。在CMOS采集控制器中，会占用11位深度2KB的FIFO存储单元；QVGA分辨率(320&times;240)，液晶显示模块要设计9位深度512B的FIFO存储单元做显存才能满足要求。</p>
<p>　　用硬件描述语言设计采集时序模块和液晶时序发生模块的控制器。在Quartus Ⅱ Simulator中模拟的液晶时序发生控制器波形如图4所示。</p>
<p align="center"><img border="0" hspace="0" alt="在Quartus Ⅱ Simulator中模拟的液晶时序发生控制器波形" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/4.jpg" width="199" height="109" /></p>
<p>　　CMOS<a style="color: blue; text-decoration: underline" title="图像采集" href="http://article.ednchina.com/word/161639.aspx">图像采集</a>时序与TFT液晶时序类似。</p>
<p>　　在SOPC平台中，要设计CMOS传感器与Avalon的接口，将数据存储到SDRAM，挂接到Avalon总线上。本系统CMOS采集时序模块和TFT液晶时序发生模块都设计成为Avalon的从设备，需要用到address、clk、reset、chipselect、read、readdata、begintransfer、endofpacket引脚。</p>
<p>　　设计TFT_LCD与Avalon的接口也需要用到clk、reset、chipselect、address、write、writedata、begintransfer、endofpacket。在SOPCbuilder4.2环境中可以创建用户自定义的元件，这里采用HDL文件描述控制器的行为。</p>
<p>&nbsp;</p>
<p>　　数据传输需要按照Avalon总线从模式传输的总线接口时序进行。从图5的传输时序可以看出，流模式的数据传输与FIFO的传输时序相似，因此在FIFO与Avalon总线的接口上能够做到无缝连接。这里Avalon总线将FIFO读入DMA或Nios Ⅱ的主端口的时钟是内部总线的时钟，本系统采用80MHz。也就是说，用流模式传输的最大带宽能达到160Mbps，可满足300万像素、图像采集30帧/s的要求，比用PIO方式采集的带宽要大。图像采集系统的关键为SDRAM的存储部分。在SOPC的设计中，如果更多的主端口挂接到SDRAM控制器上，则SDRAM的仲裁电路消耗的时间就会增加，从而造成SDRAM的数据存储速度下降。当连接到SDRAM控制器的主端口过多时，就会成为图像数据传输的瓶颈。</p>
<p align="center"><img border="0" hspace="0" alt="传输时序" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/5.jpg" width="200" height="68" /><strong>3 系统软件设计</strong></p>
<p><strong>　　3.1 NiosII IDE软件环境</strong></p>
<p>　　系统硬件要正确运行，还需要在<a style="color: blue; text-decoration: underline" title="NiosⅡ" href="http://article.ednchina.com/word/161637.aspx">NiosⅡ</a> IDE的软件环境中正确地配置两路DMA的控制寄存器，同时设计好DMA的源地址和目的地址。</p>
<p>　　由于Altera为NiosⅡ处理器用户提供硬件抽象层(HAL)系统库驱动程序，允许用户使用HAL应用程序接口(API)函数访问外设，所以用户能方便地操作底层硬件。</p>
<p>　　本系统设计中，HAL层采用NiosⅡIDE提供的驱动程序，在altera_avalon_dma_regs.h文件中定义了各个DMA的控制寄存器和各个位控单元的宏定义，为编程提供了一种标准的头文件。虽然altera_avalon_dma.c文件中也提供了一些标准的DMA调用函数，但对系统速度的提高作用不大，而调用HAL层的宏可以更快地实现DMA的初始化及后续的图像数据插补。DMA控制器寄存器都是32位，共有8个寄存器(包括与Nios相比新增加的3个寄存器)，包括状态寄存器、源地址寄存器、目标地址寄存器、长度寄存器及控制寄存器等。</p>
<p>　　<strong>3.2 软件实现流程</strong></p>
<p>　　实现CMOS<a style="color: blue; text-decoration: underline" title="图像采集" href="http://article.ednchina.com/word/161639.aspx">图像采集</a>到液晶<a style="color: blue; text-decoration: underline" title="显示" href="http://article.ednchina.com/word/161640.aspx">显示</a>的软件流程如图6所示。</p>
<p align="center"><img border="0" hspace="0" alt="现CMOS图像采集到液晶显示的软件流程" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/6.jpg" width="170" height="150" /></p>
<p>　　整个系统中，初始化DMA是关键，其初始化流程如图7所示。</p>
<p align="center"><img border="0" hspace="0" alt="初始化流程" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/7.jpg" width="164" height="150" /></p>
<p>　　以下给出DMA初始化的源代码：</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/02.jpg" width="399" height="314" /></p>
<p>　　在注册DMA设备的函数中，NiosⅡ会调sys_dev_init函数完成DMA HAL层的初始化，同时指明中断服务程序的函数入口地址，而其他语句主要是完成DMA寄存器的正确配置。</p>
<p>　<strong>　3.3 数据整理</strong></p>
<p>　　采集的原始图像数据为Bayer模式，如表2所示。而采用了CFA技术，则需要转换成BT666的数据格式，用于TFT的LCD液晶显示。由于TFT液晶像素的分辨率为QVGA(320&times;240)，而从图像<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr77" jquery1259891695683="57">传感器</nobr>采集到的图像像素为SVGA(1600&times;1200)，所以需要裁剪原来的图像。采取了16：1的抽取方式来显示图像，这些数据的处理都可以在NiosⅡ IDE的软件环境中灵活处理。</p>
<p align="center"><img border="0" hspace="0" alt="采集的原始图像数据为Bayer模式" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/03.jpg" width="199" height="87" /></p>
<p>　　图8便是最终调试采集到的一幅200万像素的CMOS图像。它通过在NiosⅡ的环境中采用PIO内核，遵循CompactFlash Card接口协议<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" jquery1259891695683="58">模拟</nobr>出CF卡的控制器，同时在NiosⅡIDE的环境中通过对采集到的RAW图像数据进行整理插补还原，按照FAT16的文件系统写到CompactFlash Card中。</p>
<p align="center"><img border="0" hspace="0" alt="最终调试采集到的一幅200万像素的CMOS图像" src="http://pagesadmin.ednchina.com/images/article/839a333c-aa71-4c76-a462-fc401f5020df/8.jpg" width="184" height="150" /></p>
<p>　　从采集实验得到的图像可以看出，图像的质量很好，图像的信噪比高。由此在SOPC平台上开发图像的采集和显示控制器，能增强系统的灵活性和适应性。同时，由于一些组织提供了公开的IP核，将其应用到自开发系统上，可以缩短设计开发周期，也是一种低成本的途径。这种'软'硬件全新的设计概念，将会在智能测量、自动控制、便携式仪器仪表等领域得到广泛应用。</p>
<p>　　<strong>参考文献</strong></p>
<p>　　[1] 徐宁仪，周祖成.Avalon总线与SOPC系统架构实例[J].半导体技术，2003，(2).</p>
<p>　　[2] 方茁，陈泽文，彭澄廉.SOPC设计中的用户自定义逻辑.计算机工程，2004，(17).</p>
<p>　　[3] ALTERA Coperation.Avalon video input module application note 372 altera(Version 1.0)[Z].2004，12.</p>
<p>　　[4] ALTERA Copertion.Nios DMA，Data Sheet(Version 1.1)[Z].2003，1.</p>
<p>　　[5] ALTERA Coperation.Nios software development tutoria (Version 1.2)[Z].2003，5.</p>]]></description></item></channel></rss>