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