專利名稱:一種jpeg圖像解碼器的vlsi系統(tǒng)結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本實(shí)用新型屬于數(shù)字圖像處理領(lǐng)域,涉及到一種JPEG圖像解碼器的VLSI系統(tǒng)結(jié) 構(gòu)及其實(shí)現(xiàn)方法。具體地說涉及采用Verilog HDL語言實(shí)現(xiàn)JPEG解碼器的硬件實(shí)現(xiàn)。
背景技術(shù):
JPEG 全名為 Joint Photographic Experts Group (聯(lián)合圖像專家組),它是一個 在國際化標(biāo)準(zhǔn)組織(ISO)下從事靜態(tài)圖像壓縮制定的委員會。它制定出了第一套國標(biāo)靜態(tài) 圖像壓縮標(biāo)準(zhǔn)ISO 10918-1,簡稱JPEG。JPEG標(biāo)準(zhǔn)包括多種不同的壓縮方式,其中基準(zhǔn)壓縮過程得到了最廣泛的應(yīng)用。大 多數(shù)現(xiàn)在的視頻壓縮技術(shù)(如MJPEG,MPEG-1/2)都采用了 JPEG的基準(zhǔn)壓縮過程。在當(dāng)今 的多媒體技術(shù)中JPEG圖像有著廣泛的應(yīng)用。利用它,可以在顯著提高壓縮效率(25 1) 的同時,獲得較好的圖像效果,從而可以大大減少在存儲和傳輸圖像數(shù)據(jù)所需的存儲空間 和帶寬。隨著近幾年技術(shù)的發(fā)展,便攜式電子產(chǎn)品越來越受到重視,這就客觀上對JPEG圖 像文件的解碼速率和效果提出了更高的要求。JPEG解碼方式主要有三種,一是傳統(tǒng)的純軟 件解碼,二是通過MCU控制DSP來實(shí)現(xiàn),三是通過專用解碼芯片實(shí)現(xiàn)。由于第三種方式相對 于其他兩種有著很大的價格優(yōu)勢,使得在現(xiàn)今的便攜式電子產(chǎn)品中,專用解碼芯片正在成 為主流。現(xiàn)有市場上的的專用解碼芯片大多數(shù)都是由國外廠商設(shè)計(jì)并制造的,少數(shù)國產(chǎn)芯 片其優(yōu)化算法和設(shè)計(jì)方案也都是不公開的。制約JPEG圖像解碼速率的瓶頸主要集中于標(biāo) 準(zhǔn)中的huffman解碼以及IDCT(反離散余弦變換)這兩部分。其中huff man解碼為變長游 程解碼,IDCT則一次需要64個系數(shù)才能完成一次計(jì)算。為了解決上述難題,現(xiàn)今方案,一 般采用并行模塊的方式進(jìn)行處理,但這樣不可避免地造成了芯片面積的擴(kuò)大,從而使得芯 片的成本大大增加。
實(shí)用新型內(nèi)容本實(shí)用新型的目的在于解決現(xiàn)有解碼芯片設(shè)計(jì)方案上的不足之處,提供一種結(jié)構(gòu) 清晰,運(yùn)行速度塊,既能高速,有效的對JPEG圖像文件進(jìn)行壓縮,同時還能節(jié)省芯片面積的 JPEG圖像解碼器的VLSI系統(tǒng)結(jié)構(gòu)及其實(shí)現(xiàn)方法。為實(shí)現(xiàn)上述目的,本實(shí)用新型采用如下技術(shù)方案一種JPEG圖像解碼器的VLSI系統(tǒng)結(jié)構(gòu),該實(shí)現(xiàn)方法包括以下步驟Stepl 從外部輸入的比特?cái)?shù)據(jù)流,首先進(jìn)入到輸入FIFO中,然后頭碼流解析模塊 對輸入緩沖器的輸出數(shù)據(jù)按照J(rèn)FIF文件格式進(jìn)行解析;St印2 在頭碼流解析完后,進(jìn)入到熵解碼模塊;Step3 在完成熵解碼后,將得到的非零系數(shù)進(jìn)行解量化操作;St印4 在完成解量化后,進(jìn)入到反zigzag變換單元;St印5:在完成反zigzag變換后,將得到的非零系數(shù)和當(dāng)前系數(shù)在模塊里64個參
3數(shù)的位置(COefT_Cnt) —起輸入到IDCT反離散余弦變換模塊,進(jìn)行反離散余弦變換;St印6 經(jīng)過IDCT變換后,得到了原始的經(jīng)過降低分辨率的YCbCr色域的圖像信 息;St印7 經(jīng)過解采樣,得到了每個像素的Y,Cb,Cr分量;在得到了每個像素的Y,Cb, Cr分量后,將每個像素點(diǎn)的Y,Cb, Cr分量的值轉(zhuǎn)換為R,G,B分量的值。在所述stepl中,頭碼流解析模塊采用了雙重存儲器,用來存儲頭碼流中包含的 各種信息;并且采用一個碼流標(biāo)志位0或者1跟隨處理中的碼流,通過判斷當(dāng)前處理碼流的 標(biāo)志位,用來決定采用雙重存儲器中的其中一組數(shù)據(jù)進(jìn)行解碼。雙重存儲器應(yīng)用于huffman解碼系數(shù)存儲器和量化系數(shù)存儲器;在解析頭碼流過 程中采用最高地址位的0-1變換實(shí)現(xiàn)分離存儲兩組來自兩幅圖像的huffman解碼系數(shù)和來 自兩幅圖像的量化系數(shù),并在解碼使用過程中采用碼流標(biāo)志位的方式,實(shí)現(xiàn)正確系數(shù)的讀 取。在所述stepl中,在熵解碼中的對于huffman解碼采用96bits緩沖移位寄存器, 并根據(jù)解碼數(shù)據(jù)長度分別將碼字長度16bits的rd_word,碼字長度Sbits的rd_byte,碼字 長度小于Sbits的rd_bits置高電平,反饋到96bits緩沖移位寄存器,使其讀入新的等長 有效數(shù)據(jù)。在所述Step5中,在IDCT反離散余弦變換模塊的輸入端,伴隨待解碼的非零數(shù)據(jù) 輸出Sbit計(jì)數(shù)器,用來表示當(dāng)前非零系數(shù)在整個待解碼模塊64輸入系數(shù)中的位置。在所述的St印7中,轉(zhuǎn)換公式為R = Y+1. 402 · (Cr-128)G = Y-0. 34414 · (Cb_128)-0. 71414 · (Cr-128)B = Y+1. 772 · (Cb-128)其中R,G,B分別代表了像素點(diǎn)的紅色,綠色和藍(lán)色分量; Y,Cb,Cr分別代表了像素點(diǎn)的亮色分量和兩個色度分量;為了使RGB得到的數(shù)據(jù)為正數(shù),在 等式右邊的色度分量都減去了 128。一種JPEG圖像解碼器的VLSI系統(tǒng)結(jié)構(gòu),采用了流水線的設(shè)計(jì)方式,包括頭碼流 解析模塊,解量化模塊,熵解碼模塊,反zigzag變換模塊,IDCT反離散余弦變換模塊,解采 樣模塊,色域轉(zhuǎn)換模塊。從外部輸入的比特?cái)?shù)據(jù)流,首先經(jīng)由輸入FIFO緩沖后進(jìn)入頭碼流 解析模塊;在頭碼流解析完成后,隨后輸入FIFO的輸出數(shù)據(jù)流進(jìn)入熵解碼模塊(在該模塊 執(zhí)行過程中調(diào)用了頭碼流解析模塊產(chǎn)生的HT系數(shù));熵解碼后的數(shù)據(jù)進(jìn)入到解量化模塊 (在該模塊執(zhí)行過程中調(diào)用了頭碼流解析模塊產(chǎn)生的QT系數(shù));解量化后的數(shù)據(jù)流進(jìn)入反 zigzag變換模塊,進(jìn)行反zigzag變換;在完成反zigzag變換后進(jìn)入IDCT反離散余弦變換 模塊;經(jīng)過IDCT反離散余弦變換后,得到Y(jié)CbCr色域的圖像信息;圖像信息進(jìn)入解采樣模 塊后進(jìn)行解采樣(在該模塊執(zhí)行過程中調(diào)用了頭碼流解析模塊產(chǎn)生的采樣方式);解采樣 后的信息進(jìn)入色域轉(zhuǎn)換模塊,進(jìn)行色域轉(zhuǎn)后;進(jìn)入顯示模塊(在該模塊執(zhí)行過程中調(diào)用了 頭碼流解析模塊產(chǎn)生的圖像的寬度和高度信息)。在任意的兩個相連的模塊之間引入了前端數(shù)據(jù)有效標(biāo)志和后端模塊空閑標(biāo)志,在 同步時鐘控制下,只有兩者都為有效時,才會在兩個模塊間進(jìn)行數(shù)據(jù)傳輸。本實(shí)用新型的有益效果是在設(shè)計(jì)中,采用流水線設(shè)計(jì),配合頭碼流的雙重存儲器 設(shè)計(jì),無論是一副圖像里面的數(shù)據(jù),還是兩幅圖像的數(shù)據(jù),都可以近似實(shí)現(xiàn)數(shù)據(jù)不停滯的處理。另外,由于IDCT模塊的輸入系統(tǒng)中,相當(dāng)多的一部分系數(shù)為零,因此在除去多余的零系 數(shù)后,大大加快了數(shù)據(jù)的處理速度。通過上面的設(shè)計(jì),在不通過增加并行模塊的同時,提升 了解碼速率,使其效果近似等同于采用并行模塊時,從而減少了芯片面積,大大降低了芯片 成本。
圖1為系統(tǒng)整體設(shè)計(jì)圖;圖2為頭碼流解析單元狀態(tài)轉(zhuǎn)移圖;圖3為JFIF格式中各種段的標(biāo)識符;圖4為反zigzag變換排序圖;圖5為反zigzag變換系數(shù)順序計(jì)數(shù)變換圖;圖6為二維IDCT模塊系統(tǒng)結(jié)構(gòu)圖;圖7為一維IDCT模塊中的乘加運(yùn)算結(jié)構(gòu)電路圖;圖8為JPEG采樣方式示意圖;其中,圖1中,1輸入FIFO模塊,2頭碼流解析模塊,3熵解碼模塊,4解量化模塊,5 反zigzag變換模塊,6IDCT反離散余弦變換模塊,7解采樣模塊,8色域轉(zhuǎn)換模塊,9顯示模 塊。
具體實(shí)施方式
以下結(jié)合附圖與實(shí)施例對本實(shí)用新型做進(jìn)一步說明。首先結(jié)合圖1對本實(shí)施例的整體過程進(jìn)行簡單描述。圖1中,HT代表了 huffman 表,QT代表了量化表。最開始從外部輸入的為8比特的數(shù)據(jù)流,首先進(jìn)入到輸入FIFO模塊 1中,然后頭碼流解析模塊2對輸入FIFO模塊1的輸出數(shù)據(jù)按照J(rèn)FIF文件格式進(jìn)行解析。 在此過程中,采用的狀態(tài)機(jī)轉(zhuǎn)移圖如圖2所示。采用JFIF格式的JPEG文件的頭碼流是分為 一個一個的段來存儲的(但并不是全部都是段),每個段的開頭有兩個字節(jié)長的標(biāo)識符。每 個標(biāo)識符的第一個字節(jié)都是十六進(jìn)制OxFF。第二個字節(jié)根據(jù)當(dāng)前段內(nèi)數(shù)據(jù)的不同,各自對 應(yīng)著各自的值。首先,狀態(tài)機(jī)處于開始狀態(tài),檢測輸入的字節(jié)是否為OxFF。如果不是的話, 保持開始狀態(tài)等待下一字節(jié)的到來,如果是OxFF的話,狀態(tài)轉(zhuǎn)移到讀取標(biāo)識符的后一個字 節(jié)。根據(jù)此字節(jié)值的不同,跳轉(zhuǎn)到不同的狀態(tài)。并在每個段讀取完畢后,回到開始狀態(tài),等 待下一個段的到來。一直在讀取到SOS段時,此時解析出SOS段的信息后才真正進(jìn)入到代 表圖像數(shù)據(jù)的碼流。并將狀態(tài)機(jī)置于空閑狀態(tài)。在eob信號(一副圖像解碼結(jié)束標(biāo)志位) 置高后,回到開始狀態(tài),等待下一幅新的圖像的到來。圖3給出了不同標(biāo)識碼代表的不同段 的含義。另外為了實(shí)現(xiàn)對兩幅前后不同圖像的同時處理,頭碼流解析出的信息都采用了雙 重存儲器進(jìn)行存儲。即在存儲器地址的最高位再添加1比特。利用這1比特置為0或者1 來分別存儲從兩幅圖像解析出的不同的圖像信息。在碼流解碼的過程中,隨之在流水線中 一起運(yùn)動的還包括一比特的圖片標(biāo)志位。利用該標(biāo)志位,可以在解碼過程中正確選擇使用 來自兩幅不同圖像的量化表(QT)或者哈夫曼表(HT)等其他信息。JPEG圖像數(shù)據(jù)經(jīng)由輸入FIFO模塊1緩沖后輸入到熵解碼模塊3。JPEG標(biāo)準(zhǔn)中熵解
5碼包括了 huffman解碼與游程解碼和變長解碼。首先,根據(jù)頭碼流解析DHT段得到的1_16 長度的碼字的個數(shù),構(gòu)造出1-16長度的最小碼流,其構(gòu)造原理主要依據(jù)范式huffman編碼 的幾個特性(1)長度為N的第一個碼字f (N)能從長度為N-I的最后一個碼字,即f (N)= 2 (f (N-I) +1),其中,f (N-I)為N-I長度的最后一個碼字。(2)相同長度的碼字必須是連續(xù)整數(shù)的二進(jìn)制描述。即如果f (N)為長度為N的 第一個碼字,則其他長度為N的碼字則為f (N)+l,f(N)+2, f(N)+3等等。(3)碼字長度最小的第一個編碼從零開始。依據(jù)上面所述的三個特性,以碼字長度最小的第一個編碼為零(假設(shè)此時長度為 i),然后,按照第(2)條特性,設(shè)定16比特計(jì)數(shù)器cntl,在零的基礎(chǔ)上依次加1。待長度為 i的編碼全部產(chǎn)生后,將計(jì)數(shù)器加1,并左移一位,即得到了(i+1)長度的最小碼流。依次類 推,從而建立起各種長度的碼流與碼字一一對應(yīng)的huffman碼字表。等待96bits的緩沖移 位寄存器內(nèi)部數(shù)據(jù)有效后,按照從高字節(jié)到低字節(jié)的順序通過比較器按照碼字長度從小到 大的順序依次與最小碼流進(jìn)行比較,當(dāng)M比特長的碼流大于M比特長的最小碼流,但M+1比 特長的碼流小于M+1長度的最小碼流時,確定當(dāng)前碼流長度為M(此時通過比較器的異或結(jié) 果實(shí)現(xiàn))。根據(jù)M的大小,控制rd_word, rd_byte,rd_bits的值,并反饋到96bits長的緩 沖移位寄存器的控制部分,使其讀入新的M長度比特?cái)?shù)據(jù)。在確定當(dāng)前碼流長度為M后,將 M比特的當(dāng)前碼流與M比特的最小碼字相減,得到的數(shù)據(jù)為地址偏移量addr_0Ver。將地址 偏移量addr_0Ver加上M比特最小碼流addr_M的地址后,得到新的地址。按照新地址讀 取存儲huffman碼字表的存儲器單元(SRAM),就會得到解碼后的Sbit碼字。根據(jù)得到的 碼字,高4比特可以確定當(dāng)前系數(shù)前端零的個數(shù),低4比特表示后端代表當(dāng)前系數(shù)的碼流長 度。將得到高4比特?cái)?shù)據(jù)+1,并通過計(jì)數(shù)器COeff_Cnt2累計(jì)疊加,這樣,該計(jì)數(shù)器數(shù)值的 大小(0-63),代表了解碼后得到的系數(shù)在當(dāng)前8*8解碼模塊中的位置。將計(jì)數(shù)器的數(shù)值伴 隨通過低4比特解碼后得到的參數(shù)一起輸出后,可以將一個模塊64個系數(shù)中的非零系數(shù)去 除。由于此時的系數(shù)為頻域系數(shù),其中包含有大量的零系數(shù),通過此項(xiàng)措施,減少了相當(dāng)一 部分的數(shù)據(jù)傳輸,從而大大提高了解碼速率。在完成熵解碼后,得到的非零系數(shù)進(jìn)入解量化模塊4進(jìn)行解量化操作,此時,每個 非零系數(shù)都伴隨著表示其在模塊中順序的數(shù)值COeff_Cnt2。因此將COeff_Cnt2作為存儲 量化表的存儲器的地址信號,就可輕松的將與非零系數(shù)對應(yīng)的量化系數(shù)讀取出來。輸出到 乘法器的輸出端,將量化系數(shù)與頻域參數(shù)相乘,從而完成解量化的操作。在完成解量化后,進(jìn)入到反zigzag變換模塊5。通過此次變換,將按串行順序排列 的64個頻域系數(shù),按照如圖4中箭頭所示的方式組合成一個8*8的模塊。由于在本設(shè)計(jì)中 并沒有按照順序依次輸出64個頻域系數(shù),而是采用伴隨表示頻域系數(shù)在64在模塊的位置 信息的方式,因此在解量化后得到的數(shù)據(jù)只有非零數(shù)據(jù),所以,在此處,只需按照圖5中的 對應(yīng)方式,將每個非零系數(shù)伴隨的COeff_Cnt2的值按照對應(yīng)關(guān)系變換成COeff_Cnt即可。 對應(yīng)關(guān)系如圖5所示,其中外圍為COeff_Cnt的值,內(nèi)部8*8模塊粗體字為COeff_Cnt2的 值。在完成反zigzag變換后,將得到的非零系數(shù)和COefT_Cnt輸入到IDCT反離散余 弦變換模塊6中,進(jìn)行反離散余弦變換。其模塊系統(tǒng)架構(gòu)如圖6所示。在系統(tǒng)架構(gòu)中,將二維IDCT變換通過進(jìn)行兩次一維IDCT變換來完成。同時在設(shè)計(jì)一維IDCT變換時采用了全 流水線的方式進(jìn)行設(shè)計(jì)。在ID-IDCT模塊中,如果每個時鐘周期輸入一個解碼模塊的頻域 系數(shù),這些系數(shù)被送入到一個8比特寬度,8字節(jié)深度的移位寄存器,這樣每過8個周期后, 移位寄存器都將會輸出頻域系數(shù)矩陣中的一行數(shù)據(jù)。即圖7中的Zin。將移位輸出的一行 數(shù)據(jù),即(Zcik Z7K)輸入到圖7所示的乘加運(yùn)算單元電路數(shù)據(jù)。這樣每個周期后Zout都將 輸出一個運(yùn)算后的數(shù)據(jù),此數(shù)據(jù)即為ID-IDCT后的數(shù)據(jù)。圖7中的1,2,3,4,5,6,7,8代表 了經(jīng)過量化后的8個余弦系數(shù)序列。其數(shù)據(jù)如下, 圖7中的1代表了第一行,2代表了第2行,依次類推,8代表了第8行。將ID-IDCT的數(shù)據(jù)存儲到系數(shù)緩沖轉(zhuǎn)置存儲器。在此存儲器中,通過讀地址的倍 數(shù)跳變,實(shí)現(xiàn)數(shù)據(jù)依次讀出時的轉(zhuǎn)置。將系數(shù)緩沖轉(zhuǎn)置存儲器的輸出數(shù)據(jù)按照第一次的方 式同樣經(jīng)過一個8比特寬度,8字節(jié)深度的移位寄存器后輸入到圖7所示的乘加電路中, 再次進(jìn)行一維IDCT變換,再次得到的Z。ut即為完成2D-IDCT后的輸出數(shù)據(jù),不過在第2次 ID-IDCT過程中圖7中1,2,3,4,5,6,7,8這8個余弦系數(shù)序列有了。如下所示 經(jīng)過IDCT變換后,已經(jīng)得到了原始的經(jīng)過降低分辨率的YCbCr色域的圖像信息。 在JPEG標(biāo)準(zhǔn)中,常用的采樣方式有三種,如圖8所示,其中X號代表了在Y分量的采樣點(diǎn), 而〇代表了 Cb和Cr的采樣點(diǎn)。其中的“4:2:0”方式在采樣過程中是取一個2*2的像素塊 中四個像素的Cb的平均值作為1個Cb的采樣點(diǎn),取一個2*2的像素塊中四個像素的Cr的 平均值作為1個Cr的采樣點(diǎn);“4:2:2”方式在采樣過程中是取一個2*1的像素塊中兩個像 素的Cb的平均值作為1個Cb的采樣點(diǎn),取一個2*1的像素塊中兩個像素的Cr的平均值作 為1個Cr ;“4:4:4”方式則是取每個像素點(diǎn)的Cb和Cr作為當(dāng)前像素點(diǎn)的Cb與Cr。解采 樣的過程對于“4:2:0”方式就是將從IDCT模塊得到的2*2的像素塊中四個像素的Cr和Cb 的平均值作為此像素塊中4個像素本身的Cb和Cr的值,使得每一個像素點(diǎn)都有其完備的 的YCbCr分量;對于“4:2:2”方式就是將從IDCT模塊得到的2*1的像素塊中兩個像素的Cb 和Cr的平均值作為像素塊中2個像素本身的Cb和Cr的值,使得每一個像素點(diǎn)都有其完備 的的YCbCr分量;對于“4:4:4”方式則無需解采樣。經(jīng)過解采樣模塊7后,就得到了每個像素的Y,Cb,Cr分量。在得到了每個像素的Y,Cb, Cr分量后,YCbCr色域的圖像信息進(jìn)入色域轉(zhuǎn)換模塊 8,按照下述公式的轉(zhuǎn)換關(guān)系,就可以將每個像素點(diǎn)的Y,Cb, Cr分量的值轉(zhuǎn)換為R,G,B分量 的值,進(jìn)而進(jìn)入顯示模塊9進(jìn)行顯示。至此,一種JPEG圖像解碼器的VLSI系統(tǒng)的功能已經(jīng) 全部完成。R = Y+1. 402 · (Cr-128)G = Y-0. 34414 · (Cb_128)-0. 71414 · (Cr-128)B = Y+1. 772 · (Cb-128)其中R,G,B分別代表了像素點(diǎn)的紅色,綠色和藍(lán)色分量。Y,Cb, Cr分別代表了像 素點(diǎn)的亮色分量和兩個色度分量(為了使RGB得到的數(shù)據(jù)為正數(shù),在等式右邊的色度分量 都減去了 128)。
權(quán)利要求一種JPEG圖像解碼器的VLSI系統(tǒng)結(jié)構(gòu),包括依次連接的輸入FIFO模塊、熵解碼模塊、解量化模塊、反zigzag變換模塊、IDCT反離散余弦變換模塊、解采樣模塊、色域轉(zhuǎn)換模塊、顯示模塊;輸入FIFO模塊,熵解碼模塊,解量化模塊,解采樣模塊和顯示模塊還分別連接到頭碼流解析模塊。
專利摘要本實(shí)用新型公開了一種JPEG圖像解碼器的VLSI系統(tǒng)結(jié)構(gòu)。它主要包括輸入FIFO模塊、頭碼流解析模塊、熵解碼模塊、解量化模塊、反zigzag變換模塊、反離散余弦變換模塊、解采樣模塊、色域轉(zhuǎn)換模塊和顯示模塊。本實(shí)用新型在整體設(shè)計(jì)上采用了流水線設(shè)計(jì),可同時連續(xù)處理多幅圖像;在熵解碼模塊中的huffman解碼中采用多字節(jié)緩沖,解碼字長反饋的方式,提高了huffman解碼模塊的運(yùn)行速率;在反離散余弦變換模塊加入了待解碼系數(shù)計(jì)數(shù)表示,結(jié)合模塊數(shù)據(jù)結(jié)束標(biāo)志的方法,實(shí)現(xiàn)了只有非零系數(shù)數(shù)據(jù)輸入,使得單個解碼模塊的數(shù)據(jù)輸入的周期大大縮短,有效提高了解碼速率,很好的改善了整體的解碼速度。通過仿真驗(yàn)證,在100MHz時鐘頻率下,本實(shí)用新型可實(shí)現(xiàn)800*600分辨率下,每秒60fps的解碼效果。
文檔編號H04N7/26GK201657223SQ20102013494
公開日2010年11月24日 申請日期2010年3月19日 優(yōu)先權(quán)日2010年3月19日
發(fā)明者楊立政, 王洪君, 趙立歧 申請人:山東大學(xué)