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