您的位置 首页 IC

根据FPGA的JPEG解码器规划与完成

为满足SoC中JPEG静止图像实时解压缩要求,在完成JPEG解码器C语言建模的基础上,采用自顶向下的设计方法,完成了JPEG Baseline解码器设计,并在FPGA开发板上验证了设计结果。该设计与A

跟着多媒体技能的蓬勃发展,视频编解码技能得到了长足的前进,人们先后拟定了多个数字图画视频编解码规范。其间JPEG仍然是现在最盛行的静止图画紧缩格局,在手持设备和网络中有广泛的运用。

本论文作业是无线投影机操控器规划中的一部分,见图1。该操控器以开放源代码处理器LEON3为中心,具有以太网、VGA、PCI等接口,PCI接口用来衔接无线网卡,VGA接口用来衔接投影机,这样构成一个无线投影体系。PC机经过有线网络或无线网络向操控器传输JPEG紧缩图画数据,经过解码器解码后显现在投影仪上,然后完成多台电脑同享一台投影机,而且避免了连线的费事,具有必定的市场前景。考虑到体系的灵活性,本操控器选用Altera FPGA作为完成渠道,规划能够无缝地转移到Altera Hardcopy技能,然后完成低成本。

本规划运用硬件描绘言语(VHDL)规划了JPEG Baseline的解码体系。

1 JPEG解码器原理

JPEG解码器主要由四部分组成:图画头信息的读取、熵解码、反量化、IDCT(反离散余弦改换),其数据流图见图2。

从图中能够看出,解码器首要从JPEG图画数据中读取Header信息,得到与解码相关的如哈夫曼表、量化表以及图画巨细等信息,而且将这些信息存储在RAM或许寄存器中,供后边的进程调用。

在图画头信息读取完成后,解码器进一步读取紧缩编码的数据并对其进行熵解码。紧缩编码的数据选用哈夫曼(Huffman)编码。哈夫曼编码是一种常用的紧缩编码办法,是Huffman于1952年为紧缩文本文件树立的。它的基本原理是:将频频运用的数据用较短的代码替代,而较少运用的数据用较长的代码替代,每个数据的代码各不相同。这些代码都是二进制码,且码的长度可变,因此哈夫曼编码是可变长编码的一种。在JPEG中选用游程编码与范式huffman编码进行数据的紧缩存储,而且直流系数(DC)与沟通系数(AC)分隔编码,进步了紧缩功率。因此在熵解码进程中需求别离对直流系数和沟通系数别离解码。当时直流系数为上一个直流系数加上当时熵解码数据(即残差)。

当解码完一个MCU(Minimal Coded Unit)后,接下来便是进行反量化的操作,行将解码出来的数据乘以一个量化系数。

最终是IDCT(反离散余弦改换)操作,即DCT(离散余弦改换)的反改换。离散余弦改换(DCT)是N.Ahmed等人在1974年提出的正交改换办法,它常被认为是对语音和图画信号进行改换的最佳办法。经过DCT改换,将数据从一个域改换到别的一个域,其大多数高频重量的系数变为0。人眼对低频重量比较灵敏,对高频重量则不太灵敏;因此量化的成果是去掉了不太重要的高频重量,降低了码率。在JPEG解码进程中需求经过IDCT复原图画原始数据。IDCT部分是核算量最大的单元,对此单元规划的好坏将直接影响到解码速度。

2 JPEG解码器规划与完成

针对JPEG解码流程特色,本JPEG解码器硬件整体规划如图3所示。JPEG CONTROLLER担任调度各个模块的履行;Src_ram存储着JPEG原始图画数据;Addr_gen模块发生下一个需求读取字节的地址;Read_markers模块读取JPEG图画的图画头信息,而且将头信息保存在Register files中,相应的量化表信息及huffman表将存储在Dqt rams和Dht rams中;Huff_derived_tbl是由huffman表生成的用于熵解码的表格;Decode MCU 模块从Src_ram读取JPEG图画数据并解码,解码出来的数据将逆zig-zag次序存储在Block ram中;IDCT模块读取Block ram中的哈夫曼解码数据进行反量化和IDCT改换,之后将数据输出到Ram。下面将对各个模块的规划作具体的介绍。

2.1 Addr_gen模块规划

此模块用于发生读取Src_ram的地址并生成下一个要读取字节的地址。其硬件完成如图4虚线右边部分所示。在非跳转情况下,当RD信号有用时,Addr_gen计数器每次递加1个单位。

跳转情况下,即skip有用时,其计数器作业如图4虚线左面部分所示,当读入地址为Addr_n的数据后需求跳转k个单位的字节(Skip_num=k),因为在读取地址为Addr_n的数据Data_n后地址计数现已添加了一个单位,因此在第三个时钟周期能跳转到地址为Addr_n+1+k的数据,而这第三个时钟周期读出来的数据Data_n+1将会被疏忽。从第四个时钟起此模块将康复正常的读取数据功用。

2.2 Read_markers模块规划

Read_markers读取JPEG文件头信息而且解说,由以下子模块组成,见图5虚线左面部分。
(1)First_marker:判别文件是否为JPEG文件,即判别开端的2B是否为FF D8;
(2)Next_marker:查找下一个标志;
(3)Get_sos:读取sos(start of scan);
(4)Skip_var:越过一些信息时被调用,给Addr_gen模块传送越过信息标志;
(5)Get_sof:读取sof(start of frame);
(6)Get_dht:读取huffman表信息,存储在Dht rams(见图1);
(7)Get_dqt:读取量化表信息,并存储在Dqt rams(见图1);
(8)Get_dri:读取重起距离,以MCU(Minimum Coded Unit)为单位。

硬件完成运用FSM(有限状态机)来进行操控。其模块调度示意图见图5虚线右边部分。

2.3 Decode_MCU模块规划

Decode_MCU是jpeg解码器规划中一个非常重要的单元,也是正式解码的开端。本规划中此模块的规划见图6虚线框中规划,主要由四个子模块组成:Fill_buffer、Decode_blockIZZ、Process_restart和Controller。

(1)Fill_buffer:当32BITS_REG中的比特数不行时操控器将发动此模块读取Src_ram中的数据而且加载到32bits_reg中,而且去掉码流中的填充数据。
(2)Decode_blockIZZ:huffman解码,而且将解码数据逆zig_zag次序输出。
(3)Process_restart:当JPEG图画中有restart interval(Get_dri)标志,在解码完由Get_dri规则的n个MCU后,操控器首要调用此模块来进行同步(在网络传输中非常重要)。
(4)Controller:操控和谐各模块的履行。

中心模块Decode_block硬件完成如图6,虚线右边是EXTEND[1]部分,选用查找表完成。Get_buffer即图6中的32BITS_REG, Bits_left记载32BITS_REG中剩下的比特数。Huff_D模块每发动一次解码一个熵编码数据。因为DC编码选用DPCM编码,解码直流(DC)时需求添加一个时钟周期来加上上一个DC的值,然后得出如图6所示的output,解码沟通系数(AC)时则在EXTEND后直接输出。Sel_s_input为”00”时,选通huffman解码数据;为”01”时,选通EXTEND后的数据;为”10”时,选通加上了last_dc_val的数据。

2.4 IDCT模块规划

IDCT(Inverse Discrete Consine Transform)是JPEG解码器中最耗资源和核算量最大的单元。本规划为削减内存读取,进步解码速度,将反量化也放在IDCT模块中完成。

离散余弦改换的公式和离散余弦逆改换的公式如下:

经剖析公式(1)能够做如下等效改换:

即经过两次一维的IDCT改换即可完成二维的IDCT。考虑到数据的读取,本规划IDCT模块的规划如图7虚线框中所示。

完成进程:首要读取Block ram的一列,相应的反量化数据从Dqt ram中读取,经过IQ(反量化单元,即乘法器)后的8个数据存储在regs中,之后操控器发动一维IDCT改换,并将反改换后的数据存储在REG FILES的一列中。当一个Block ram中的8列数据悉数反量化和IDCT改换后,操控器将切换成对REG FILES中一行的数据进行一维IDCT改换,改换后的数据存储在REG FILES中的一行中,之后再进行下一行改换,直到8行数据悉数IDCT 改换完。根据参考文献[2]的一维IDCT完成具有资源比较小和完成简略的特色,经过对IDCT反改换矩阵系数剖析,一维IDCT奇偶数据改换具有不同的结构化特色,在此能够进行独自的规划,最终将两部分的成果数据进行碟形加减操作,得到一维IDCT的运算成果(见图7)。这样改换完的数据即可进行输出,送到显现单元进行颜色改换和其它后续处理后显现。

2.5 测验与成果

本规划选用的硬件开发渠道为ALTERA DE2,FPGA为EP2C35F672C6,在quartusii 5.0中进行归纳,所耗资源和最大时钟频率见表1。2005年ACTEL[3]公司推出的JPEG-D IP的速度针对不同的渠道其速度改变从31M~69M,同年4I2I[4]公司推出的JPEG-D的最大速率为40M,从速度能够看出本规划达到了实时解码的要求。

将VHDL与C言语完成的JPEG解码器对图画解码发生的成果进行比照,然后能够判别解码正确与过错。经过成果比照,本规划成果完全正确。

本规划严厉依照VLSI自顶向下规划的一般流程,首要进行C言语级建模[5],然后得到测验矢量和JPEG硬件解码器的整体架构;之后完成了各个顶层模块和子模块的接口界说;最终进行各个模块的VHDL完成。从成果可知达到了实时解码要求,而且节省了资源。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/195885.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部