【摘要】在JPEG2000編碼系統中,EBCOT tire-1的位平面編碼器的復雜編碼運算是整個系統的瓶頸,為了加快位平面編碼器運算的速度,我們提出并行VLSI架構,用來處理編碼器中的并行程序預估和程序編碼。我們以Verilog HDL編寫硬件代碼,并以Altera QuartusⅡ進行模擬硬件仿真。
【關鍵詞】JPEG2000位平面編碼并行FPGA
JPEG2000是由國際標準化組織ISO和國際電信標準化聯盟ITU-T于2001年聯合頒布的新一代圖像壓縮國際標準[1],對于圖像設備的應用,快速、低成本的JPEG2000圖像壓縮電路是決定其應用前景、范圍的關鍵因素。現已有多種JPEG2000圖像壓縮電路設計方案[2~4],它們的主要分歧集中在位平面(bit-plane)編碼器的設計上。其原因在于,位平面編碼時間占全部編碼時間的50%以上[4],是影響JPEG2000編碼速度的最關鍵部分。
本文介紹在FPGA電路平臺上一種高效的位平面、過程并行的位平面編碼器電路設計。首先簡要介紹位平面、過程并行的位平面編碼算法和局部并行電路結構。然后給出具體的電路設計,最后給出實驗結果和總結。
一、位平面、過程并行的位平面編碼器
位平面編碼是將小波系數從幅度的高位平面向低位平面漸進編碼。每個位平面編碼又分為3個編碼過程:重要性傳播過程(significance propagation pass,SP)、幅度細化過程(magnitude refinement pass,MP)和清除過程(cleanup pass,CP)。這3個過程按照SP,MP,CP順序進行,系數的重要性狀態隨著編碼的進行而變化。各編碼過程的具體編碼工作由4個編碼模塊執行,分別是零編碼模塊(zero coding,ZC)、符號編碼模塊(sign coding,SC)、幅度細化模塊(magnitude refinementprimitive,MRC)和行程編碼模塊(run length coding,RLC)。SP過程使用ZC模塊和SC模塊執行編碼;MP過程使用MRC模塊執行編碼;CP過程使用RLC模塊、ZC模塊和SC模塊聯合執行編碼。
在Tsai[5]的編碼結構中,程序編碼電路需等待程序預估電路完成建立預估表后才開始編碼動作,這樣程序編碼電路會有一段時間無動作,因此我們設計了并行編碼結構電路,將程序預估電路和程序編碼電路以并行方式進行各自的動作,可以減少建立預估表所耗的時間,圖1給出了總體結構概念圖。數據存儲器中的小波系數,經過編碼信息產生器和程序預估處理器后送到編碼信息寄存器中,控制器控制移位寄存器將合適的數據送到數據線上,每個位平面的編碼模塊從數據線上讀取輸入信號,輸出相應的上下文和數據對,算術編碼器利用這些上下文和數據對進行后續編碼。
二、并行結構的位平面編碼器的實現
我們所設計的位平面編碼硬件電路結構圖如圖二所示,包含(A)地址產生模塊、(B)存儲器模塊、(C)移位寄存器模塊、(D)更新和預估模塊、(E)編碼信息產生器、(F)編碼信息寄存器模塊、(G)控制電路模塊、(H)程序編碼處理模塊。具體介紹如下:
A、地址產生模塊:包含兩種電路:存儲器地址產生電路、位平面計數器電路,存儲器地址產生電路用于產生讀
寫內部或外部存儲器地址,包含外部存儲器、存儲器、寄存器地址產生器,而位平面計數器電路用于對預測電路和編碼電路所處理的位平面進行計數。
B、存儲器模塊:包含編碼塊、符號、重要狀態、預估和數值增量存儲器。
C、移位寄存器模塊:包含編碼塊、符號、重要狀態、預估和數值增量移位寄存器。
D、更新和預估模塊:包含重要狀態更新模塊、數值增量更新模塊和程序預估模塊,重要狀態更新模塊從編碼塊移位寄存器和重要狀態移位寄存器讀取資料,用來判斷目前行是否有新的重要狀態出現;數值增量更新模塊讀取數值增量移位寄存器和重要狀態更新模塊所送出的sig_update_en信號,來判斷是否要更新數值增量移位寄存器模塊,程序預估模塊讀取重要狀態更新模塊所送出sig_update_en信號和預估移位寄存器中所有寄存器資料,來預估目前行的程序狀態并更新預估移位寄存器。
E、編碼信息產生器模塊:為了讓程序預估電路與程序編碼電路并行動作且互不干擾,因此加入此模塊讀取程序預估移位寄存器和各移位寄存器的資料,來產生目前行的4個預編碼位元的編碼信息。
F、編碼信息寄存器模塊:在編碼信息產生器電路中,一次針對一行產生4組編碼信息,并寫入編碼信息寄存器,且程序電路在一個周期內由編碼信息產生器讀出一行的編碼信息進行編碼。
G、控制電路模塊:包含控制單元和編碼處理器,以有限狀態機設計方式來產生控制信號,控制電路中存儲器讀寫、預估電路和編碼電路的動作,控制單元和編碼處理器功能分述如下:
a、控制單元:電路開始于一個新的編碼塊,需先從外部數據存儲器中載入編碼塊數據到編碼塊數據存儲器和符號存儲器。由控制單元送出控制信號到位置產生器(Address Generator)產生讀取和寫入的位置,完成數據存儲器載入之后,開始電路的編碼動作。從最重要位平面開始,控制單元送出控制信號使能程序預估電路和編碼信息產生電路,并由編碼塊、符號、重要狀態等存儲器讀出行資料,產生程序預估和編碼信息。完成一行之后再繼續處理下一行,并送出控制信號將更新模塊、預估模塊和編碼信息產生器電路產生的數據寫入符號存儲器、預估存儲器、數值增量存儲器和編碼信息寄存器中,直到完成一個位平面的處理。接著判斷目前位平面是否是最不重要位平面,如果是的話,就完成編碼塊的編碼,否則從下一位平面開始編碼。
b、編碼處理器:用來控制程序編碼處理電路和編碼信息寄存器的讀取,當開始一個編碼塊的編碼時,編碼處理器送出控制信號到編碼信息寄存器中,一次讀出4組編碼數據,并先判斷這4組編碼數據的rlc狀態。若rlc狀態皆為“01”,代表這4個編碼位由程序3的Run-Length Coding編碼,便送出pass_select信號為“001”至程序編碼處理電路中,否則代表4個編碼位是由不同程序所編碼,將一次送出一位pass_select信號。而psaa_select信號時每組編碼信息中的程序狀態,當完成一個位平面,接著判斷目前位平面是否為最不重要位平面,如果是,即完成編碼塊的編碼,否則從下一位平面所對應到的寄存器讀取編碼數據,繼續下一個位平面的編碼。
H、程序編碼處理模塊:包含4中編碼電路,分別為零編碼模塊(zero coding,ZC)、符號編碼模塊(sign coding,SC)、幅度細化模塊(magnitude refinementprimitive,MRC)和行程編碼模塊(run length coding,RLC),由編碼處理器從編碼信息寄存器中讀出編碼數據送到各編碼電路中,并由編碼處理器送出的pass_select信號來選擇由哪一編碼電路輸出,如圖3所示。
三、試驗結果及結論
針對本文提出的位平面編碼器結構,我們以Verilog-HDL語言描述硬件電路,并以Altera QuartusⅡ7.0軟件進行硬件仿真及驗證,電路效率如圖4所示。
經過硬件電路的實現和驗證,在并行程序預估部分對于nxn的編碼塊只需n個周期即可完成程序預估,并可減少編碼判斷的周期,且程序編碼在每個周期都會產生Context(CX)和Decision(D),使電路沒有閑置時間,加快編碼速度,與現今已提出的編碼結構相比,可節省3倍編碼時間以達到快速編碼的需求。
參考文獻
[1] JPEG 2000 Part 1 020719 (Final Publication Draft). ISO/IEC JTC1/SC29/WGI N2678, 2002-07
[2] Xu Chao, Han Yanju, Zhang Yizhen. Bit-plane and Pass Dual Parallel Architecture for Coefficient Bit Modeling in JPEG2000. IEEE Int.Conf. on Acoustics, Speech and Signal Processing (ICASSP 2004),Montreal, Canada, 200-05
[3] Andra K, Charkrabarti C, Acharya T. A High-performance JPEG2000 Architechture. IEEE Trans. Circuits Syst. Video Technol., 2003-03:209-218
[4] Lian C J, Chen K F, Chen H H, et al. Analysis and Architecture Design of Block-coding Engine for EBCOT in JPEG2000. IEEE Trans.Circuits Syst. Video Technol., 2003-05: 219-230
[5] T.H.Tsai and L.T.Tsai,“JPEG2000 Encoder Architecture Design with Fast EBCOT algorithm,”IEEE VLSI-TSA International Symposium.pp.279-282,April 2005