kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 设计应用> 基于Avalon总线的图像解压缩IP核设计
基于Avalon总线的图像解压缩IP核设计
来源:电子技术应用2011年第7期
何 伟, 王 艳, 张 玲, 邬丽娜
(重庆大学 通信工程学院, 重庆400044)
摘要:介绍了基于Avalon总线的静态图像压缩标准JPEG基本模式解码器软IP核的设计和实现。IP核采用流水线和模块化的设计方法,分别设计各个模块完成其独立的功能,然后将这些模块组成一个顶层模块,采用Avalon总线接口,利用SOPC Builder工具将IP核集成到系统中。该IP核极大地提高了解码速度,具有可移植性,可以方便地集成到手机、数码相机等数字产品中。
关键词: JPEG 解压缩 IP Avalon
中图分类号:TP751
文献标识码:A
文章编号: 0258-7998(2011)07-144-04
The design of image decompression IP core based on the standard of Avalon
He Wei, Wang Yan, Zhang Ling, Wu Lina
College of Communication Engineering, Chongqing University, Chongqing 400044, China
Abstract:The paper introduce the design and realization of JPEG image decompression IP core based on the standard of Avalon.Every module was designed respectively in the way of pipeline and modularization.Then these module were made up top-level module,used Avalon bus interface and SoPC Builder,intergrating the IP core in the system.The IP greatly improves the decoding speed and have expansibility,can be integrated into various digital application such as cell phone and camara.
Key words :JPEG; secompression; IP; avalon


随着我国物联网筹备和建设的推进,高速图像处理技术的应用领域不断扩大,对图像处理的要求也越来越高。由于未经压缩图像的数据量非常庞大,对存储空间和通信带宽的需求是无限的,这就要求对图像进行压缩处理。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 头文件解析单元
在JPEG解码模块启动后,头码流解析单元首先读入JPEG文件的包头,根据JPEG文件数据的存储方式依次检测数据流中包含的各种段的标识符,把要解码的文件信息从数据流中解析出来并存储到相应的存储单元,为后面压缩数据的解码做准备。
头码流解析单元由头码流解析状态机和一系列存储单元组成。状态机主要有Idle空闲状态、ReadMarker读取标志位状态和ReadSegment读取段内信息三个状态。该单元模块初始状态为Idle状态,当外部发出解码开始信号时,模块跳转到ReadMarker状态,读完标识符后,模块进入ReadSegment状态。在这个状态下,模块对每个标志段内的信息进行解析,并对其中的重要信息如当前图像的宽度、高度以及解码需要的量化表和解码表存储到相应的存储单元。当所有的标记段解码完成后,模块又跳转到Idle(空闲)状态。其状态转移图如图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)

熵解码单元包括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]是把2D-IDCT分解成两个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色彩空间。其变换关系如下:

颜色空间转换单元的输入输出信号有:复位信号(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核的可重用性,可以将其用于其他需要实时图像解码的系统中,可降低系统设计的复杂度。
参考文献
[1] 何东健.数字图像处理(第1版)[M].西安:西安电子科技大学出版社,2003.
[2] 夏宇闻.Veriong数字系统设计教程(第2版)[M].北京:北京航空航天大学出版社,2008.
[3] 邵天增,尚冬娟.哈夫曼编码应用的一种改进[J]. 科技创新导报,2008,21:29,31.
[4] 钟文荣,陈建发.二维DCT算法的高速芯片设计[J].厦门大学学报自然科学版,2005,43(3):198-201.


此内容为AET网站原创,未经授权禁止转载。
Baidu
map