《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于Avalon總線的圖像解壓縮IP核設(shè)計(jì)
基于Avalon總線的圖像解壓縮IP核設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2011年第7期
何 偉, 王 艷, 張 玲, 鄔麗娜
(重慶大學(xué) 通信工程學(xué)院, 重慶400044)
摘要: 介紹了基于Avalon總線的靜態(tài)圖像壓縮標(biāo)準(zhǔn)JPEG基本模式解碼器軟IP核的設(shè)計(jì)和實(shí)現(xiàn)。IP核采用流水線和模塊化的設(shè)計(jì)方法,分別設(shè)計(jì)各個(gè)模塊完成其獨(dú)立的功能,然后將這些模塊組成一個(gè)頂層模塊,采用Avalon總線接口,利用SOPC Builder工具將IP核集成到系統(tǒng)中。該IP核極大地提高了解碼速度,具有可移植性,可以方便地集成到手機(jī)、數(shù)碼相機(jī)等數(shù)字產(chǎn)品中。
關(guān)鍵詞: JPEG 解壓縮 IP Avalon
中圖分類號(hào): TP751
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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


    隨著我國(guó)物聯(lián)網(wǎng)籌備和建設(shè)的推進(jìn),高速圖像處理技術(shù)的應(yīng)用領(lǐng)域不斷擴(kuò)大,對(duì)圖像處理的要求也越來(lái)越高。由于未經(jīng)壓縮圖像的數(shù)據(jù)量非常龐大,對(duì)存儲(chǔ)空間和通信帶寬的需求是無(wú)限的,這就要求對(duì)圖像進(jìn)行壓縮處理。JPEG圖像壓縮標(biāo)準(zhǔn)憑著其高壓縮率和靈活的應(yīng)用形式得到了廣泛的應(yīng)用。
    Avalon總線是Altera公司開(kāi)發(fā)的用于Nios嵌入式處理器的參數(shù)化接口總線,由一組預(yù)定義的信號(hào)組成,是一種相對(duì)簡(jiǎn)單的總線結(jié)構(gòu),主要用于連接片內(nèi)存儲(chǔ)器和外設(shè),以構(gòu)成SOPC系統(tǒng)。本文在研究JPEG算法的基礎(chǔ)上,設(shè)計(jì)了一種基于Avalon總線的圖像解壓縮IP核,以提高圖像解碼的速度,滿足實(shí)時(shí)性要求。
1 JPEG解壓縮原理
    JPEG(Joint Photographic Expert Group)是第一個(gè)適用于連續(xù)色調(diào)、多灰度、彩色或黑白靜止圖像的國(guó)際標(biāo)準(zhǔn)[1]。JPEG解碼的目的是將編碼后的壓縮數(shù)據(jù)轉(zhuǎn)換成適合于顯示器顯示的RGB信號(hào)。其解碼流程如圖1所示。

    解碼流程的主要功能模塊包括:(1)頭文件解析;(2)熵解碼,包括直流系數(shù)解碼、交流系數(shù)解碼和差分解碼; (3)反量化與反Z變換(掃描);(4)IDCT變換;(5)顏色空間轉(zhuǎn)換。將每個(gè)模塊用Verilog HDL語(yǔ)言進(jìn)行設(shè)計(jì)[2],編譯后,利用Modelsim軟件對(duì)其進(jìn)行功能仿真和時(shí)序仿真,最終完成各個(gè)單元的設(shè)計(jì)和IP核的實(shí)現(xiàn)。
1.1 頭文件解析單元
    在JPEG解碼模塊啟動(dòng)后,頭碼流解析單元首先讀入JPEG文件的包頭,根據(jù)JPEG文件數(shù)據(jù)的存儲(chǔ)方式依次檢測(cè)數(shù)據(jù)流中包含的各種段的標(biāo)識(shí)符,把要解碼的文件信息從數(shù)據(jù)流中解析出來(lái)并存儲(chǔ)到相應(yīng)的存儲(chǔ)單元,為后面壓縮數(shù)據(jù)的解碼做準(zhǔn)備。
    頭碼流解析單元由頭碼流解析狀態(tài)機(jī)和一系列存儲(chǔ)單元組成。狀態(tài)機(jī)主要有Idle空閑狀態(tài)、ReadMarker讀取標(biāo)志位狀態(tài)和ReadSegment讀取段內(nèi)信息三個(gè)狀態(tài)。該單元模塊初始狀態(tài)為Idle狀態(tài),當(dāng)外部發(fā)出解碼開(kāi)始信號(hào)時(shí),模塊跳轉(zhuǎn)到ReadMarker狀態(tài),讀完標(biāo)識(shí)符后,模塊進(jìn)入ReadSegment狀態(tài)。在這個(gè)狀態(tài)下,模塊對(duì)每個(gè)標(biāo)志段內(nèi)的信息進(jìn)行解析,并對(duì)其中的重要信息如當(dāng)前圖像的寬度、高度以及解碼需要的量化表和解碼表存儲(chǔ)到相應(yīng)的存儲(chǔ)單元。當(dāng)所有的標(biāo)記段解碼完成后,模塊又跳轉(zhuǎn)到Idle(空閑)狀態(tài)。其狀態(tài)轉(zhuǎn)移圖如圖2所示。

    頭文件解析單元模塊的輸入輸出信號(hào)分別為:復(fù)位信號(hào)(rst)、系統(tǒng)時(shí)鐘(clk)、輸入數(shù)據(jù)有效(DataInEnabe),輸入數(shù)據(jù)(DataIn)、狀態(tài)機(jī)狀態(tài)(state),讀取段內(nèi)信息時(shí)的狀態(tài)(process)。該模塊在Modelsim仿真軟件下的頂層仿真如圖3所示。由仿真圖可知,該單元可以每2個(gè)時(shí)鐘處理1 B的數(shù)據(jù)。

 

 

1.2 熵解碼單元
    JPEG圖像熵解碼由Huffman編碼、行程編碼和變長(zhǎng)編碼三部分組成。其解碼過(guò)程為:對(duì)輸入的數(shù)據(jù)流進(jìn)行Huffman解碼,解碼成功后得到一個(gè)變長(zhǎng)的碼字,根據(jù)解析的Huffman解碼表尋址得到該碼字對(duì)應(yīng)的解碼信息。該解碼信息為8 bit,高4 bit代表在該頻域系數(shù)之前0的個(gè)數(shù),而低4 bit表示該頻域系數(shù)的二進(jìn)制bit長(zhǎng)度。最后,根據(jù)系數(shù)所占用的二進(jìn)制bit長(zhǎng)度,確定該頻域系數(shù)的值。
    從解碼過(guò)程可知,Huffman解碼步驟比較耗時(shí),這是因?yàn)镠uffman算法為變長(zhǎng)編碼,壓縮后產(chǎn)生的碼字長(zhǎng)度不固定,需要逐個(gè)bit地讀入數(shù)據(jù)。根據(jù)范式哈夫曼編碼的一個(gè)很重要特性:長(zhǎng)度為i的碼字的前j位的數(shù)值大于長(zhǎng)度為j的碼字的數(shù)值,即i>j[3]。因此可以構(gòu)造出一種并行結(jié)構(gòu)的huffman快速解碼算法。將N(N=1,2,3&hellip;15)bit長(zhǎng)度的最小碼字低位補(bǔ)0擴(kuò)充到16 bit,得到f(N)。對(duì)輸入的16 bit JPEG碼流code與f(N)和f(N+1)進(jìn)行比較,如果f(N)<code<f(N+1),則可以確定待解碼碼字長(zhǎng)度為N。在確定碼字長(zhǎng)度后,定義offset=code-f(N)。若f(N)對(duì)應(yīng)的解碼信息的存儲(chǔ)地址為addr(N),則code的解碼信息的地址為offset+addr(N)。以該地址作為Huffman解碼表的讀地址,就可以得到對(duì)應(yīng)的Run/szie解碼信息。快速Huffman解碼算法結(jié)構(gòu)如圖4所示。

    熵解碼單元包括Huffman解碼及變長(zhǎng)解碼和行程解碼。Huffman解碼完成后,再進(jìn)行變長(zhǎng)解碼和行程解碼。在該部分中,主要根據(jù)解碼出來(lái)的Run/size進(jìn)行幅值的確定和0行程的解碼,同時(shí)設(shè)置了計(jì)數(shù)器counter用來(lái)記錄當(dāng)前解碼符號(hào)在8&times;8數(shù)據(jù)塊中的位置。如果Run/size為00,則表示該圖像塊已解碼完成;如果Run/size為F0,則將counter加上16。否則,將counter加上Run,從碼流中讀取size位,判斷最高位,如果為0,則表示當(dāng)前系數(shù)為負(fù)數(shù),將該bit以及后面讀入的bit全部取反;為1表示當(dāng)前系數(shù)為正數(shù),將當(dāng)前系數(shù)的剩余bit讀出,輸出到外部模塊。
    熵解碼單元模塊的輸入輸出信號(hào)有:復(fù)位信號(hào)(rst)、系統(tǒng)時(shí)鐘(clk)、輸入數(shù)據(jù)有效(DataInEnabe)、輸入數(shù)據(jù)(DataIn)、解碼出來(lái)的哈夫曼碼字(TableCode)、Huffman解碼表的尋址地址(DhtNumber)、行程0的個(gè)數(shù)(DhtZero),該頻域系數(shù)的二進(jìn)制bit數(shù)(DhtWidth)、頻域系數(shù)的幅值(OutCode)。該模塊在Modelsim仿真軟件下的仿真如圖5所示。由仿真圖可知,該單元可以每1個(gè)時(shí)鐘解碼出一個(gè)哈夫曼碼字,每5個(gè)時(shí)鐘完成一個(gè)頻域數(shù)據(jù)的熵解碼。

1.3 反量化與反Z變換單元
    量化是圖像壓縮中最重要的部分。DCT變換并沒(méi)有壓縮圖像數(shù)據(jù),而是將能量聚集在低頻系數(shù)部分。DCT 的低頻系數(shù)包含了圖像的主要信息, 而其高頻系數(shù)是反映圖像較次要的信息。因此,結(jié)合人類視覺(jué)系統(tǒng)的特點(diǎn),采用特定的量化表,忽略部分高頻分量,從而達(dá)到壓縮的目的,故量化也就是進(jìn)行除法操作。相應(yīng)地,反量化過(guò)程就是將Huffman解碼后的64個(gè)頻域數(shù)據(jù)分別與對(duì)應(yīng)的量化表中量化系數(shù)相乘。而對(duì)0系數(shù)進(jìn)行相乘沒(méi)有任何意義,因此,在該單元的設(shè)計(jì)中,僅對(duì)非0頻域系數(shù)進(jìn)行相乘。在Huffman解碼模塊中,counter用于記錄已經(jīng)解碼的頻域數(shù)據(jù)的個(gè)數(shù),Run記錄0行程的個(gè)數(shù),將兩個(gè)數(shù)值相加作為量化表存儲(chǔ)單元的尋址地址,查到當(dāng)前非0頻域系數(shù)對(duì)應(yīng)的量化系數(shù)。反Z變換則按照對(duì)應(yīng)關(guān)系輸出反量化后的數(shù)據(jù),處理起來(lái)比較簡(jiǎn)單,本文不作討論。
    反量化與反Z變換單元模塊的輸入輸出信號(hào)有:復(fù)位信號(hào)(rst)、系統(tǒng)時(shí)鐘(clk)、輸入數(shù)據(jù)有效(DataInEnabe)、解碼出來(lái)的哈夫曼碼字(NumberCode)、解碼出來(lái)的非0頻域系數(shù)(OutCode)、量化表尋址地址(DqtNumber)、量化系數(shù)(DqtData)、輸出使能(DecodeEnable)、反量化后的數(shù)據(jù)(DecodeCode)。該模塊在Modelsim仿真軟件下的仿真如圖6所示。由仿真圖可知,通過(guò)對(duì)量化單元尋址,每個(gè)時(shí)鐘就可以完成一個(gè)數(shù)據(jù)的反量化過(guò)程。

1.4 IDCT變換單元
  對(duì)量化過(guò)的像素進(jìn)行反Z變換,得到8&times;8的數(shù)據(jù)塊。圖像數(shù)據(jù)是編碼時(shí)通過(guò)正向離散余弦變換得到的結(jié)果,解碼時(shí)必須將其反向余弦變換,將數(shù)值c向時(shí)域轉(zhuǎn)換。目前,用硬件實(shí)現(xiàn)的快速算法的普遍思想[4]是把2D-IDCT分解成兩個(gè)1D-IDCT,再在1D-DCT做快速算法,但是這種方法會(huì)占用過(guò)多的芯片資源。本文采用分時(shí)復(fù)用的方法,用一個(gè)1D-IDCT模塊實(shí)現(xiàn)二維余弦變換,其總體結(jié)構(gòu)如圖7所示。

    對(duì)于1D-IDCT,本文采用經(jīng)典的陳氏算法。由于其算法具有清楚的分級(jí)結(jié)構(gòu),可以采用流水線結(jié)構(gòu)的設(shè)計(jì)方法來(lái)提高解碼速度。對(duì)于陳氏算法,采用4級(jí)流水線可以實(shí)現(xiàn)1D-IDCT算法。每級(jí)都有兩組寄存器,一組用于存放中間結(jié)果,另一組用于寄存運(yùn)算結(jié)果,同時(shí)也作為下一級(jí)的輸入。該設(shè)計(jì)利用狀態(tài)機(jī)產(chǎn)生變換矩陣,通過(guò)共用乘法器來(lái)減少乘法器的使用,由原來(lái)的22個(gè)減少到6個(gè),大大節(jié)約了邏輯資源。
    IDCT模塊的輸入輸出信號(hào)有:復(fù)位信號(hào)(rst)、系統(tǒng)時(shí)鐘(clk)、輸入數(shù)據(jù)有效(DataInEnabe)、反量化后的頻域系數(shù)(Data00In)、輸出使能(DataOutEnable)、IDCT變換行數(shù)(DataOutPage)、IDCT變換流水線級(jí)數(shù)(DataOutCount)、IDCT變換完成后的時(shí)域系數(shù)(Data0Out, Data10Out)。該模塊在Modelsim仿真軟件下的仿真如圖8所示。

1.5 顏色空間轉(zhuǎn)換單元
       在JPEG圖像進(jìn)行編碼時(shí),為了便于壓縮,需要將圖像數(shù)據(jù)由RGB色彩空間轉(zhuǎn)換到Y(jié)CbCr色彩空間。而在解碼時(shí),為了便于終端顯示,則需要將圖像數(shù)據(jù)由YCbCr色彩空間轉(zhuǎn)換到RGB色彩空間。其變換關(guān)系如下:
  
    顏色空間轉(zhuǎn)換單元的輸入輸出信號(hào)有:復(fù)位信號(hào)(rst)、系統(tǒng)時(shí)鐘(clk)、輸入數(shù)據(jù)有效(DataInEnabe)、色彩空間信號(hào)(DataY、DataCb、DataCr)、變換后的RGB信號(hào)(OutR、OutG、OutB)。該模塊在Modelsim仿真軟件下的仿真如圖9所示,由仿真圖可知,在輸入一組信號(hào)后,3個(gè)時(shí)鐘周期可以得到對(duì)應(yīng)的一組RGB信號(hào),直至完成色彩空間轉(zhuǎn)換算法。

2 基于Avalon總線的JPEG IP核設(shè)計(jì)
    Avalon總線是一種協(xié)議較為簡(jiǎn)單的片內(nèi)總線,Nios通過(guò)Avalon總線與外界進(jìn)行數(shù)據(jù)交換。Avalon總線的特點(diǎn)有:(1)所有外設(shè)的接口與Avalon總線時(shí)鐘同步,不需要復(fù)雜的握手/應(yīng)答機(jī)制。(2)所有的信號(hào)都是高電平或低電平有效,便于信號(hào)在總線中高速傳輸。(3)為了方便外設(shè)的設(shè)計(jì),地址、數(shù)據(jù)和控制信號(hào)使用分離的、專用的端口。
    JPEG解碼時(shí),前一個(gè)模塊的輸出是下一個(gè)模塊的輸入。根據(jù)Avalon總線協(xié)議,該解碼模型需要設(shè)置一組Avalon接口,控制部分由Nios完成。Avalon接口設(shè)置如下:clk為全局同步時(shí)鐘,DataInRead是握手信號(hào),當(dāng)為高時(shí),向外設(shè)發(fā)送數(shù)據(jù)請(qǐng)求;DataInEnable為輸入數(shù)據(jù)有效信號(hào),有效時(shí),表示當(dāng)前傳送的是有效的數(shù)據(jù),IP核開(kāi)始接收?qǐng)D像碼流DataIn;為了提高圖像的解碼速度,數(shù)據(jù)寬度設(shè)計(jì)為32 bit;當(dāng)頭文件分析完成后,IP發(fā)送ImageEnable信號(hào),為1時(shí),表示開(kāi)始正式圖像解碼,接下來(lái)進(jìn)行Huffman解碼、IQ和IDCT變換,最終輸出3個(gè)8 bit的RGB數(shù)據(jù)。輸出數(shù)據(jù)只有在OutEnable為高時(shí)有效,當(dāng)最后一個(gè)碼流結(jié)束后,輸出JPEGIDLE信號(hào)。JPEG解碼IP核的輸入輸出時(shí)序仿真圖分別如圖10、圖11所示。

    完成設(shè)計(jì)和驗(yàn)證后,該IP核可以通過(guò)SOPC Builder工具加入到系統(tǒng)中。基于SOPC的JPEG解碼系統(tǒng)如圖12所示。圖中,SDRAM控制器實(shí)現(xiàn)處理器、VGA控制器和SDRAM之間的圖像數(shù)據(jù)存取。由于VGA直接從SDRAM中讀取數(shù)據(jù),所以將VGA的avalon_master接口連接到SDRAM上, 當(dāng)VGA控制器發(fā)出讀有效信號(hào)到SDRAM時(shí),SDRAM直接將圖像數(shù)據(jù)傳送給VGA控制器,VGA控制器同時(shí)產(chǎn)生行場(chǎng)同步信號(hào),與RGB數(shù)據(jù)一起傳送到顯示器。SDRAM采用ICSI公司的數(shù)據(jù)寬度為16 bit、存儲(chǔ)容量為64 MB的IS42S8800來(lái)存儲(chǔ)解碼后的圖像數(shù)據(jù)。

    針對(duì)軟件解碼圖片速度慢的問(wèn)題,本文設(shè)計(jì)了一種基于Avalon總線的JPEG解碼IP核。系統(tǒng)時(shí)鐘設(shè)置為50 MHz,在Quartus下進(jìn)行綜合和仿真,采用CycloneII EP2C8Q208C8硬件芯片驗(yàn)證了IP的正確性,極大地提高了圖片解碼的速度。同時(shí),利用IP核的可重用性,可以將其用于其他需要實(shí)時(shí)圖像解碼的系統(tǒng)中,可降低系統(tǒng)設(shè)計(jì)的復(fù)雜度。
參考文獻(xiàn)
[1] 何東健.數(shù)字圖像處理(第1版)[M].西安:西安電子科技大學(xué)出版社,2003.
[2] 夏宇聞.Veriong數(shù)字系統(tǒng)設(shè)計(jì)教程(第2版)[M].北京:北京航空航天大學(xué)出版社,2008.
[3] 邵天增,尚冬娟.哈夫曼編碼應(yīng)用的一種改進(jìn)[J]. 科技創(chuàng)新導(dǎo)報(bào),2008,21:29,31.
[4] 鐘文榮,陳建發(fā).二維DCT算法的高速芯片設(shè)計(jì)[J].廈門大學(xué)學(xué)報(bào)自然科學(xué)版,2005,43(3):198-201.


 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。