基于Avalon总线的图像解压缩IP核设计

2011-06-03 09:14邬丽娜
电子技术应用 2011年7期
关键词:码字频域解码

何 伟,王 艳,张 玲,邬丽娜

(重庆大学 通信工程学院,重庆400044)

随着我国物联网筹备和建设的推进,高速图像处理技术的应用领域不断扩大,对图像处理的要求也越来越高。由于未经压缩图像的数据量非常庞大,对存储空间和通信带宽的需求是无限的,这就要求对图像进行压缩处理。JPEG图像压缩标准凭着其高压缩率和灵活的应用形式得到了广泛的应用。

Avalon总线是Altera公司开发的用于Nios嵌入式处理器的参数化接口总线,由一组预定义的信号组成,是一种相对简单的总线结构,主要用于连接片内存储器和外设,以构成SOPC系统。本文在研究JPEG算法的基础上,设计了一种基于Avalon总线的图像解压缩IP核,以提高图像解码的速度,满足实时性要求。

1 JPEG解压缩原理

JPEG(Joint Photographic Expert Group)是第一个适用于连续色调、多灰度、彩色或黑白静止图像的国际标准[1]。JPEG解码的目的是将编码后的压缩数据转换成适合于显示器显示的RGB信号。其解码流程如图1所示。

解码流程的主要功能模块包括:(1)头文件解析;(2)熵解码,包括直流系数解码、交流系数解码和差分解码;(3)反量化与反 Z变换(扫描);(4)IDCT变换;(5)颜色空间转换。将每个模块用Verilog HDL语言进行设计[2],编译后,利用Modelsim软件对其进行功能仿真和时序仿真,最终完成各个单元的设计和IP核的实现。

图1 解码流程图

1.1 头文件解析单元

在JPEG解码模块启动后,头码流解析单元首先读入JPEG文件的包头,根据JPEG文件数据的存储方式依次检测数据流中包含的各种段的标识符,把要解码的文件信息从数据流中解析出来并存储到相应的存储单元,为后面压缩数据的解码做准备。

头码流解析单元由头码流解析状态机和一系列存储单元组成。状态机主要有Idle空闲状态、ReadMarker读取标志位状态和ReadSegment读取段内信息三个状态。该单元模块初始状态为Idle状态,当外部发出解码开始信号时,模块跳转到ReadMarker状态,读完标识符后,模块进入ReadSegment状态。在这个状态下,模块对每个标志段内的信息进行解析,并对其中的重要信息如当前图像的宽度、高度以及解码需要的量化表和解码表存储到相应的存储单元。当所有的标记段解码完成后,模块又跳转到Idle(空闲)状态。其状态转移图如图2所示。

图2 头码流解析单元状态转移图

头文件解析单元模块的输入输出信号分别为:复位信号(rst)、系统时钟(clk)、输入数据有效(DataInEnabe),输入数据(DataIn)、状态机状态(state),读取段内信息时的状态(process)。该模块在Modelsim仿真软件下的顶层仿真如图3所示。由仿真图可知,该单元可以每2个时钟处理1 B的数据。

1.2 熵解码单元

JPEG图像熵解码由Huffman编码、行程编码和变长编码三部分组成。其解码过程为:对输入的数据流进行Huffman解码,解码成功后得到一个变长的码字,根据解析的Huffman解码表寻址得到该码字对应的解码信息。该解码信息为8 bit,高4 bit代表在该频域系数之前0的个数,而低4 bit表示该频域系数的二进制bit长度。最后,根据系数所占用的二进制bit长度,确定该频域系数的值。

从解码过程可知,Huffman解码步骤比较耗时,这是因为Huffman算法为变长编码,压缩后产生的码字长度不固定,需要逐个bit地读入数据。根据范式哈夫曼编码的一个很重要特性:长度为i的码字的前j位的数值大于长度为j的码字的数值,即i>j[3]。因此可以构造出一种并行结构的huffman快速解码算法。将N(N=1,2,3…15)bit长度的最小码字低位补0扩充到 16 bit,得到 f(N)。对输入的 16 bit JPEG码流 code与 f(N)和 f(N+1)进行比较,如果 f(N)<code<f(N+1),则可以确定待解码码字长度为N。在确定码字长度后,定义offset=code-f(N)。若f(N)对应的解码信息的存储地址为addr(N),则code的解码信息的地址为offset+addr(N)。以该地址作为Huffman解码表的读地址,就可以得到对应的Run/szie解码信息。快速Huffman解码算法结构如图4所示。

熵解码单元包括Huffman解码及变长解码和行程解码。Huffman解码完成后,再进行变长解码和行程解码。在该部分中,主要根据解码出来的Run/size进行幅值的确定和0行程的解码,同时设置了计数器counter用来记录当前解码符号在8×8数据块中的位置。如果Run/size为00,则表示该图像块已解码完成;如果Run/size为F0,则将 counter加上 16。否则,将 counter加上 Run,从码流中读取size位,判断最高位,如果为0,则表示当前系数为负数,将该bit以及后面读入的 bit全部取反;为 1表示当前系数为正数,将当前系数的剩余bit读出,输出到外部模块。

熵解码单元模块的输入输出信号有:复位信号(rst)、系统时钟(clk)、输入数据有效(DataInEnabe)、输入数据(DataIn)、解码出来的哈夫曼码字(TableCode)、Huffman解码表的寻址地址(DhtNumber)、行程 0的个数(DhtZero),该频域系数的二进制bit数 (DhtWidth)、频域系数的幅值(OutCode)。该模块在Modelsim仿真软件下的仿真如图5所示。由仿真图可知,该单元可以每1个时钟解码出一个哈夫曼码字,每5个时钟完成一个频域数据的熵解码。

1.3 反量化与反Z变换单元

量化是图像压缩中最重要的部分。DCT变换并没有压缩图像数据,而是将能量聚集在低频系数部分。DCT的低频系数包含了图像的主要信息,而其高频系数是反映图像较次要的信息。因此,结合人类视觉系统的特点,采用特定的量化表,忽略部分高频分量,从而达到压缩的目的,故量化也就是进行除法操作。相应地,反量化过程就是将Huffman解码后的64个频域数据分别与对应的量化表中量化系数相乘。而对0系数进行相乘没有任何意义,因此,在该单元的设计中,仅对非0频域系数进行相乘。在Huffman解码模块中,counter用于记录已经解码的频域数据的个数,Run记录0行程的个数,将两个数值相加作为量化表存储单元的寻址地址,查到当前非0频域系数对应的量化系数。反Z变换则按照对应关系输出反量化后的数据,处理起来比较简单,本文不作讨论。

反量化与反Z变换单元模块的输入输出信号有:复位信号(rst)、系统时钟(clk)、输入数据有效(DataInEnabe)、解码出来的哈夫曼码字 (NumberCode)、解码出来的非0频域系数(OutCode)、量化表寻址地址(DqtNumber)、量化系数(DqtData)、输出使能(DecodeEnable)、反量化后的数据(DecodeCode)。该模块在Modelsim仿真软件下的仿真如图6所示。由仿真图可知,通过对量化单元寻址,每个时钟就可以完成一个数据的反量化过程。

1.4 IDCT变换单元

对量化过的像素进行反Z变换,得到8×8的数据块。图像数据是编码时通过正向离散余弦变换得到的结果,解码时必须将其反向余弦变换,将数值c向时域转换。目前,用硬件实现的快速算法的普遍思想[4]是把2DIDCT分解成两个1D-IDCT,再在1D-DCT做快速算法,但是这种方法会占用过多的芯片资源。本文采用分时复用的方法,用一个1D-IDCT模块实现二维余弦变换,其总体结构如图7所示。

对于1D-IDCT,本文采用经典的陈氏算法。由于其算法具有清楚的分级结构,可以采用流水线结构的设计方法来提高解码速度。对于陈氏算法,采用4级流水线可以实现1D-IDCT算法。每级都有两组寄存器,一组用于存放中间结果,另一组用于寄存运算结果,同时也作为下一级的输入。该设计利用状态机产生变换矩阵,通过共用乘法器来减少乘法器的使用,由原来的22个减少到6个,大大节约了逻辑资源。

IDCT模块的输入输出信号有:复位信号(rst)、系统时钟(clk)、输入数据有效(DataInEnabe)、反量化后的频域系 数(Data00In)、输 出使 能(DataOutEnable)、IDCT 变换 行数(DataOutPage)、IDCT变换流水线级数(DataOutCount)、IDCT变换完成后的时域系数 (Data0Out,Data10Out)。该模块在Modelsim仿真软件下的仿真如图8所示。

1.5 颜色空间转换单元

在JPEG图像进行编码时,为了便于压缩,需要将图像数据由RGB色彩空间转换到YCbCr色彩空间。而在解码时,为了便于终端显示,则需要将图像数据由YCbCr色彩空间转换到RGB色彩空间。其变换关系如下:

为了避免浮点数运算,将所有的系数都乘以1 024,这样,变换关系为:

颜色空间转换单元的输入输出信号有:复位信号(rst)、系统时钟(clk)、输入数据有效(DataInEnabe)、色彩空间信号(DataY、DataCb、DataCr)、变换后的RGB信号(OutR、OutG、OutB)。该模块在Modelsim仿真软件下的仿真如图9所示,由仿真图可知,在输入一组信号后,3个时钟周期可以得到对应的一组RGB信号,直至完成色彩空间转换算法。

2 基于Avalon总线的JPEG IP核设计

Avalon总线是一种协议较为简单的片内总线,Nios通过Avalon总线与外界进行数据交换。Avalon总线的特点有:(1)所有外设的接口与Avalon总线时钟同步,不需要复杂的握手/应答机制。(2)所有的信号都是高电平或低电平有效,便于信号在总线中高速传输。(3)为了方便外设的设计,地址、数据和控制信号使用分离的、专用的端口。

JPEG解码时,前一个模块的输出是下一个模块的输入。根据Avalon总线协议,该解码模型需要设置一组Avalon接口,控制部分由Nios完成。Avalon接口设置如下:clk为全局同步时钟,DataInRead是握手信号,当为高时,向外设发送数据请求;DataInEnable为输入数据有效信号,有效时,表示当前传送的是有效的数据,IP核开始接收图像码流 DataIn;为了提高图像的解码速度,数据宽度设计为32 bit;当头文件分析完成后,IP发送 ImageEnable信号,为1时,表示开始正式图像解码,接下来进行Huffman解码、IQ和 IDCT变换,最终输出 3个 8 bit的RGB数据。输出数据只有在OutEnable为高时有效,当最后一个码流结束后,输出JPEGIDLE信号。JPEG解码IP核的输入输出时序仿真图分别如图10、图11所示。

完成设计和验证后,该IP核可以通过SOPC Builder工具加入到系统中。基于SOPC的JPEG解码系统如图12所示。图中,SDRAM控制器实现处理器、VGA控制器和SDRAM之间的图像数据存取。由于VGA直接从SDRAM中读取数据,所以将VGA的avalon_master接口连接到SDRAM上,当VGA控制器发出读有效信号到SDRAM时,SDRAM直接将图像数据传送给VGA控制器,VGA控制器同时产生行场同步信号,与RGB数据一起传送到显示器。SDRAM采用ICSI公司的数据宽度为16 bit、存储容量为64 MB的IS42S8800来存储解码后的图像数据。

针对软件解码图片速度慢的问题,本文设计了一种基于Avalon总线的JPEG解码IP核。系统时钟设置为50 MHz,在Quartus下进行综合和仿真,采用CycloneII EP2C8Q208C8硬件芯片验证了IP的正确性,极大地提高了图片解码的速度。同时,利用IP核的可重用性,可以将其用于其他需要实时图像解码的系统中,可降低系统设计的复杂度。

图12 JPEG解码系统图

[1]何东健.数字图像处理(第 1版)[M].西安:西安电子科技大学出版社,2003.

[2]夏宇闻.Veriong数字系统设计教程(第 2版)[M].北京:北京航空航天大学出版社,2008.

[3]邵天增,尚冬娟.哈夫曼编码应用的一种改进[J].科技创新导报,2008,21:29,31.

[4]钟文荣,陈建发.二维 DCT算法的高速芯片设计[J].厦门大学学报自然科学版,2005,43(3):198-201.

猜你喜欢
码字频域解码
大型起重船在规则波中的频域响应分析
《解码万吨站》
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
放 下
数据链系统中软扩频码的优选及应用
频域稀疏毫米波人体安检成像处理和快速成像稀疏阵列设计
放下
基于改进Radon-Wigner变换的目标和拖曳式诱饵频域分离