一种jpeg图像解码器的vlsi系统结构及其实现方法

文档序号:7743963阅读:274来源:国知局
专利名称:一种jpeg图像解码器的vlsi系统结构及其实现方法
技术领域
本发明属于数字图像处理领域,涉及到一种JPEG图像解码器的VLSI系统结构及 其实现方法。具体地说涉及采用Verilog HDL语言实现JPEG解码器的硬件实现。
背景技术
JPEG全名为Joint Photographic Experts Group (联合图像专家组),它是一个 在国际化标准组织(ISO)下从事静态图像压縮制定的委员会。它制定出了第一套国标静态 图像压縮标准ISO 10918-1,简称JPEG。 JPEG标准包括多种不同的压縮方式,其中基准压縮过程得到了最广泛的应用。大 多数现在的视频压縮技术(如MJPEG, MPEG-1/2)都采用了 JPEG的基准压縮过程。在当今 的多媒体技术中JPEG图像有着广泛的应用。利用它,可以在显著提高压縮效率(25 : 1) 的同时,获得较好的图像效果,从而可以大大减少在存储和传输图像数据所需的存储空间 和带宽。 随着近几年技术的发展,便携式电子产品越来越受到重视,这就客观上对JPEG图 像文件的解码速率和效果提出了更高的要求。JPEG解码方式主要有三种,一是传统的纯软 件解码,二是通过MCU控制DSP来实现,三是通过专用解码芯片实现。由于第三种方式相对 于其他两种有着很大的价格优势,使得在现今的便携式电子产品中,专用解码芯片正在成 为主流。现有市场上的的专用解码芯片大多数都是由国外厂商设计并制造的,少数国产芯 片其优化算法和设计方案也都是不公开的。制约JPEG图像解码速率的瓶颈主要集中于标 准中的huffman解码以及IDCT(反离散余弦变换)这两部分。其中huffman解码为变长游 程解码,IDCT则一次需要64个系数才能完成一次计算。为了解决上述难题,现今方案,一 般采用并行模块的方式进行处理,但这样不可避免地造成了芯片面积的扩大,从而使得芯 片的成本大大增加。

发明内容
本发明的目的在于解决现有解码芯片设计方案上的不足之处,提供一种结构清 晰,运行速度块,既能高速,有效的对JPEG图像文件进行压縮,同时还能节省芯片面积的 JPEG图像解码器的VLSI系统结构及其实现方法。
为实现上述目的,本发明采用如下技术方案 —种JPEG图像解码器的VLSI系统实现方法,该实现方法包括以下步骤 St印l :从外部输入的比特数据流,首先进入到输入FIFO中,然后头码流解析模块
对输入缓冲器的输出数据按照JFIF文件格式进行解析; St印2 :在头码流解析完后,进入到熵解码模块; St印3 :在完成熵解码后,将得到的非零系数进行解量化操作; St印4 :在完成解量化后,进入到反zigzag变换单元; St印5 :在完成反zigzag变换后,将得到的非零系数和当前系数在模块里64个参数的位置(coeff—cnt) —起输入到IDCT反离散余弦变换模块,进行反离散余弦变换;
St印6 :经过IDCT变换后,得到了原始的经过降低分辨率的YCbCr色域的图像信 息; St印7 :经过解采样,得到了每个像素的Y,Cb,Cr分量;在得到了每个像素的Y,Cb,
Cr分量后,将每个像素点的Y, Cb, Cr分量的值转换为R, G, B分量的值。 在所述st印l中,头码流解析模块采用了双重存储器,用来存储头码流中包含的
各种信息;并且采用一个码流标志位0或者1跟随处理中的码流,通过判断当前处理码流的
标志位,用来决定采用双重存储器中的其中一组数据进行解码。 双重存储器应用于huffman解码系数存储器和量化系数存储器;在解析头码流过 程中采用最高地址位的0-1变换实现分离存储两组来自两幅图像的huffman解码系数和来 自两幅图像的量化系数,并在解码使用过程中采用码流标志位的方式,实现正确系数的读 取。 在所述st印l中,在熵解码中的对于huffman解码采用96bits缓冲移位寄存器, 并根据解码数据长度分别将码字长度16bits的rcLword,码字长度8bits的rcLbyte,码字 长度小于8bits的rd_bits置高电平,反馈到96bits缓冲移位寄存器,使其读入新的等长 有效数据。 在所述St印5中,在IDCT反离散余弦变换模块的输入端,伴随待解码的非零数据 输出8bit计数器,用来表示当前非零系数在整个待解码模块64输入系数中的位置。
在所述的st印7中,转换公式为
<formula>formula see original document page 4</formula>
其中R, G, B分别代表了像素点的红色,绿色和蓝色分量;Y, Cb, Cr分别代表了像 素点的亮色分量和两个色度分量;为了使RGB得到的数据为正数,在等式右边的色度分量 都减去了 128。 —种JPEG图像解码器的VLSI系统结构,采用了流水线的设计方式,包括头码流 解析模块,解量化模块,熵解码模块,反zigzag变换模块,IDCT反离散余弦变换模块,解采 样模块,色域转换模块。从外部输入的比特数据流,首先经由输入FIFO缓冲后进入头码流 解析模块;在头码流解析完成后,随后输入FIFO的输出数据流进入熵解码模块(在该模块 执行过程中调用了头码流解析模块产生的HT系数);熵解码后的数据进入到解量化模块 (在该模块执行过程中调用了头码流解析模块产生的QT系数);解量化后的数据流进入反 zigzag变换模块,进行反zigzag变换;在完成反zigzag变换后进入IDCT反离散余弦变换 模块;经过IDCT反离散余弦变换后,得到YCbCr色域的图像信息;图像信息进入解采样模 块后进行解采样(在该模块执行过程中调用了头码流解析模块产生的采样方式);解采样 后的信息进入色域转换模块,进行色域转后;进入显示模块(在该模块执行过程中调用了 头码流解析模块产生的图像的宽度和高度信息)。 在任意的两个相连的模块之间引入了前端数据有效标志和后端模块空闲标志,在
同步时钟控制下,只有两者都为有效时,才会在两个模块间进行数据传输。 本发明的有益效果是在设计中,采用流水线设计,配合头码流的双重存储器设计,无论是一副图像里面的数据,还是两幅图像的数据,都可以近似实现数据不停滞的处 理。另外,由于IDCT模块的输入系统中,相当多的一部分系数为零,因此在除去多余的零系 数后,大大加快了数据的处理速度。通过上面的设计,在不通过增加并行模块的同时,提升 了解码速率,使其效果近似等同于采用并行模块时,从而减少了芯片面积,大大降低了芯片 成本。


图1为系统整体设计图; 图2为头码流解析单元状态转移图; 图3为JFIF格式中各种段的标识符; 图4为反zigzag变换排序图; 图5为反zigzag变换系数顺序计数变换图; 图6为二维IDCT模块系统结构图; 图7为一维IDCT模块中的乘加运算结构电路图; 图8为JPEG采样方式示意图; 其中,图1中,1输入FIFO模块,2头码流解析模块,3熵解码模块,4解量化模块,5 反zigzag变换模块,6IDCT反离散余弦变换模块,7解采样模块,8色域转换模块,9显示模 块。
具体实施例方式
下面结合附图与实施例对本发明做进一步说明。 首先结合图1对本实施例的整体过程进行简单描述。图1中,HT代表了 huffman 表,QT代表了量化表。最开始从外部输入的为8比特的数据流,首先进入到输入FIFO模块 1中,然后头码流解析模块2对输入FIFO模块1的输出数据按照JFIF文件格式进行解析。 在此过程中,采用的状态机转移图如图2所示。采用JFIF格式的JPEG文件的头码流是分为 一个一个的段来存储的(但并不是全部都是段),每个段的开头有两个字节长的标识符。每 个标识符的第一个字节都是十六进制OxFF。第二个字节根据当前段内数据的不同,各自对 应着各自的值。首先,状态机处于开始状态,检测输入的字节是否为OxFF。如果不是的话, 保持开始状态等待下一字节的到来,如果是OxFF的话,状态转移到读取标识符的后一个字 节。根据此字节值的不同,跳转到不同的状态。并在每个段读取完毕后,回到开始状态,等 待下一个段的到来。 一直在读取到SOS段时,此时解析出SOS段的信息后才真正进入到代 表图像数据的码流。并将状态机置于空闲状态。在eob信号(一副图像解码结束标志位) 置高后,回到开始状态,等待下一幅新的图像的到来。图3给出了不同标识码代表的不同段 的含义。 另外为了实现对两幅前后不同图像的同时处理,头码流解析出的信息都采用了双 重存储器进行存储。即在存储器地址的最高位再添加1比特。利用这1比特置为0或者1 来分别存储从两幅图像解析出的不同的图像信息。在码流解码的过程中,随之在流水线中 一起运动的还包括一比特的图片标志位。利用该标志位,可以在解码过程中正确选择使用 来自两幅不同图像的量化表(QT)或者哈夫曼表(HT)等其他信息。
5
JPEG图像数据经由输入FIFO模块1缓冲后输入到熵解码模块3。 JPEG标准中熵解 码包括了 huffman解码与游程解码和变长解码。首先,根据头码流解析DHT段得到的1-16 长度的码字的个数,构造出1-16长度的最小码流,其构造原理主要依据范式huffman编码 的几个特性 (1)长度为N的第一个码字f (N)能从长度为N-l的最后一个码字,即f (N)= 2 (f (N-l) +1),其中,f (N-l)为N-l长度的最后一个码字。 (2)相同长度的码字必须是连续整数的二进制描述。即如果f (N)为长度为N的 第一个码字,则其他长度为N的码字则为f (N)+l, f (N)+2, f (N)+3等等。
(3)码字长度最小的第一个编码从零开始。 依据上面所述的三个特性,以码字长度最小的第一个编码为零(假设此时长度为 i),然后,按照第(2)条特性,设定16比特计数器cntl,在零的基础上依次加1。待长度为 i的编码全部产生后,将计数器加l,并左移一位,即得到了 (i+1)长度的最小码流。依次类 推,从而建立起各种长度的码流与码字一一对应的huffman码字表。等待96bits的缓冲移 位寄存器内部数据有效后,按照从高字节到低字节的顺序通过比较器按照码字长度从小到 大的顺序依次与最小码流进行比较,当M比特长的码流大于M比特长的最小码流,但M+l比 特长的码流小于M+1长度的最小码流时,确定当前码流长度为M(此时通过比较器的异或结 果实现)。根据M的大小,控制rd—word, rd—byte, rd—bits的值,并反馈到96bits长的缓 冲移位寄存器的控制部分,使其读入新的M长度比特数据。在确定当前码流长度为M后,将 M比特的当前码流与M比特的最小码字相减,得到的数据为地址偏移量addr—over。将地址 偏移量addr_0Ver加上M比特最小码流addr_M的地址后,得到新的地址。按照新地址读 取存储huffman码字表的存储器单元(SRAM),就会得到解码后的8bit码字。根据得到的 码字,高4比特可以确定当前系数前端零的个数,低4比特表示后端代表当前系数的码流长 度。将得到高4比特数据+l,并通过计数器coeff—cnt2累计叠加,这样,该计数器数值的 大小(0-63),代表了解码后得到的系数在当前8*8解码模块中的位置。将计数器的数值伴 随通过低4比特解码后得到的参数一起输出后,可以将一个模块64个系数中的非零系数去 除。由于此时的系数为频域系数,其中包含有大量的零系数,通过此项措施,减少了相当一 部分的数据传输,从而大大提高了解码速率。 在完成熵解码后,得到的非零系数进入解量化模块4进行解量化操作,此时,每个 非零系数都伴随着表示其在模块中顺序的数值coeff—cnt2。因此将coeff—cnt2作为存储 量化表的存储器的地址信号,就可轻松的将与非零系数对应的量化系数读取出来。输出到 乘法器的输出端,将量化系数与频域参数相乘,从而完成解量化的操作。
在完成解量化后,进入到反zigzag变换模块5。通过此次变换,将按串行顺序排列 的64个频域系数,按照如图4中箭头所示的方式组合成一个8*8的模块。由于在本设计中 并没有按照顺序依次输出64个频域系数,而是采用伴随表示频域系数在64在模块的位置 信息的方式,因此在解量化后得到的数据只有非零数据,所以,在此处,只需按照图5中的 对应方式,将每个非零系数伴随的c0eff_cnt2的值按照对应关系变换成c0eff_cnt即可。 对应关系如图5所示,其中外围为c0eff_cnt的值,内部8*8模块粗体字为c0eff_cnt2的 值。 在完成反zigzag变换后,将得到的非零系数和COeff_cnt输入到IDCT反离散余弦变换模块6中,进行反离散余弦变换。其模块系统架构如图6所示。在系统架构中,将二 维IDCT变换通过进行两次一维IDCT变换来完成。同时在设计一维IDCT变换时采用了全 流水线的方式进行设计。在1D-IDCT模块中,如果每个时钟周期输入一个解码模块的频域 系数,这些系数被送入到一个8比特宽度,8字节深度的移位寄存器,这样每过8个周期后, 移位寄存器都将会输出频域系数矩阵中的一行数据。即图7中的Zin。将移位输出的一行 数据,即(Z。K Z7K)输入到图7所示的乘加运算单元电路数据。这样每个周期后Z。ut都将 输出一个运算后的数据,此数据即为1D-IDCT后的数据。图7中的1,2,3,4,5,6,7,8代表 了经过量化后的8个余弦系数序列。其数据如下,
<formula>formula see original document page 7</formula>
图7中的1代表了第一行,2代表了第2行,依次类推,8代表了第8行。
将1D-IDCT的数据存储到系数缓冲转置存储器。在此存储器中,通过读地址的倍 数跳变,实现数据依次读出时的转置。将系数缓冲转置存储器的输出数据按照第一次的方 式同样经过一个8比特宽度,8字节深度的移位寄存器后输入到图7所示的乘加电路中, 再次进行一维IDCT变换,再次得到的Z。ut即为完成2D-IDCT后的输出数据,不过在第2次 1D-IDCT过程中图7中1,2,3,4,5,6,7,8这8个余弦系数序列有了。如下所示
<formula>formula see original document page 7</formula>
经过IDCT变换后,已经得到了原始的经过降低分辨率的YCbCr色域的图像信息。 在JPEG标准中,常用的采样方式有三种,如图8所示,其中X号代表了在Y分量的采样点, 而O代表了 Cb和Cr的采样点。其中的"4:2:0"方式在采样过程中是取一个2*2的像素块 中四个像素的Cb的平均值作为1个Cb的采样点,取一个2*2的像素块中四个像素的Cr的 平均值作为1个Cr的采样点;"4:2:2"方式在采样过程中是取一个2*1的像素块中两个像 素的Cb的平均值作为1个Cb的采样点,取一个2*1的像素块中两个像素的Cr的平均值作 为l个Cr ;"4:4:4"方式则是取每个像素点的Cb和Cr作为当前像素点的Cb与Cr。解采 样的过程对于"4:2:0"方式就是将从IDCT模块得到的2*2的像素块中四个像素的Cr和Cb 的平均值作为此像素块中4个像素本身的Cb和Cr的值,使得每一个像素点都有其完备的 的YCbCr分量;对于"4:2:2"方式就是将从IDCT模块得到的2W的像素块中两个像素的Cb和Cr的平均值作为像素块中2个像素本身的Cb和Cr的值,使得每一个像素点都有其完备 的的YCbCr分量;对于"4:4:4"方式则无需解采样。经过解采样模块7后,就得到了每个像 素的Y, Cb, Cr分量。 在得到了每个像素的Y, Cb, Cr分量后,YCbCr色域的图像信息进入色域转换模块 8,按照下述公式的转换关系,就可以将每个像素点的Y, Cb, Cr分量的值转换为R, G, B分量 的值,进而进入显示模块9进行显示。至此, 一种JPEG图像解码器的VLSI系统的功能已经 全部完成。 R= y+1.402 * (Cr-128)G= y-0.34414 * (Cb-128) _0. 71414 (Cr-128)
B = y+l. 772 (Cb-128) 其中R, G, B分别代表了像素点的红色,绿色和蓝色分量。Y, Cb, Cr分别代表了像 素点的亮色分量和两个色度分量(为了使RGB得到的数据为正数,在等式右边的色度分量 都减去了 128)。
权利要求
一种JPEG图像解码器的VLSI系统实现方法,其特征是,该实现方法包括以下步骤Step1从外部输入的比特数据流,首先进入到输入FIFO模块,然后头码流解析模块对输入FIFO模块的输出数据按照JFIF文件格式进行解析;Step2在头码流解析完后,进入到熵解码模块;Step3在完成熵解码后,将得到的非零系数进行解量化操作;Step4在完成解量化后,进入到反zigzag变换单元;Step5在完成反zigzag变换后,将得到的非零系数和当前系数在模块里64个参数的位置coeff_cnt一起输入到IDCT反离散余弦变换模块,进行反离散余弦变换;Step6经过IDCT变换后,得到了原始的经过降低分辨率的YCbCr色域的图像信息;Step7经过解采样,得到了每个像素的Y,Cb,Cr分量;在得到了每个像素的Y,Cb,Cr分量后,将每个像素点的Y,Cb,Cr分量的值转换为R,G,B分量的值。
2. 如权利要求1所述的一种JPEG图像解码器的VLSI系统实现方法,其特征是,在所 述st印l中,头码流解析模块采用了双重存储器,用来存储头码流中包含的各种信息;并且 采用一个码流标志位0或者1跟随处理中的码流,通过判断当前处理码流的标志位,用来决 定采用双重存储器中的其中 一组数据进行解码。
3. 如权利要求2所述的一种JPEG图像解码器的VLSI系统实现方法,其特征是,双重存 储器由huffman解码系数寄存器和量化系数寄存器组成;在解析头码流过程中采用最高地 址位的0-1变换实现分离存储两组来自两幅图像的huffman解码系数和来自两幅图像的量 化系数,并在解码使用过程中采用码流标志位的方式,实现正确系数的读取。
4. 如权利要求3所述的一种JPEG图像解码器的VLSI系统实现方法,其特征是,在熵解 码中,对于huffman解码采用96bits缓冲移位寄存器,并根据解码数据长度分别将码字长 度16bits的rcLword,码字长度8bits的rd_byte,码字长度小于8bits的rd_bits置高电 平,反馈到缓冲寄存器,使其读入新的等长有效数据。
5. 如权利要求1所述的一种JPEG图像解码器的VLSI系统实现方法,其特征是,在所 述St印5中,在IDCT反离散余弦变换模块的输入端,伴随待解码的非零数据输出8bit计数 器,用来表示当前非零系数在整个待解码模块64输入系数中的位置。
6. —种JPEG图像解码器的VLSI系统结构,包括依次连接的输入FIFO模块、熵解码模 块、解量化模块、反zigzag变换模块、IDCT反离散余弦变换模块、解采样模块、色域转换模 块和显示模块;输入FIFO模块、熵解码模块、解量化模块、解采样模块和显示模块还分别连 接到头码流解析模块。
7. 如权利要求6所述的一种JPEG图像解码器的VLSI系统结构,其特征是,在任意的两 个相连的模块之间引入了前端数据有效标志和后端模块空闲标志,在同步时钟控制下,只 有两者都为有效时,才会在两个模块间进行数据传输。
全文摘要
本发明公开了一种JPEG图像解码器的VLSI系统结构及其实现方法。它主要包括输入FIFO模块、头码流解析模块、熵解码模块、解量化模块、反zigzag变换模块、反离散余弦变换模块、解采样模块、色域转换模块和显示模块。本发明在整体设计上采用了流水线设计,可同时连续处理多幅图像;在熵解码模块中的huffman解码中采用多字节缓冲,解码字长反馈的方式,提高了huffman解码模块的运行速率;在反离散余弦变换模块加入了待解码系数计数表示,结合模块数据结束标志的方法,实现了只有非零系数数据输入,使得单个解码模块的数据输入的周期大大缩短,有效提高了解码速率,很好的改善了整体的解码速度。通过仿真验证,在100MHz时钟频率下,本发明可实现800*600分辨率下,每秒60fps的解码效果。
文档编号H04N7/30GK101790094SQ20101012733
公开日2010年7月28日 申请日期2010年3月19日 优先权日2010年3月19日
发明者杨立政, 王洪君, 赵立歧 申请人:山东大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1