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


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

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

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

 

 

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

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

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

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

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

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

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

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

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


 

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