Profile - CN306


CN306

基于Nios II的手持式PDF417码识别器的设计

山东科技大学
信息科学与工程学院






Advisor

Name: 陈新华

Members

No. Name English Name
1 姜英 jiangying
2 朱孔乐 zhukongle
3 惠磊 huilei

Project Paper

1. 设计概述 (Preliminary Paper)

设计概述

条码识别技术是以计算机、光电技术、图像处理和通信技术的发展为基础的一项综合性科学技术,是信息数据自动识别、输入的重要方法。在众多自动识别技术中,条码技术越来越被人们所认识和接受,己成为一种推动经济发展和社会进步的重要力量。

 

以往一提到条码, 人们就会想到那些密度不等黑白相间的条型图案。从技术角度讲, 这就是一维条码。一维条码的使用, 提高了数据采集和信息处理的速度,提高了工作效率。但一维条码最大不足之处,就是它表示信息量有限。实际应用中,它依赖一个有效的外部数据信息库,而其本身只是一个唯一性代码,离开数据库,这个代码对管理而言,就无任何意义。现代社会的发展, 迫切要求条码符号能在有限的几何空间内表示尽量多的信息, 二维条码就是在这一背景下诞生的新一代自动识别符号。

二维条码是不依赖计算机网络和数据库存储、转移信息的一种方法,其本身即可表征大量信息,是信息的另一种表示形式, 是信息携带、信息自动传递、信息防伪的理想手段。国际使用的二维条码有: PDF417、Code49、Code16K码、DataMatrix码、MaxiCode码等,主要分为堆积或层排式和棋盘或矩阵式两大类。图1.1b)为表示“PDF417”的417条码。

 

 

        在二维条码中,应用最广泛的是PDF417。它以其高密度、高信息容量、纠错能力强、成本低等特点, 广泛应用于国际贸易、物流、工业、商业等领域, 已经取得了巨大的社会效益和经济效益。其码制公开已形成国际标准,我国也已制定了417的国标。随着PDF417应用的推广,对条码阅读器的需求也越来越多。虽然国内也出现了一些PDF417二维条码阅读器产品,但是大多数是基于美国symbol公司的激光阅读器,价格相对较高,本课题的主要目的就是设计一种相对低廉的图像式二维PDF417条别器。

         我们选择Altera公司的Nios II软核为系统核心,采用MICRON公司的CMOS数字摄像芯片MT9T001采集二维条码数据,并利用高速存储器扩展芯片,配合先进的译码算法,实现了高效准确的实时处理,完成对二维条码所包含的信息的获取,最终将数据进行显示。该系统在Altera 的Cyclone FPGA 上实现。

         选择Nios II软核的原因有以下几点

    1. Altera公司的Nios II处理器是用于可编程逻辑器件的可配置的软核处理器。作为一种可配置的RISC嵌入式软核处理器,实现了硬件可编程,使用集成在QuartusII 中的SoPC Builder 开发组件可以灵活地配置生成片上系统,参数调整方便;Altera的低成本的Cyclone FPGA组合,成为软硬件紧密融合的系统,具有很高的性能价格比。它可与各种各样的外设、定制指令和硬件加速单元相结合,根据需求进行裁剪,构成一个符合需求的SoPC。

        2.NiosII处理器是5级流水线设计,采用数据和指令分离的Harvard结构,性能超过200 DMIPS。具有32位指令集,32位数据通道和可配置的指令以及数据缓冲,系统的处理速度快。支持256个具有固定或可变时钟周期操作的定制指令,可以扩展CPU指令集,提升那些对时间敏感的应用软件的运行速度。

    3. NiosII处理器支持自定义逻辑和硬件加速。把自定义的数据读取模块和数据处理模块直接添加到NiosII ALU中去,使以Nios II 处理器为核心的系统能够快速地完成读取图像数据和复杂数据运算的任务。用Nios II C2H编译器可以大幅提高软件性能。完全可以代替专用的DSP芯片实现大量的条码图像数据处理,从而大大降低产品成本。

4. 利用NiosII强大的集成开发环境,可以方便的实现硬件系统的搭建和相关软件的生成,大大缩短开发周期。另外,Nios II IDE开发环境集成了已经移植到Nios II 处理器的RTOS uc/osII操作系统,可以方便地直接利用该操作系统完成系统的功能设计及功能行扩展。

 

(Revision: 11 / 2008-09-16 09:31:58)

2. 功能描述 (Final Project Paper)

 

二、功能描述
 
 
 
 
       本系统可以处理编码内容包括数字、汉字、英文字符、标点的PDF417条码,对有一定污染、破损的条码也可以实现正确的的识别和译码。
 
系统主要部件和功能:
 
2.1.数据采集系统
       CMOS Sensor摄像头、I2C、CMOS_Controler、Verilog HDL 图像预处理模块、自定义SDRAM 控制器、SDRAM控制器切换模块。
(1)CMOS摄像头:通过GPIO1与开发板的FPGA芯片连接,完成控制信号、配置信号和图像数据的传递,进行动态条码图像数据采集。
(2)Capture:驱动、控制CMOS Sensor图像数据采集并将动态数据流传入。
(3)Verilog HDL 图像预处理模块:将CMOS采集的图像数据进行格式转换。利用Verilog HDL 编写数据格式转换代码,将图像数据由Bayer转换成RGB格式,再将RGB格式的数据转换成灰度图像后,通过4端口SDRAM 控制器存入SDRAM1中。这个过程在FPGA中由HDL完成,不占用CPU资源,而且可以减少存储空间。
(4)4端口SDRAM控制器:根据CMOS的时序和数据格式,使用硬件的方式将Verilog HDL预处理后的图像数据直接存入SDRAM1,不用访问Avalon总线,不占用CPU资源,速度快。
(5)SDRAM端口切换模块:由于图像数据的存储使用Verilog HDL实现的,而数据的获取需要Nios II 控制,所以设计SDRAM1端口切换模块,将硬件获取的原始数据以及通过硬件语言边缘检测后的数据通过4端口SDRAM控制器存到SDRAM1,之后由KEY2键控制把SDRAM1挂在SOPC系统中的SDRAM控制器上,这样NIOS II就可以通过SOPC系统中Avalon总线上的SDRAM控制器对已存到SDRAM1中的数据进行处理,调用软件部分进行译码。
 
2.2.SOPC系统
       系统选用快速Nios II/f系统,SDRAM Controler、SRAM Controler、Tri-state Bridge、JTAG Uart等模块。Nios II 系统是系统的核心部分,主要完成控制和软件译码功能。由于二维条码图像处理需要大量的数据处理,需要的CPU速度比较快,采用Nios II/f速度可以达到101DMIPS;带有硬件浮点运算指令、可以配置的高速缓存,可以加快程序的运行速度。
 
2.3.显示部分
显示部分采用开发板上LCD实现。
 
2.4.条码识别器的具体操作:
       按下KEY0键,系统复位;按下KEY3键COMS传感器采集条码图像数据到SDRAM1;按下KEY2键,条码识别器处理图像、译码、显示条码内容。KEY1与SW[15:0]结合控制CMOS传感器曝光时间,根据现场光线条件的不同,设置不同的曝光时间,可以提高图像的采集质量。
系统上电复位后,先按KEY3键,启动数据采集系统,使CMOS摄像头采集条码图像数据到存储器,再按KEY2键,启动SOPC译码系统,经过图像处理和译码后,将译码得到的条码内容,在LCD上显示。
(Revision: 11 / 2008-09-16 09:07:52)

3. 性能参数 (Final Project Paper)

 

三.性能参数
 
        条码识别器的关键性能是准确性和实时性。本设计的主要参数有以下几点:
        3.1.本系统功能较强准确度较高
        由于缺少条码源,我们测试不可能测试任何情况的PDF417条码图像,但是在我们所测试的图像中,译码成功率达到90%。对于不同的错误纠正等级,可以识别不同污损程度的条码。可识别倾斜角在45度之内的条形码。要求所识别图像中只能有一个条码,且条码图像背景亮度不能低于100(灰度等级为0-255)。
        3.2.系统完成一次识别译码大约需要6s左右的时间。
 
可识别条码类型
符合GB/T17172—1997编码标准的PDF417二维条码
对条码的要求
图像中只能有一个PDF417条码
倾斜角
45度以内
背景亮度
不低于100(灰度等级为0-255)
识别速度
6S左右

 表3.1 主要性能参数

       3.3.本系统硬件资源利用率为平均20%
       使用的是DE2-70的硬件开发板,配置比较高,Cyclon II EP2C70F89606 型FPGA芯片集成有300个9*9的嵌入式乘法器,能实现通用的数字信号处理功能,与基于逻辑单元的乘法器相比,嵌入式乘法器性能更高,占用逻辑单元更少。本系统使用了47个嵌入式乘法器。整个系统的FPGA资源具体数据利用比例如图3.1下图所示。

图3.1 FPGA资源利用率

         3.4. 系统的实时性有了很大提高
       原来边缘检测和哈夫变换均在软件部分实现,整个过程有可能达到一分多钟,是整个系统运行的最大瓶颈,采取的解决办法是:把边缘检测提前到图像采集之后,由Verilog HDL硬件描述语言实现,通过4端口SDRAM控制器把边缘检测后的图像数据与采集到的原始图像数据存到开发板第一片SDRAM中的两个位置,并把哈夫变换从软件上做了很大的改进,最终,哈夫变换部分可在1.3秒左右就可以实现。DSP Builder生成的中值滤波硬件加速协处理器,可以消除复杂算法的中值滤波性能瓶颈。提高了整体系统性能的20%-30%。

 

(Revision: 11 / 2008-09-16 09:07:29)

4. 设计结构 (Preliminary Paper)

 

四、设计结构

 

4.1系统硬件组成
 
4.1.1.系统硬件框图如图4.1所示。
 
                        

   图4.1系统硬件框图

4.1.2. MT9T001接线示意图如图4.2所示。

 

        

4.2 MT9T001接线示意图

4.2 软件流程 

整个系统的软件部分大致分为设备初始化、条码图像采集、译码、条码内容显示等几部分。软件流程图如图4.3所示。

 

       

 4.3  系统软件流程图

4.3 译码流程

 译码流程如图 4.4 所示。

 

 

 4.4  译码流程图

 

 

 

 

 

 

(Revision: 27 / 2008-09-16 09:06:08)

5. 设计方法 (Final Project Paper)

五、设计方法

在系统设计中,我们分别同时从硬件平台搭建和软件算法设计两方面入手。
 
5.1.硬件平台搭建的过程中所遇到的困难主要有:
 
5.1.1.摄像头采集的图像数据格式与我们想要处理的数据格式不匹配的问题。MT9M011使用一种Bayer颜色格式来存储原始图像数据,友晶公司的一个设计范例中也只不过把它处理成了30位真彩位图的格式,而且把每个像素数据都截成了两部分分两个地址存放在SDRAM中;而我们想要处理的最终数据是8位的只有黑(0值)、白(0xFF值)两种颜色的位图数据,这样数据格式的转换就成了我们面临的第一个问题。当然它在软件部分也完全可以实现,可显然不如在硬件语言的处理部分解决更合适。
5.1.2.图像数据处理转换后的存储格式问题。由于开发板上的SDRAM是16位的,可用的SDRAM控制器也都是以16位数据为单位来存取;但我们经过硬件语言预处理后的数据格式是8位的,若把其它的8位闲置是不合适的,会造成大量的存储空间的浪费。
5.1.3.图像采集子系统和SOPC微处理器子系统的交流的问题,也就是说怎样把图像采集子系统采集的并经过简单处理的数据为Nios II所用。SDRAM无疑是解决这个问题的关键,但它是一种使用最为复杂的存储器,可用的SDRAM_Conroller代码晦涩难懂,曾经想过不用SOPC系统中的SDRAM控制器,而只用图像采集子系统中的4端口SDRAM控制器来实现图像数据的交流,但用4端口SDRAM控制器来实现后续的海量的数据存取操作是不合适的。
5.1.4.第三个问题解决后,图像采集子系统中4端口SDRAM控制器的存取数据和SOPC子系统中所生成的SDRAM控制器的存取数据不一致的问题。
5.1.5.硬件平台的修补问题。图像采集系统与SOPC系统搭建完成,软件算法部分通过C语言也完全实现后,往Nios II中移植代码的一系列问题,主要是一些大量数据操作的算法如边缘检测、哈夫变换、中值滤波、图像旋转、双线性插值等在Nios II中运行超慢的问题,这就需要在硬件部分做加速。
 
5.2.软件算法设计的过程中所遇到的困难主要有:
5.2.1.图像预处理中所遇到的一系列问题。
图像预处理的各个算法(像灰度化、二值化阈值选取、中值滤波、边缘检测、哈夫变换等等)是基本一定的,但至于具体的实现步骤和方法却众说纷纭,且开源的源码可信度不高,设别率甚低,怎样把这些算法比较合理地综合起来并用C语言实实在在的实现,是我们在软件算法设计方面所面临的第一个问题。
5.2.2.条空识别部分。这部分的实现所找到的算法处理过程过于简单、通用性甚低,且无参考源码,完全自创完成。
5.2.3.译码部分所遇到的问题。主要出现在R-S译码部分,怎样求解大量高阶线性方程组。
 
以下是整个系统设计的实现过程也即上述问题的具体解决方法
 
5.3.硬件平台搭建设计

5.3.1.图像采集子系统部分
 MT9T001 CMOS 摄像头采集的数据通过DE2-70的GPIO1传入FPGA。在FPGA中,通过Verilog HDL 的图像处理模块进行数据格式转换和初步的图像处理。CMOS采集的图像数据格式为Bayer 格式,不适合直接进行存储和数据处理。利用Verilog HDL 编写数据格式转换代码,将图像数据由Bayer转换成RGB格式,再将RGB格式的数据转换成灰度图像,并截取前8位数据,实现了图像格式的转换并省出了4端口SDRAM的一个端口留作它用。
为了缓解软件译码部分的压力,我们把条码识别所需的图像处理算法尽量前移到Verilog预处理的步骤中来做。
灰度化、中值滤波和边缘检测便是其中典型的几个例子,但由于整个过程是串行操作的,这样中值滤波之后的数据与边缘检测之后的数据便产成了冲突(这两幅图像在以后的软件部分都要用到),为解决这个问题,我们利用SDRAM存储量充足的优势和4端口SDRAM控制器可实现双存取的便利,把中值滤波之后的图像分两路,一路经过边缘检测,另一路不经过,在分别经过后续的处理存到SDRAM的两个位置。由于灰度化后的图像是8bits,而SDRAM是16bits位宽,由一个8to16的数据位宽转换模块通过4端口SDRAM 控制器存入SDRAM1中。在   Quartus II 中设计各个模块,在整个系统的top文件中调用这些模块。其中,4端口SDRAM 控制器的一个读端口连接VGA,用于实时显示条码图像数理过程,便于调试,在实际应用中,将VGA去掉即可。摄像头控制模块图如图5.1所示:

5.1 摄像头控制模块图
 
5.3.2.SOPC系统部分:
    整个系统的CPU系统并不复杂,都是一些必须的器件。鉴于在后来的软件测试中发现双线性插值的瓶颈,几经考虑,决定去掉用已具备IP核的中值滤波模块来代替(虽然中值滤波在Verilog语言处理部分已经实现,但那部分代码是不能为Nios II系统所调用的)。把中值滤波的IP核,挂到SOPC的Avalon总线上,是SOPC搭建过程中的最大的难点。
    已知在Matlab/Simulink中的Altera Dsp Builder Blockset 中已存在中值滤波模块(median_filter_2d_v7_2),因此我们可以利用这一IP核,来完成中值滤波模块的设计。为将median_filter_2d_v7_2成功的挂到nios系统上,需要设计遵循Avalon总线接口协议的Avalon总线接口,如图5.2所示,我们采用的是Altera Dsp Builder Blockset自带的Avalon-Read MM FIFO和Avalon-Write MM FIFO来实现中值滤波Read Slave和Write Slave接口,选择FIFO是为了实现cpu与median_filter模块的流量控制。
5.3.3.Median_filter自定义组件的设计:
a.在Matlab/Simulink中建立median_filter模型,如图5.2所示。
 
图5.2.median_filer及avalon-MM接口在simulink中建模
 
b.利用Signal Compiler生VHDL。
c.生成自定义组件,挂到nios系统上。

  图5.3.median_filter_2d_v7.2在SOPCBuilder里的设定

5.4.硬件平台中各子系统的磨合。
5.4.1. 同一片SDRAM分时的挂在两个子系统上,可实现数据的交流,到也会造成数据的干扰。主要是由于SDRAM端口的数据端口类型是inout的,不能用其他端口的“assign 端口=转换开关值?图像采集系统的4端口SDRAM控制器:SOPC中的SDRAM控制器”模式来处理。解决方法是:把转换开关值分别传到两个子系统中,确保SDRAM不挂在本系统时,本系统的SDRAM控制器没有写信号输入就可以了。
5.4.2.友晶公司提供的4端口SDRAM控制器与SOPC Builder中自动生成的控制器是不兼容的,造成了图像采集系统存入的数据与SOPC系统取出的数据不同的问题,后来发现是友晶公司提供的4端口SDRAM控制器与SOPC Builder中自动生成的控制器地址线的配置不一致造成。把4端口SDRAM控制器的地址一改,此问题便迎刃而解了。
 
5.5. 软件算法设计 
 
5.5.1二维条码识读涉及主要技术问题包括:
a.彩色图像做灰度化处理。
b.二维条码的检测。
c.二维条码的定位分割。
e.条码字符的识别。
f.二维条码译码运算。 
 
5.5.2.PDF417条码图像的预处理 
 
(1).彩色图像的灰度化(已前移到Verilog语言中实现)
灰度图像就是只有强度信息而没有颜色信息的图像, 存储灰度图像只需要一个数据矩阵, 矩阵每个元素表示对应位置像素的灰度值。彩色图像的像素色为 RGB, R, G, B可由彩色图像的颜色分解获得。因此可以通过R,G,B图像中所带的颜色信息求出图像中每个像素的亮度信息。计算方法如下:

Gray=R*0.299+G*0.587+B*0.114

(2)..灰度图像的二值化
 
 
       灰度图像的灰度值在0-255之间,二值化处理过程就是取一阈值T,小于T的灰度值将其设为0,大于T的灰度值将其设为255。
 
(3).中值滤波 (已前移到Verilog语言中实现,并把DSP Builder中的中值滤波IP核挂到SOPC系统中以自定义器件的方式实现)
       中值滤波也是一种典型的低通滤波器,它的目的是保护图象边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y)为中心的小窗口内的所有象素的灰度按从大到小的顺序排列,将中间值作为(x,y)处的灰度值(若窗口中有偶数个象素,则取两个中间值的平均)。
       此算法在图像二值化后运用了一次,在条码旋转之后又运用了一次,已通过不同的方法由硬件语言实现。
(4).PDF417条码的旋转定位       
a.哈夫变换及其优化:       
        Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。
        由于哈夫变换算法运算量极大,经测量已成为整个系统运行的瓶颈;而且,其实现方法相当复杂,又多浮点运算,限于水平及时间关系,不易用硬件描述语言实现,只能从优化软件代码方面做考虑。
        哈夫变换的终极目标是找出条码的旋转角度,在条码图像上,经边缘检测后,找出穿过最多边沿点数的那条直线,找出其角度,即可实现此目的。常规情况下,找到这条直线,需对边缘检测图像上的每一个点做哈夫域的变换(每点都需上百次),但我们发现即使只对图像的1/4做哈夫变换也可找到所需直线(前提是做好条码的定位),这样就使运算量缩减为原来的1/4;再者,当图像的长宽比过小时,有可能检测到条码垂直方向的偏转角度,我们由此做了只对图像旋转-45°~+45°之间的直线做检测(在实际生活中,偏出45°已经相当离谱了),这样就又缩减了1/2的运算量;其三,把正余弦变换做表,并乘以1024取整,在运算时通过查表及整型数相乘再右移10位来实现。
       结果证明,主要经上述3个方面的改造以及把Sobel边缘检测部分前移到图像采集部分由硬件语言实现后,哈夫变换代码实现了精度基本没变,时间大幅度缩减的效果。
 b.旋转及其优化: 
        哈夫变换之后找到了条码图像倾斜的角度,便可通过这个角度对条码进行旋转,使其成为水平垂直的图像。图像旋转其实就是一个图像空间到另一个空间的转换:
假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x0, y0)绕其中心(xcenter, ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为:xcenter = (right - left + 1) / 2 + left;ycenter = (bottom - top + 1) / 2 + top;x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;
         旋转之后,为了弥补由于旋转而在新生成的图像上缺失的点,需对图像进行差值,我们选择的双线性插值,大量的浮点运算使得其运算速度与哈夫变换有得一拼,最终我们的以对付哈夫变换的方法来对付旋转,即把正余弦值乘以8192取整,最后再把结果右移13位。但可惜的是效果不明显。后来花费了很长的时间,发现是SDRAM存取的问题,便充分利用两个SDRAM优势,实现了存取数据的分离,并把差值部分省掉,又进行了一次中值滤波,才使效果大大改善。
 
5.5.3.识别PDF417条码的行数和行高 
        由于PDF417条码由多行结构组成,要对每行依次识别,就首先需要知道条码的行数R和行高Y,才能将条码的每一行分开来,逐行进行识别。计算条码的行数、行高时对图像采用Sobel水平边缘检测算子进行水平边缘的提取:再进行水平投影,由于行与行之间存在着边缘较明显,所以水平投影之后,在每一行的边界处的水平投影值较高,只要这些值大于某一阈值便可以确定为边界。由于噪声的存在,水平边缘检测不是很理想,因此在投影之后就会造成在行界的投影值之间存在着又一或多个峰值,因此在通过差分求取边界时容易误认为是边界,因此在进行差分之前要对投影进行Guass卷积运算,以滤除这种峰值,是边界处投影之间的峰峰之间较平滑。然后,对卷积后的数值进行一阶差分和二阶差分,分别找出一阶差分为零,二阶差分为负且投影值大于阈值的点,这些点即是边界处,通过数出这些点的数量就是条码的行数。
 
5.5.4.条空识别 
        根据已求出的边界对条码进行分割,分割出每一行,然后对每一行进行竖直全投影,根据投影求出求出黑白间隔的值。根据PDF417条码的开始信息,求取模块的宽度。黑白间隔值除以模块的宽带并按每8个为一个码字的条空编码。通过这些条空查找数据表求得码字。
 5.5.5.译码PDF417采用了三种数据压缩模式设置来组成字符集。 
(1).文本压缩模式(TC)
a.收到码字/30,商为高位字符值, 余数为低位字符值;
b.由字符值确定是哪种子模式;
c.查找该子模式下,字符值对应的文本值,恢复原始信息。
(2).压缩模式(BC)
        当所要表示的字节总数不是6的倍数时,用码字901锁定;否则用924锁定,码字转移为该模式,通过基 256至基 900的转移,将2位十六进制的数据序列转换为码字序列。
(3).字压缩模式(NC)码字为902时锁定该模式,通过基10至基900的换算, 实现数据位数的压缩, 能把约3个数字位用一个码字表示。当数字位数大于13,用数字压缩模式;数字位数小于13, 用文本压缩模式。算法如下:
a.每15个码字从左到右分为一组( 每15个码字可转换为44个数字位),其最后一组码字可少于 15个。
b.对于每一组码字先执行基900至基10的转换,然后去掉前导位 1。 
 
5.5.6.RS纠错译码 
 
其译码步骤主要分为三步:
第一步由收到码字R(x)计算d-1个伴随式分量Sj;
第二步由伴随式求错误位置多项式,得出错误图样E(x);
第三步由R(x)-E(x)得出最可能发送的码字C(x)。
 
5.5.7设计实例及其效果
 
 
图5.4.图像采集系统采集、处理并存储到SDRAM中的原始图像
 
注:此图及下图是由图像采集系统采集、处理并存储到SDRAM中后,下载友晶提供的DE2-70的控制面板,由控制面板提取,通过PC机上的编的C程序以位图格式显示的(上传时已改变格式)。
 
图5.4.图像采集系统采集、处理经过边缘检测之后的并存储到SDRAM中的图像
图5.6 在Nios IDE中运行程序显示的结果
 
验证:
 
由于整个译码程序是先在PC机上的VC环境下编译通过,再移植到Nios II下编译修改的。我们把从SDRAM中的图像,运用先前编好的PC上的C语言程序做了验证
 
 
 以下是C语言程序条码条空识别后的数据:
81111113 21111524 11151116 23332112 11234231 42211331 31111235 71131112 1
81111113 61111232 41232113 21325112 51111323 21214412 41111513 71131112 1
81111113 21111254 21112163 12542111 12221135 14412221 31111262 71131112 1
81111113 41121242 11151413 15122321 31211522 32231321 11115152 71131112 1
81111113 31113323 61212131 11215412 21143312 22143311 21113612 71131112 1
81111113 41114213 51114221 12151142 11131442 11312234 51114221 71131112 1
81111113 11124341 12131315 23231213 21211316 23122133 11123234 71131112 1
81111113 11116232 31124231 53211113 12511331 12225113 51121223 71131112 1
81111113 11122253 23121251 12121145 63112211 53113211 21122261 71131112 1
81111113 21141125 13222115 43111142 14121611 41322131 11132522 71131112 1
81111113 31123223 13235111 31115141 51211412 21163112 21123512 71131112 1
81111113 11131442 13331321 11122352 12512411 11251232 11131541 71131112 1
81111113 11151314 12323114 41111144 31121432 12123134 11143331 71131112 1
81111113 41131214 21114521 22315112 21133115 33113222 31132115 71131112 1
81111113 21151151 11212442 63122111 11442122 13431311 11151242 71131112 1
81111113 32112242 13113233 14223221 14232212 14213321 22111424 71131112 1
81111113 21134321 51111125 12114512 42121412 31113323 11135321 71131112 1
81111113 12113261 21311333 14121143 22612211 23112161 52113311 71131112 1
81111113 22121126 32312222 11141513 41112152 11112326 31211324 71131112 1
81111113 11144312 12126131 51121421 42111314 63311111 41151212 71131112 1
81111113 32121161 22411124 23112161 22311134 52114121 11212145 71131112 1
81111113 12123134 51211142 14111513 21122234 14142221 32122241 71131112 1
81111113 52111223 21134321 11115323 21123611 52112132 42111512 71131112 1
81111113 41215112 22116113 22121252 23521211 14341121 42124211 71131112 1
81111113 32131232 31211423 42111341 11111615 24231113 21221513 71131112 1
81111113 22113512 12611321 51221312 11134511 13115123 22114223 71131112 1
81111113 11222441 22511411 14221331 23521211 13431113 62132111 71131112 1
81111113 11224331 12313115 23322113 12233222 43211132 12132521 71131112 1
81111113 51211412 23134121 33122114 11124413 26123111 42121214 71131112 1
81111113 12142151 51123311 12522212 12522212 22612211 11233151 71131112 1
81111113 12142124 21161222 31111136 21131324 11222315 31232231 71131112 1
81111113 22123115 43111412 13215113 43222211 44131112 21214214 71131112 1
 
 
 
图5.7.DOS控制台下C程序的运行结果
 
 
 

 

(Revision: 39 / 2008-09-16 09:11:25)

6. 设计特点 (Preliminary Paper)

 

六、设计特点
本设计主要有一下特点:
6.1、操作简单、使用方便  
        使用时,识别器与显示器连接,只需扫过印有二维条码的标签,显示器就能立即显示出该条码内所包含的各种信息。与激光扫描式识别器相比,这种基于图像识别器不需要手动对齐条形码,使识别更自动化和智能化,且避免了激光扫描式设备因机械振动而缩短使用寿命的缺点。
6.2、性价比高,功耗低
        本设计采用了ALTERA 的32位NIOS II软核为系统cpu,NIOS II可工作在100Mhz以上,为实现快速识别条码提供了有利的保证。所有识别工作可在单FPGA芯片上实现,芯片资源利用率较高,节省成本,并且本设计所用FPGA芯片所需电压只需3.3V,保证了系统的低功耗。
6.3、基于FPGA的现代DSP设计技术
      本设计利用了Matlab/Sinulink与Dsp Builder中丰富的功能模块和IP核进行设计,可快速的完成DSP算法的设计和仿真。Dsp Builder可作为Matlab仿真设计到硬件语言设计的接口,利用这一特点,可以方便的设计出本设计所需的中值滤波模块。对于某些简单的可用硬件描述语言来实现的模块采用Verilog HDL直接编写而成,如图像灰度化、二值化、边缘检测模块。
6.4、高度集成的SOPC技术,内嵌自定义模块
        大部分的硬件系统是采用SOPC技术搭建而成,集成到一片FPGA芯片上。有些处理过程已做成单独的模块形式,这些模块已自定义组件的形式挂在到NIOS II系统上。在设计自定义组件的过程中,充分考虑到易于实现,缩短开发周期,尽量用已存在的IP核,如Dsp Builder 中的median_filter_2d_v7_2核。采用SOPC技术大大减小系统的硬件成本。
6.5、性能扩展空间广阔,易升级
       本设计只是实现了基本的二维条码识别功能,其功能具有很大的可扩展空间,如加入网络、无线通信等功能,可实现远程操纵识别。因SOPC方案具有硬处理器不具备的可裁减与可重配置优势,利用Nios II开发的产品软硬件可裁性较强,系统设计中协同开发维护与升级方便。将来可以根据对系统新的功能需求只需通过载入更新的软核系统或更新部分配置就能够实现硬件升级,对外围电路几乎没有影响。能延长产品生命周期,避免产品更新换代带来的高成本。
 

 

(Revision: 13 / 2008-09-16 09:36:39)

7. 总结 (Final Project Paper)

 
 
七、总结
 
        通过这次大赛,我们切实感受了一个嵌入式SOPC系统的设计流程,对软硬件协同设计的FPGA独特的实现方法产生了浓厚的兴趣,深深体会到FPGA和Nios II在二维条码识别应用中的特点和优越性。
        通过NiosII 加FPGA加HDL,我们可以在一片小小的FPGA芯片上搭建自己需要的几乎任何硬件系统。系统的器件是用户根据需要添加的,在SOPCBuilder中生成硬件系统,加上与NiosII IDE的紧密结合,是我们在是生成自己的硬件系统的时候可以查看系统的硬件配置信息,在system.h中可以查看系统中各个器件的地址,通过_reg.h可以查看寄存器的相关信息。从学习的角度来看,可以帮助我们更好更快的从底层到高层掌握基于Avalon总线的计算机硬件体系结构。NiosII的最大特点是自定义,不仅可以根据需要配置CPU ,还可以根据需要给CPU配置外设,不需任何片外扩展,用HDL 就可以实现硬件芯片的作用,既能减小产品体积、降低功耗,还能方便的实现产品的升级。正是由于以上这些特点使我们的pdf417二维条码解码器设计按期达到了预期的效果。
        在2个月的时间里,虽然许多的知识都是从头学起,遇到好多问题,但在这个设计中得到了学长、指导老师和Altera公司的工程技术人员无私的帮助,使我们的作品得以顺利完成。通过这次历练,使我们真正体会到,钻研的过程是99%的艰苦求索与1%的美妙的成功喜悦。而若懂得把这美妙的成果与人分享,便会使那份喜悦成为永恒,使那些求索变得不再枯燥无味,使整个过程变得真正有意义。我们学会了如何学习新知识,如何把知识有机的综合在一起。同时在此由衷感谢那些对我们提供过无私的帮助niosforum的朋友和mysupport工程师的。
 
 
(Revision: 6 / 2008-09-16 09:23:11)