CN110765804B - 一种条形码硬件解码ip核及解码方法 - Google Patents
一种条形码硬件解码ip核及解码方法 Download PDFInfo
- Publication number
- CN110765804B CN110765804B CN201911006849.9A CN201911006849A CN110765804B CN 110765804 B CN110765804 B CN 110765804B CN 201911006849 A CN201911006849 A CN 201911006849A CN 110765804 B CN110765804 B CN 110765804B
- Authority
- CN
- China
- Prior art keywords
- code
- unit
- decoding
- data
- width
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1408—Methods for optical code recognition the method being specifically adapted for the type of code
- G06K7/1417—2D bar codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/146—Methods for optical code recognition the method including quality enhancement steps
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Toxicology (AREA)
- Health & Medical Sciences (AREA)
- Electromagnetism (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种条形码硬件解码IP核及解码方法,属于集成电路领域。针对现有技术中存在的软件解码数据访问代价大、计算速度慢的问题,本发明提供了一种条形码硬件解码IP核,包括总线接口、控制部和运算部,SoC通过总线接口的主设备接口和从设备接口分别与IP核的运算部和控制部相连,控制部接收SoC传输的配置信息,向运算部传输配置信息,运算部由数据访问单元、动态滤波单元、字元宽度计算单元、宽度寄存器组、码值计算单元、校验单元、转换单元、ASCII字符寄存器组和标准输出单元组成,用于对二维码进行解码运算。本发明将软件算法硬件化,可以大幅提高算法性能、减小数据访问代价。
Description
技术领域
本发明涉及集成电路领域,更具体地说,涉及一种条形码硬件解码IP核及解码方法。
背景技术
条形码技术最早出现在20世纪40年代,是“由一组规则排列的条、空及其对应字符组成的,用以表示一定信息的标识”。目前已广泛应用于商业、邮政、图书管理、仓储、工业生产过程控制、交通运输、包装、配送等领域。
通常使用软件解码算法对条形码进行解码,该算法为了防止条码位置发生旋转,对图像先进行逐行扫描,如果解码不成功,再进行逐列扫描,每扫描一行或者一列,都对该行/列图像数据进行去噪滤波,判定边缘点,然后根据各个边缘点之间的宽度进行解码,最后通过校验位进行判断是否解码正确。
近年更由于支付应用快速增长,提高了对二维码以及条形码自动识别解决方案的要求,尤其在一些典型的应用场景,如停车场和高速公路出口的缴费场所,更提出在远距离、高清晰度条件下的解码要求。远距离和高清条件下解码对算法提出的更高要求,本专利将软件算法硬件化,可大幅度提高算法性能,并设计成IP,方便SoC集成。
中国专利申请,申请号CN201611213759.3,公开日2017年4月26日,公开了一种用于条码扫描设备的硬件解码芯片,该芯片包括处理器模块、内置随机存取存储器以及内置闪存器,其包括底层的实时操作系统层,设于其上的驱动层模块,与所述驱动层模块连接的图像信号处理模块,与图像信号处理模块连接的解码器模块,与解码器模块连接的数据处理器模块以及接口,建于实时操作系统层上且对所述的驱动层模块,图像信号处理模块,解码器模块,数据处理器模块以及接口进行控制的配置管理器。该发明的硬件解码芯片,用于条码扫描设备,将解码功能集成到芯片的解码器中,实现硬件解码,不同于目前的采用软件解码的芯片,芯片无需进行其他的软件处理。其不足之处在于,芯片的结构较为复杂,成本较高,且未对解码模块进行专门的底层硬件设计,运算性能较低。
发明内容
1.要解决的技术问题
针对现有技术中存在的软件解码数据访问代价大、计算速度慢的问题,本发明提供了一种条形码硬件解码IP核,它可以大幅提高算法性能、减小数据访问代价。
2.技术方案
本发明的目的通过以下技术方案实现:
一种条形码硬件解码IP核,包括,
总线接口,包括主设备接口和从设备接口,片上系统(SoC)通过主设备接口和从设备接口分别与知识产权核(IP核)的运算部和控制部相连,主设备接口用于IP核主动对SoC进行数据访问,从设备接口用于SoC对IP核的配合和数据读取访问,通过总线接口实现了SoC与IP核的数据交互;
控制部,包括控制寄存器组,接收SoC通过总线接口传输的配置信息,向运算部传输配置信息,实现对运算部的状态控制、允许SoC访问解码结果;
运算部,包括按照信号顺序依次连接的:
数据访问单元,与控制寄存器组及主设备接口相连,获取控制部的寄存器组传输的配置信息,通过主设备接口向SoC读取数据,实现IP核对SoC的主动访问;
动态滤波单元,获取数据访问单元传输的数据,对数据进行滤波处理,消除条形码图像中的噪点,提高字元宽度计算单元计算的准确度;
字元宽度计算单元,获取动态滤波单元传输的数据,计算滤波后的数据,得到字元宽度;
宽度寄存器组,用于保存字元宽度计算单元传输的字元宽度;
码值计算单元,获取宽度寄存器组保存的字元宽度,转换字元宽度为码值和码类;
校验单元,获取码值计算单元传输的码值和码类,根据码值和码类计算出校验码,对计算出的校验码进行校验,实现对解码结果的检验,由于硬件实现乘累加计算的效率比较高,因此校验单元采用正向计算的方式,对每个有效码值都进行乘累加操作,提高了运算效率;
转换单元,获取校验单元传输的码值和码类,转换码值为条形码码表中对应的ASCII字符;
ASCII字符寄存器组,根据转换单元传输的若干组带有ASCII字符信息的信号,选择对应的ASCII字符并保存;
标准输出单元,获取ASCII字符寄存器组保存的ASCII字符,向控制寄存器组传输ASCII 字符,完成了对条形码的解码。
进一步的,数据访问单元包括DMA控制器、像素坐标寄存器和FIFO存储器,像素坐标寄存器将数据传输给DMA控制器,DMA控制器接收的数据传输给FIFO存储器,用于主动从SoC系统中读取数据和接收控制部寄存器传输的配置信息。DMA控制器能够主动、连续快速获取数据,避免数据到内存再到IP的复杂和耗时的流程;FIFO存储器用于存储获取的数据,通过FIFO存储器实现了流水线实时处理,隐藏了计算时间;像素坐标寄存器用于存储像素值,每读入一个像素值,像素坐标寄存器自增1,像素坐标是当前像素距离起始点像素的坐标,用于标定字元宽度。
更进一步的,动态滤波单元包括若干个流水线寄存器,寄存器用于保存像素灰度值,寄存器以流水线的形式连接,每次输入一个像素灰度值,末端的寄存器移除数据,前面的寄存器按顺序依次将数据传输给后一个寄存器。
更进一步的,字元宽度计算单元包括若干个历史边沿坐标寄存器,历史边沿坐标寄存器用于保存动态滤波单元传输的边沿坐标。字元宽度计算单元获取动态滤波单元传输的当前边沿坐标值,用当前边沿坐标值减去保存在历史边沿坐标寄存器中的上一次的边沿坐标,得到新的字元宽度,然后将当前坐标值保存于历史边沿坐标寄存器用于下一次宽度计算。
更进一步的,宽度寄存器组由若干个寄存器组成,在保存字元宽度时,输入有效数值后偏移量变量普遍会自增1,在硬件电路中加法器会降低运算效率,用寄存器的移位方式替代加法器可以有效提高运算效率。
更进一步的,ASCII字符寄存器组由若干个寄存器组成,根据转换单元传输的若干组带有ASCII字符信息的信号,判定ASCII字符的码类,寄存器的有效位移动对应的位数对其进行保存,实现对ASCII字符的存储。
更进一步的,所述的宽度寄存器组和ASCII字符寄存器组中的寄存器使用one-hot编码方式,通过使用多个触发器的方式简化译码逻辑,提高了运算效率。
一种条形码硬件解码IP核的解码方法,其特征在于,包括以下步骤:
(1)SoC通过从设备接口向IP核的控制部的控制寄存器组传输配置信息,控制寄存器组将配置信息传输给IP核的运算部的数据访问单元,数据访问单元按照配置信息通过主设备接口向SoC中读取条形码数据,并将条形码数据保存到FIFO存储器中,每成功读入一个像素值,像素坐标寄存器自增1;
(2)动态滤波单元获取数据访问单元中的条形码数据,对条形码数据进行滤波降噪处理,得到滤波后的条形码数据即边沿坐标;
(3)字元宽度计算单元获取动态滤波单元中滤波后的边沿坐标,计算并得到字元宽度数组,将字元宽度数组保存到宽度寄存器组中的若干个寄存器中;
(4)码值计算单元获取宽度寄存器组中的字元宽度数组,将宽度数组的值转换为条形码码表中对应的码值和码类;
(5)校验单元获取码值计算单元的码值和码类,根据码值和码类计算出对应的校验码,之后对校验码进行校验,若计算出的校验码与条码中实际校验码一致,则解码正确,进入步骤6;若不一致,则解码错误,将本次所有解码信息清零,解码结束;
(6)转换单元获取码值计算单元中的码值及码类,根据码类将码值转化对应的ASCII 字符,之后将ASCII字符保存在ASCII字符寄存器组中,并通过标准化输出单元将ASCII字符寄存器组中保存的ASCII字符传输给控制部的控制寄存器组。
进一步的,动态滤波单元根据条形码数据中像素点的灰度值存储在寄存器中,每读取一个像素点,就根据前一个像素点的灰度值对该像素点进行滤波,减少了条形码中的噪点,提高了条形码的识别准确率。
更进一步的,字元宽度计算单元根据滤波后的条形码数据中像素点的灰度值判断该点是否是边缘像素点,如果是边缘像素点,那么将其与上一个边缘像素点的宽度差存储在宽度寄存器组中,为后续的码值计算提供了条件。
3.有益效果
相比于现有技术,本发明的优点在于:
(1)通过包括控制部、运算部和接口模块的IP硬核完全实现了条形码解码功能,数据访问单元集成了DMA控制器,能够主动、连续快速获取数据,减小了数据访问代价,针对动态滤波环节设计了的电路结构,采用了one-hot编码方式的寄存器来保存数据偏移量,代替了在硬件中处理速度较慢的加法器,硬件加速相比软件算法,通过针对特定的计算设计了硬件微结构,提高了数据流通的效率,减少了计算因为等待数据消耗的时间,能够提高一个数量级的运算效率;
(2)IP核通过总线接口与SoC相连,对SoC的兼容性高,运算部的数据访问单元中集成了FIFO存储器,采用了流水线的结构设计,实现了对解码任务的并行处理,隐藏了解码计算时间,提高了并行性。
附图说明
图1为条形码示意图;
图2为动态滤波流程图;
图3为实施例1的解码流程图;
图4为实施例2的解码流程图。
具体实施方式
下面结合说明书附图和具体的实施例,对本发明作详细描述。
如图1所示,条形码是将宽度不等的多个黑条和白条按照编码规则进行水平排列的,因此在垂直方向上,条码上下行信息完全相同,在水平方向行,各个字元的宽度不同,所以在对条形码进行解码的时候,只要扫描一行条码区域,即可判断出该条型码中包含的信息,条形码包括起始码、数据区、验证码和结束码四个部分。
这里的条形码是Code128码,Code128条形码是一个高密度的字母数字条码,能够存储需要的编码数据,它可以编码所有128个ASCII码字符,同时减少占用的空间。
软件算法的设计思路是,为了防止条码位置发生旋转,对图像先进行逐行扫描,如果解码不成功,再进行逐列扫描,每扫描一行或者一列,都对该行/列图像数据进行去噪滤波,判定边缘点,然后根据各个边缘点之间的宽度进行解码,最后通过校验位进行判断是否解码正确。具体流程如下:
(1)动态均值滤波
如图2所示,为了防止图像噪声等灰度突变,同时考虑尽量减少内存占用,算法中采用了运动均值滤波。滤波方法是:滤波窗口大小为4,将最新的四个像素点滤波后的灰度值存储在灰度值窗口数组y0[4]之中:y0[4]={y00,y01,y02,y03},其中y00的值是第x位的滤波值, y01的值是第x-1位的滤波值,y02的值是第x-2位的滤波值,y03的值是第x-3位的滤波值。
每扫描一个像素点,灰度值为y,就根据前一个像素点的滤波值,对该点进行滤波:y00 =(y-y01)*25/32+y01,其中y是最新像素点的灰度值。如果扫描的是该行/列的第一个像素点,那么y00=y01=y02=y03。
(2)边缘判定和宽度数组
边缘判定的原理是基于对灰度值窗口数组的一阶差分和二阶差分数值分析,同时满足一阶差分边缘条件和二阶差分边缘条件的像素点即为边缘像素点。
一阶差分边缘条件:一阶差分值表明最新四个像素点的灰度值变化情况,即灰度值是在增加还是在减小以及对应的增量,如果一阶差分的增量大于一个阈值Vth,即满足一阶差分边缘条件,一阶差分值计算:y10=y00-y01,y11=y01-y02,y12=y02-y03。如果三个一阶差分值中的最大值大于滤波窗口在不断运动的过程中形成的一阶差分值均值,说明该处灰度变化明显,可能是边缘点。
阈值Vth是一个随位置信息而自适应的动态值,它最小值为4。当边沿宽度为0,即在找到第一个边缘点之前,该阈值便是最小阈值。在找到边沿坐标之后,首先计算该边沿坐标和上一个边缘坐标的差dx,然后除以最新的两个边缘点的宽度差width,那么阈值等于前一个阈值*dx/width。
二阶差分条件:二阶差分可以表明一阶差分的变化趋势的变化情况,如果前后两个二阶差分值的符号不一致,说明是边缘,计算方法:y21=y00-(y01*2)+y02=y11-y10,y22= y01-(y02*2)+y03=y12-y11。
每获取一个边缘点,都将其与上一个边缘点的宽度差width存储在一个宽度数组w中,作为后续计算码值的数据基础。由于Code128码值中最长的码值为结束码,长度为7,那么宽度数组的深度设定为7。
(3)CODE128码值计算
Code128码值在code128码表中的ID值是Code128码值ASCII值的基础,需要先按照宽度数组W的值计算出Code128码值,再根据码值计算出其在码表中的ID值。
根据Code128条形码规则,连续“黑白黑白黑白”共6条颜色条为一个Code128单元,根据各颜色条的宽度可解码成1个6位Code128码值。具体解码方法是:每个色条的宽度用 6个色条宽度中最小宽度值进行量化得到单个色条的数值,6位合在一起就是一个Code128码值。
因为Code128条形码中起始码有三种,分别对应Code128码的三种版本,Code128A、Code128B、Code128C,编码值分别是211412、211214、211232,而结束码是固定的2331112,因此在对宽度进行判断的时候,每扫描到一个边缘点,都要将之前七个边缘点共六个宽度进行判断,它们之间的比例关系是否满足三种起始码中的一种。在找到起始码之后,继续扫描该行/列之后的像素点,每得到六个宽度,就对它们之间的比例关系进行计算并得到它们属于 Code128码表中的ID值,直至扫描到结束码。
(4)校验位判断
在扫描到结束码之后,就得进行校验位判断,Code128校验位判断规则是,(起始码ID +每位数据码ID×每位数据码值)%103,如果基于该规则计算得到的校验值和条形码中的实际校验值一致,则说明条形码解码准确。
考虑到软件算法中乘法的时间代价高于加法的时间代价,为了提高算法效率,在校验码计算的过程中采用了逆向计算从而将乘法转换为加法计算。在扫到结束码之后,从结束码向起始码循环累加每位数据码值,累加到起始码后对103求余。
(5)将扫描结果转为相应的ASCII码
在Code128码表中,Code128A包含标准数字、大写字母、控制符、特殊字符,Code128B 包含标准数字、大小写字母、特殊字符,而Code128C只包含0到99个数字;在非字符又包含字符切换、字符转换、以及功能字符等特殊字符:
切换字符主要是指CODEA、CODEB、CODEC将先前根据起始码确定的字符集转为切换字符所指定的新的字符集A(B,或C),这种转换适用于切换字符后面的所有字符,直至符号结束或遇到另一个切换字符或者转换字符。
转换字符SHIFT将转换之后的一个字符从字符集A转换到字符集B,或从字符集B转换到字符集A,在被转换字符后面的字符将自动恢复到转换字符前定义的字符集A或字符集B。
功能字符FNC,FNC1是用来标识EAN.UCC条形码编码系统,FNC2(信息添加)是用于指示条码识读设备将包含FNC2符号信息临时储存起来,作为下一个符号的前缀传送。 FNC3(初始化)用于指示识读设备,将包含FNC3字符的符号中的数据作为初始化指示或对条码识读器的重新编程。FNC4不在EAN.UCC系统中使用。
因此在将数据区转为ASCII码时,得根据起始码,进行不同的转化策略。
如果起始码是Code128A,那么在数据区中,各个序号如果小于64,只要将该序号值增加32,即可转为对应的ASCII码,如果序号大于64小于96,那么将序号减去64,可转为对应的ASCII码。
如果起始码是Code128B,那么数据区中,各个序号如果小于96,将序号加32,可转为对应的ASCII码。
如果起始码为Code128C,那么说明该条形码中都是数字,且是两位数,那么需要将每个序号转为两位ASCII码,转化方法是,将该双位数字的十位和个位进行分离,分别转为对应的ASCII码。
Code128A、Code128B和Code128C的ASCII解码在数据结构上的差别表现在A和B中,每个码的有效信息只转换为一个ASCII码,而C需要转换为2个ASCII码。
实施例1
如图3所示,一种条形码硬件解码IP核,包括总线接口、控制部和运算部。
总线接口,包括主设备接口和从设备接口,片上系统(SoC)通过主设备接口和从设备接口分别与知识产权核(IP核)的运算部和控制部相连,主设备接口用于IP核主动对SoC进行数据访问,从设备接口用于SoC对IP核的配合和数据读取访问,通过总线接口实现了SoC与IP核的数据交互。
控制部,包括控制寄存器组,接收SoC通过总线接口传输的配置信息,向运算部传输配置信息,实现对运算部的状态控制、允许SoC访问解码结果。配置信息主要包含:图像数据起始地址,图像宽度,扫描模式,像素地址增量,扫描长度,软复位,启动等功能,扫描结果为最长40Byte的Code128码ASCII值,如果被扫描条形码有效字符数量超过40,IP核则无法成功解码;软复位,用于清除历史状态;地址增量用于保存下一个像素相对当前像素地址计算的偏移量,也可用这个值配置隔行和隔列扫描模式,有效数据范围为-15到+15;扫描长度记录一次扫描的像素的数量;扫描模式,即连续读取数据的模式,分为行模式和列模式两种,默认为行模式。行模式下,下个像素地址为当前地址加上像素地址增量;列模式下,下个像素地址为当前地址加上像素地址增量与图像宽度的乘积。
运算部,包括按照信号顺序依次连接的数据访问单元、动态滤波单元、字元宽度计算单元、宽度寄存器组、码值计算单元、校验单元、转换单元、ASCII字符寄存器组以及标准输出单元,用于对条形码进行解码。
数据访问单元,包括DMA控制器、像素坐标寄存器和FIFO存储器,数据访问单元与控制寄存器组及主设备接口相连,获取控制部的寄存器组传输的配置信息,通过主设备接口向 SoC读取数据,实现IP核对SoC的主动访问。像素坐标寄存器将数据传输给DMA控制器,DMA控制器接收的数据传输给FIFO存储器,DMA控制器能够主动、连续快速获取数据,避免数据到内存再到IP的复杂和耗时的流程;FIFO存储器深度为8,用于存储获取的数据,通过FIFO存储器实现了流水线实时处理,隐藏了计算时间;像素坐标寄存器用于存储像素值,每读入一个像素值,像素坐标寄存器自增1,像素坐标是当前像素距离起始点像素的坐标,用于标定字元宽度。
通过CPU实现数据流控制的方法中,由于CPU的数据控制是基于Cache的,如果CPU只有1级Cache及L1Cache,其中数据Cache为L1 DCache,CPU并不是直接将SRAM中的数据存储到IP的寄存器中,而是先计算L1Cache和SRAM之间的一致性然后把数据从SRAM 填充到L1DCache中,再将其从L1DCache的数据写入到IP,由于CPU是执行写指令将数据保存,所以从L1Cache到IP的过程在总线上是以不连续的单个数据形式发生的,这中间要不断进行数据总线请求、仲裁和等待的过程,每个环节都需要消耗时间;DMA,即Direct Memory Access。采用DMA的方式,DMA控制器根据已经配置好的信息以Burst形式向总线发起请求,一次性将需要的数据从SRAM读取到IP的FIFO存储器中,传输过程需要一次总线仲裁和等待,总体上比CPU搬运数据效率高出非常多。
动态滤波单元包括4个流水线寄存器,用于接收并处理数据访问单元送出的像素值y。每次输入一个像素灰度值,Y03寄存器获得Y02寄存器的值,Y02寄存器获得Y01寄存器的值,Y01寄存器获得Y00寄存器的值,经过硬件计算滤波后的值后都会将其移入Y00寄存器。
字元即一个黑色条或一个白色条,字元宽度即色条的宽度。字元宽度计算单元,包括历史边沿坐标寄存器。字元宽度计算单元获取动态滤波单元传输的当前边沿坐标值,用当前边沿坐标值减去保存在历史边沿坐标寄存器中的上一次的边沿坐标值,得到新的字元宽度,然后将当前坐标值保存于历史边沿坐标寄存器用于下一次宽度计算。字元宽度保存到宽度寄存器组中。宽度寄存器组(WRegs)包括7个寄存器,每个寄存器16位。在软件解码算法中,通过偏移量变量来访问字元宽度数组元素,在输入有效数值后偏移量变量普遍会自增1。考虑到自增1在硬件电路中会产生加法器,运算效率会降低,所以采用了8位宽的one-hot寄存器(OnehotReg8)作为寄存器组的偏移量,每一个WRegs寄存器和OnehotReg8的一位对应,将字元宽度保存到WReg寄存器对应的寄存器中,one-hot寄存器在复位或者软复位时复位为 8’b10000_000;每次输入一个有效宽度,则OnehotReg8的值向右移一位,到8’b00000_001 停止右移。n为Onehot寄存器的位下标,如果OnehotReg8[n]为1,则将宽度之写入WRegs[n]。码值计算单元接收宽度寄存器组传输的字元宽度数组,并根据该数组计算出在条形码码表中对应的8bit码值和2bit码类,并向下游逻辑输出。
校验单元,获取码值计算单元传输的码值和码类,根据码值和码类计算出校验码,对计算出的校验码进行校验,实现对解码结果的检验。由于硬件实现乘累加计算的效率比较高,所以校验单元没有按照软件算法的做法,在所有检查到结束码后才逆向循环累加计算校验,而是按照Code128码规定采用正向计算,每生成一个有效的码值都进行乘累加操作。由于需要检测到结束码才能确定其前一个码值是校验码,所以需要对生成的校验值产生一个副本,每当新生成一个码值时,该副本获得上一个码值备份,使得当检测出结束码时,该副本和前一个码值及校验码对应,将该副本中的校验码与条形码中实际校验码进行比较,并输出比较结果。
转换单元,获取校验单元传输的码值和码类,转换码值为条形码码表中对应的ASCII字符,向下输出4组信号:Byte0(8bit)、Byte0Valid(1bit)、Byte1(8bit)、Byte1Valid(1bit)。当码类为CodeA和CodeB时,Byte0Valid=1,Byte0为对应ASCII字符值,Byte1Valid=0表示Byte1无效;当码类为CODEC时,Byte0Valid=1,Byte0为对应十位数字的ASCII字符值, Byte1Valid=1,Byte0为对应个位数字的ASCII字符值。ASCII字符寄存器组,保存转换单元传输的ASCII字符,包括40个8位宽的寄存器,采用41bit宽的寄存器(OnehotReg41)作为下标控制。当Byte0Valid=1,Byte1Valid=0时,OnehotReg41的有效位对应的寄存器获取 Byte0的值,下一个时钟周期OnehotReg41获取OnehotReg41右移一位的值;当Byte0Valid=1, Byte1Valid=1时,OnehotReg41的有效位对应的寄存器获取Byte0的值,OnehotReg41右移一位得到OnehotReg41r,OnehotReg41r的hot位对应的寄存器获取Byte1的值,下一个时钟周期OnehotReg41获取OnehotReg41r右移2位的值。标准化输出单元用于将转换单元传输的 ASCII字符传输给控制部的控制寄存器。
一种条形码硬件解码IP核的解码方法,包括以下步骤:
(1)SoC通过从设备接口向IP核的控制部的控制寄存器组传输配置信息,控制寄存器组将配置信息传输给IP核的运算部的数据访问单元,数据访问单元按照配置信息通过主设备接口向SoC中读取条形码数据,并将条形码数据保存到深度为8的FIFO存储器中,每成功读入一个像素值,像素坐标寄存器自增1;
(2)动态滤波单元获取数据访问单元中的条形码像素值数据y,每次输入一个像素灰度值,Y03寄存器获得Y02寄存器的值,Y02寄存器获得Y01寄存器的值,Y01寄存器获得Y00寄存器的值,经过硬件计算滤波后的值后都会将其移入Y00寄存器,动态滤波单元的输出包括两组信号,一组是判定结果,为1时表示当前输出是有效的边沿坐标,另一组是边沿坐标值;
(3)字元宽度计算单元在动态滤波单元传输的判定结果为1时接受边沿坐标值,用当前边沿坐标值减去保存在历史边沿坐标寄存器中的上一次的边沿坐标,得到新的字元宽度,然后将当前坐标值保存于历史边沿坐标寄存器用于下一次宽度计算,将字元宽度数组保存到宽度寄存器组中的若干个寄存器中;
(4)码值计算单元获取宽度寄存器组中的字元宽度数组,将宽度数组的值转换为条形码码表中对应的码值和码类;
(5)校验单元获取码值计算单元的码值和码类,根据码值和码类计算出对应的校验码,之后对校验码进行校验,若计算出的校验码与条码中实际校验码一致,则解码正确,进入步骤6;若不一致,则解码错误,将本次所有解码信息清零,解码结束;
(6)转换单元获取码值计算单元中的码值及码类,根据码类将码值转化对应的ASCII 字符,之后将ASCII字符保存在ASCII字符寄存器组中,并通过标准化输出单元将ASCII字符寄存器组中保存的ASCII字符传输给控制部的控制寄存器组。
实施例2
实施例2与实施例1基本相同,不同之处如图4所示:
总线接口还包括中断接口,中断接口分为中断信号和中断清除信号,分别用于通知SoC 中断事件和清除IP核内部的中断状态,在完成本次扫码配置的长度后,根据寄存器配置产生中断,此时解码的结果已经更新到相关寄存器,中断信号从IP核连接到CPU的中断控制单元,中断清除信号从CPU控制单元连接到IP核,中断信号是一个高电平信号,中断清除信号根据CPU不同可能是电平或脉冲信号。CPU在接收到中断信号以后,应用应当针对该中断信号状态来读取IP的状态,并主动通过程序清除IP核的中断状态。
实施例3
实施例3与实施例1基本相同,不同之处在于:
本实施例的SoC系统接口优选但不限于AMBA总线接口,也可适配其它SoC平台的系统总线,系统总线实际上遵守规定协议的一组信号,不同平台的总线协议可能不一样,但是实现的功能是一样的。这个IP核实际上是一个数字IP,在适配不同SoC系统时针对适应性做一些调整的,经过接口适配协议的修改,可以适用于其它协议的总线,如BVCI总线等。各种协议的总线实际上是有优缺点,但是这些优缺点是SoC体系结构设计的时候考虑的,和 IP核本身没有关系。IP核设计本身要考虑的是功能的实现以及对SoC系统的适应性,也不包含对总线的优缺点的考量。如果有SoC系统选择集成这个IP核的话,考虑的是这个IP核为这个SoC系统带来的加减分项,而不是这个SoC系统总线的优缺点。
实施例4
实施例4与实施例1基本相同,不同之处在于:
ASCII字符寄存器组的宽度优选但不限于40Byte,对应的Onehot寄存器宽度优选但不限于41Bit,Code128条码的长度可调,但包括开始位和结束位在内不可超过232个字元,所以理论上Code128码如果完全按照TypeA和TypeB解码,最多解出(232-8-8)/7再取整为30个字符,如果完全按照TypeC来解码会解出30*2=60个字符。但是由于条码过宽之后条码长度会变长,对图像采集设备的要求会变高,因此定义ASCII字符寄存器组的宽度为40Byte,可以在满足绝大多数市场需求的同时不增加冗余的硬件代价。由于每一个字符在Onehot寄存器中必须有一个对应位,最后还要有一个状态对应数据溢出,即超出IP规定的40Byte的上限,因此Onehot寄存器的宽度比ASCII字符寄存器组的宽度多一位,为41Bit。
以上示意性地对本发明创造及其实施方式进行了描述,该描述没有限制性,在不背离本发明的精神或者基本特征的情况下,能够以其他的具体形式实现本发明。附图中所示的也只是本发明创造的实施方式之一,实际的结构并不局限于此,权利要求中的任何附图标记不应限制所涉及的权利要求。所以,如果本领域的普通技术人员受其启示,在不脱离本创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本专利的保护范围。此外,“包括”一词不排除其他元件或步骤,在元件前的“一个”一词不排除包括“多个”该元件。产品权利要求中陈述的多个元件也可以由一个元件通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (10)
1.一种条形码硬件解码IP核,其特征在于:包括,
总线接口,包括主设备接口和从设备接口,SoC通过主设备接口和从设备接口分别与IP核的运算部和控制部相连;
控制部,包括控制寄存器组,接收SoC传输的配置信息,向运算部传输配置信息;
运算部,包括按照信号顺序依次连接的:
数据访问单元,与控制寄存器组及主设备接口相连,用于接收控制部传输的配置信息,读取SoC的数据;
动态滤波单元,用于对数据进行滤波处理;
字元宽度计算单元,将滤波后的数据转换为字元宽度;
宽度寄存器组,用于保存字元宽度;
码值计算单元,用于转换字元宽度为码值和码类;
校验单元,用于校验码值;
转换单元,用于转换码值为ASCII字符;
ASCII字符寄存器组,用于保存ASCII字符;
标准输出单元,向控制部传输ASCII字符。
2.根据权利要求1所述的一种条形码硬件解码IP核,其特征在于:所述的数据访问单元包括DMA控制器、像素坐标寄存器和FIFO存储器,像素坐标寄存器将数据传输给DMA控制器,DMA控制器接收的数据传输给FIFO存储器。
3.根据权利要求1所述的一种条形码硬件解码IP核,其特征在于:所述的动态滤波单元包括若干个流水线寄存器。
4.根据权利要求1所述的一种条形码硬件解码IP核,其特征在于:所述的字元宽度计算单元包括若干个历史边沿坐标寄存器。
5.根据权利要求1所述的一种条形码硬件解码IP核,其特征在于:所述的宽度寄存器组由若干个寄存器组成。
6.根据权利要求1所述的一种条形码硬件解码IP核,其特征在于:所述的ASCII字符寄存器组由若干个寄存器组成。
7.根据权利要求5或6所述的一种条形码硬件解码IP核,其特征在于:宽度寄存器组和ASCII字符寄存器组中的寄存器使用one-hot编码方式。
8.一种基于权利要求1所述的条形码硬件解码IP核的解码方法,其特征在于,包括以下步骤:
(1)SoC通过从设备接口向IP核的控制部的控制寄存器组传输配置信息,控制寄存器组将配置信息传输给IP核的运算部的数据访问单元,数据访问单元按照配置信息通过主设备接口向SoC中读取条形码数据,并将条形码数据保存到FIFO存储器中,每成功读入一个像素值,像素坐标寄存器自增1;
(2)动态滤波单元获取数据访问单元中的条形码数据,对条形码数据进行滤波降噪处理,得到滤波后的条形码数据;
(3)字元宽度计算单元获取动态滤波单元中滤波后的条形码数据,计算并得到字元宽度数组,将字元宽度数组保存到宽度寄存器组中;
(4)码值计算单元获取宽度寄存器组中的字元宽度数组,将宽度数组的值转换为条形码码表中对应的码值和码类;
(5)校验单元获取码值计算单元的码值和码类,根据码值和码类计算出对应的校验码,之后对校验码进行校验,若计算出的校验码与条码中实际校验码一致,则解码正确,进入步骤(6);若不一致,则解码错误,将本次所有解码信息清零,解码结束,返回解码错误信息;
(6)转换单元获取码值计算单元中的码值及码类,根据码类将码值转化对应的ASCII字符,之后将ASCII字符保存在ASCII字符寄存器组中,并通过标准输出单元将ASCII字符寄存器组中保存的ASCII字符传输给控制部的控制寄存器组。
9.根据权利要求8所述的解码方法,其特征在于:所述的动态滤波单元根据条形码数据中像素点的灰度值存储在寄存器中,每读取一个像素点,就根据前一个像素点的灰度值对该像素点进行滤波。
10.根据权利要求8所述的解码方法,其特征在于:所述的字元宽度计算单元根据滤波后的条形码数据中像素点的灰度值判断该点是否是边缘像素点,如果是边缘像素点,那么将其与上一个边缘像素点的宽度差存储在宽度寄存器组中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911006849.9A CN110765804B (zh) | 2019-10-22 | 2019-10-22 | 一种条形码硬件解码ip核及解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911006849.9A CN110765804B (zh) | 2019-10-22 | 2019-10-22 | 一种条形码硬件解码ip核及解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110765804A CN110765804A (zh) | 2020-02-07 |
CN110765804B true CN110765804B (zh) | 2023-01-20 |
Family
ID=69331401
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911006849.9A Active CN110765804B (zh) | 2019-10-22 | 2019-10-22 | 一种条形码硬件解码ip核及解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110765804B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111476528B (zh) * | 2020-04-27 | 2023-07-11 | 上海东普信息科技有限公司 | 基于快递出库的数据处理方法、装置、设备及存储介质 |
CN113297867A (zh) * | 2021-05-21 | 2021-08-24 | 苏州视印智能系统有限公司 | 现场分布式部署自适应学习工业读码器 |
CN114860651B (zh) * | 2022-07-05 | 2022-10-11 | 南京万般上品信息技术有限公司 | 一种基于分散聚合流水线实现mds阵列码的ip核系统 |
CN115860034B (zh) * | 2023-02-14 | 2023-06-20 | 北京紫光青藤微系统有限公司 | 解码方法、解码装置、解码芯片及扫码设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840496A (zh) * | 2010-06-01 | 2010-09-22 | 福建新大陆电脑股份有限公司 | 一维条码解码芯片 |
CN101882209A (zh) * | 2010-06-01 | 2010-11-10 | 福建新大陆电脑股份有限公司 | 一种集成条码解码芯片的片上系统 |
CN101908125A (zh) * | 2010-06-01 | 2010-12-08 | 福建新大陆电脑股份有限公司 | Qr码条码解码芯片及其解码方法 |
CN101908126A (zh) * | 2010-06-01 | 2010-12-08 | 福建新大陆电脑股份有限公司 | Pdf417条码解码芯片 |
-
2019
- 2019-10-22 CN CN201911006849.9A patent/CN110765804B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840496A (zh) * | 2010-06-01 | 2010-09-22 | 福建新大陆电脑股份有限公司 | 一维条码解码芯片 |
CN101882209A (zh) * | 2010-06-01 | 2010-11-10 | 福建新大陆电脑股份有限公司 | 一种集成条码解码芯片的片上系统 |
CN101908125A (zh) * | 2010-06-01 | 2010-12-08 | 福建新大陆电脑股份有限公司 | Qr码条码解码芯片及其解码方法 |
CN101908126A (zh) * | 2010-06-01 | 2010-12-08 | 福建新大陆电脑股份有限公司 | Pdf417条码解码芯片 |
Also Published As
Publication number | Publication date |
---|---|
CN110765804A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110765804B (zh) | 一种条形码硬件解码ip核及解码方法 | |
EP1318665B1 (en) | Image processing apparatus and method, program, and storage medium | |
US6752316B2 (en) | Two-dimensional code | |
JP4752413B2 (ja) | 2次元コード分割表示方法、2次元コード読取方法および2次元コード読取装置 | |
CN109754044B (zh) | 条形码、条形码生成方法及识别方法 | |
US20170061184A1 (en) | Portable electronic device and operation method thereof | |
CN113435436A (zh) | 一种基于线性约束矫正网络的场景文字识别方法 | |
CN112541370B (zh) | 一种基于fpga的qr码位置探测图形定位方法 | |
CN116739022A (zh) | 用于条码图像的译码方法、装置和电子设备 | |
US7203361B1 (en) | Adaptive digitizer for optical reader | |
CN101882213B (zh) | 一种条码图像采样方法 | |
CN101282405B (zh) | 图像处理装置、图像处理方法 | |
CN100454327C (zh) | 数据矩阵码的识别方法 | |
CN100558166C (zh) | 一种图形终端界面的编码和解码方法 | |
CN113298790B (zh) | 一种图像滤波方法、装置、终端和计算机可读存储介质 | |
JP4449791B2 (ja) | コード読み取り装置、コード読み取り方法及びプログラム | |
CN114119661A (zh) | 一种目标追踪处理器、目标追踪方法及装置 | |
CN110969063B (zh) | 抄表方法、抄表设备、远程抄表装置、系统及存储介质 | |
CN112766256A (zh) | 光栅相位图处理方法、装置、电子设备及存储介质 | |
JP2001256425A (ja) | 光学情報読取装置 | |
JP2022517704A (ja) | 光学コード認識用イメージセンサ | |
CN101840501B (zh) | 一种条码图像的解码方法及装置 | |
JPH0256080A (ja) | バーコードリーダ | |
JPH0121667B2 (zh) | ||
JP2731610B2 (ja) | バーコードデコーダ及びバーコードデコード方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |