JPEG 2000標準中MQ編碼器的VLSI結構設計
2 MQ編碼器的優(yōu)化
MQ編碼器采用串行執(zhí)行方式,且編碼算法復雜、耗時,從而導致編碼器執(zhí)行速度慢,效率低下。為了提高MQ編碼器的運行速度,利用FPGA的大容量和并發(fā)執(zhí)行等特性,對MQ編碼器進行設計,在不改變原算法理論的條件下,對整個流程進行改進和優(yōu)化。
只有當前一輸入的結果被輸出后才能讀人下一輸入的串行執(zhí)行方式,極大地限制了編碼速度的提高。為解決這個問題,將整個編碼流程分成三個大的模塊(如圖3所示)串接起來,采用流水線的方式進行工作。
其中,GLGJ模塊為概率估計模塊,其功能是根據上下文索引CX選擇,判決D編碼所必需的概率估值和相關數值,在各個上下文自適應更新數值; PJENCODER模塊為判決編碼模塊,其功能主要是進行MPS編碼或LPS編碼、重新歸一化等主要數據處理進程;ENCODER模塊為編碼輸出模塊,主要完成壓縮數據的輸出及編碼終結等功能;由這三個模塊組成三級流水線。
2.1 判決編碼的化簡
判決編碼中先判斷D的取值是“0”還是“1”,如果D=0,就進行0的編碼;如果D=1,那就進行1的編碼。在“0”或“1”的編碼中,又要根據MPS (CX)的取值,判斷是進行MPS編碼,還是進行LPS編碼;在MPS和LPS編碼中,先更新區(qū)間寬度A的值,即A=A-Qe[I(CX)],再判斷A是大于還是小于Qe[I(CX)],由此與其他的一些條件決定最后的賦值方式。
上述過程包括ENCODE,CCOE0/CODE1,CO-DELPS/CODEMPS五個子流程,6個條件判斷,多次賦值,降低了編碼速度。對編碼的判決條件進行整理,減少不必要的賦值,其Verilog代碼如下:
由此可有效地減少不必要的寄存器和位數賦值,加快模塊的工作效率,從而提高整個系統(tǒng)的工作頻率。
2.2 重新歸一化的加速
MQ編碼器一方面在編碼MPS時,給代碼C加上Qe值,將概率區(qū)間A減為A-Qe;另一方面,在編碼LPS時,代碼C不變,將概率區(qū)間A置換成Qe。如果將這樣的區(qū)間劃分運算進行下去,在某一時間點上,概率區(qū)間A就會比必要精度范圍(O.75≤A1.5)小,這時就要通過重新歸一化A與C維持精度范圍。
重新歸一化過程是根據條件(A0.75):當條件成立時,將區(qū)間寄存器A和代碼寄存器C再左移1次,使其大小加倍,直到概率區(qū)間A的大小超過0. 75。由此可見,如果A的值很小,則左移操作將會反復進行,大大降低了編碼速率。同時因編碼中有MPS編碼和LPS編碼兩種,根據D的不同以及編碼方式的不同,重新歸一化時移位的次數也不同。
因此為了提高速度,并充分利用硬件的優(yōu)勢,將Qe的移位次數作為寄存器數,加入到概率估計表中(表1所示)。無論輸入數據D為何值,編碼的判決都是以 LPS或MPS為標準,所以當判決為LPS編碼時,LZE-ROS中的數據就決定了左移位的次數;當判決為MPS編碼時,MZEROS中的數據就決定了左移位的次數。通過編程將擴展后的概率估計表,以寄存器的方式固化在芯片內部,雖然這樣增加了硬件電路中寄存器的數量,但可以通過一次性的直接查表得到判決編碼和重歸一化所需的數據,提高了查找效率。由于每次編碼都要用到該表,訪問效率很高,這樣大大加快了編碼的速率,同時便于流水線結構的實現。
2.3 編碼輸出模塊的改進
標準MQ編碼器中當輸出計數器CT=0時,MQ編碼器輸出1個字節(jié)。標準中字節(jié)輸出流程是串行執(zhí)行的,造成效率低下。又由于重新歸一化過程采用了一次性的移位方式,最大的移位次數可達15次,且過程中伴隨著字節(jié)輸出。有三種可能情況:不需要進行字節(jié)輸出,需要進行1個字節(jié)或2個字節(jié)的字節(jié)輸出。因此需要對字節(jié)輸出機制作改進。這里將減法記數器CT改為5位的加法記數器,并使用一個16位的數據緩存器。根據CT的取值,判別輸出的是0字節(jié)還是1字節(jié)或者2字節(jié),由此達到加速字節(jié)輸出的目的。
評論