文獻標識碼: A
文章編號: 0258-7998(2011)07-144-04
隨著我國物聯(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…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×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×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.