東南大學微電子學院 龐子安
針對JPEG2000位平面編碼器傳統(tǒng)的串行掃描方式計算時間長、存儲消耗大的問題,筆者提出了位平面編碼器的并行優(yōu)化,分析了位平面編碼各編碼通道前后顯著性狀態(tài)的改變,設計了流水線結(jié)構的通道判決電路,減少了顯著性狀態(tài)中間存儲的需求,提升了位平面編碼的速度。實驗結(jié)果表明,并行優(yōu)化的位平面編碼器在性能和資源使用上達到了較好的水平。
JPEG2000壓縮標準是當前最新的靜態(tài)圖像壓縮標準,該算法首先通過離散小波變換對原始圖像進行多分辨率分析,之后對小波系數(shù)進行量化后以碼塊(通常大小為32×32或64×64)為單位輸入核心編碼模塊EBCOT(優(yōu)化截取內(nèi)嵌碼塊編碼),EBCOT中傳統(tǒng)串行位平面編碼器的編碼速率低下,文獻基于行列跳過對串行編碼進行了優(yōu)化,但其受到原始數(shù)據(jù)影響,性能不穩(wěn)定。本文將利用FPGA并行優(yōu)勢對位平面編碼器進行改進,以減少資源的消耗,提高運算的速率。
位平面編碼器的輸入是以碼塊(大小通常為32×32或64×64)為單位的小波量化系數(shù),輸出是上下文標簽CX和碼值D。傳統(tǒng)串行位平面編碼流程如圖1所示,從最高的非全零位平面(MSB)開始,編碼至最低位平面(LSB),在同一個位平面中,按照顯著性傳播通道(SPP)、幅值細化編碼通道(MRP)、清除通道(CLP)的順序進行編碼,特別的,對于最高非全零位平面,所有的比特均屬于清除通道,其余位平面中的比特只能屬于其中的一個通道,通道的判決與樣本顯著性狀態(tài)息息相關,若當前編碼比特所在樣本之前的位平面存在比特‘1’,則編碼比特的顯著性為‘1’。
圖1 串行位平面編碼流程
比特所屬通道的判決規(guī)則如下:
(1)若當前比特所在樣本顯著性為‘0’,且周圍8個樣本至少有一個樣本的顯著性為‘1’,則該比特屬于顯著性傳播通道。
(2)若當前比特所在樣本的顯著性為‘1’,則該比特屬于幅值細化編碼通道。
(3)不屬于以上兩種情況的比特,屬于清除通道。
設碼塊大小為N×N,通道內(nèi)的編碼以一列四個比特為條帶,條帶內(nèi)從上到下進行掃描,條帶之間以從左到右、從上到下的順序進行掃描,若掃描過程中遇到不屬于當前編碼通道的比特,則丟棄編碼結(jié)果。
分析串行位平面編碼的過程,會在很多時鐘周期中產(chǎn)生無效的編碼結(jié)果;同時,計算出的顯著性狀態(tài),需要保存下來在下一個編碼通道掃描時使用,消耗了較多的存儲資源。由此,需要充分利用已經(jīng)計算出來的顯著性狀態(tài),以求盡早完成當前編碼列各編碼通道編碼,從而減少存儲資源的需求和計算時間,解決這一問題的關鍵在于分析給定位平面下各個編碼通道掃描時,當前編碼比特的鄰域顯著性狀態(tài)以及掃描過程后當前編碼比特顯著性狀態(tài)的改變。
根據(jù)前面所述的串行編碼流程,除去最高非全零位平面的比特全部屬于清除通道編碼外,其余位平面的編碼順序為顯著性傳播通道、幅值細化編碼通道、清除通道。鄰域各樣本定義如圖2所示,其中B1為當前編碼比特。
圖2 鄰域顯著性狀態(tài)
B1進行顯著性傳播通道掃描時,由于輸入的順序,A0、A1、A2、B0已經(jīng)通過顯著性狀態(tài)掃描,定義四者當前時刻的顯著性狀態(tài)分別為A0_spp、A1_spp、A2_spp、B0_spp。B2、C0、C1、C2未通過顯著性狀態(tài)掃描,定義四者當前時刻的顯著性狀態(tài)為B2_org、C0_org、C1_org、C2_org,定義B1初始顯著性狀態(tài)為B1_org。
則B1屬于顯著性傳播通道的條件B1_SPP_VLD可以表示為式(1):
其中,當前位平面比特顯著性初始值B1_org、B2_org、C0_org、C1_org、C2_org為比特所在樣本之前位平面是否已經(jīng)有‘1’的比特被編碼,由此我們可以根據(jù)當前編碼平面索引和樣本中的最高非零比特平面索引比較得出。
B1在顯著性掃描過程之后顯著性狀態(tài)改變,只有一種情況,即B1屬于顯著性傳播通道,且它的值為‘1’,我們令更新后的顯著性狀態(tài)為B1_spp,則可以用式(2)來表示顯著性狀態(tài)的改變:
顯著性傳播通道掃描之后是幅值細化編碼通道的掃描,屬于幅值細化編碼通道條件為當前比特所在樣本此前位平面已經(jīng)有比特‘1’被編碼,可以根據(jù)當前編碼平面索引和樣本中的最高非零比特平面索引比較得出;同時,由于此判決特性,顯著性傳播通道不會對樣本的顯著性狀態(tài)做出改變。
最后是清除通道的掃描,當前位平面所有不屬于顯著性傳播通道和幅值細化編碼通道的比特均屬于清除通道,由于前面已經(jīng)得B1_SPP_VLD和B1_MRP_VLD,將兩者相或可以得出!B1_CLP_VLD,顯著性狀態(tài)的變化分析方法和顯著性傳播通道相同,不再贅述具體細節(jié)。
本節(jié)進行了各通道的編碼過程分析,為下面并行位平面編碼器的設計打好了基礎。
(1)通道判決電路
如圖3所示,通道判決電路采用流水線結(jié)構進行設計,A列為未SPP編碼列,B列為當前SPP編碼列,C列為當前MRP編碼列,D列為當前CLP編碼列,E列為完成CLP編碼列。
圖3 通道判決電路的電路結(jié)構
電路的工作過程如下所述,第一個時鐘周期,一列四個比特信息首先輸入A列寄存器,A寄存器大小為4bit,格式定義為{sign,mag,α,γ},其中mag為當前比特值,α為當前比特初始顯著性狀態(tài),由預處理器通過比較當前位平面索引和樣本最高非零比特平面索引獲得,sign為當前比特所在樣本的幅值位,γ為首次MRP判據(jù),此兩者需要提供給編碼原語電路,與通道判決無關,在此不做展開。
第二個時鐘周期,B寄存器的格式與A寄存器相同,A列的輸出作為B列的輸入,同時下一條帶的四個樣本以上述同樣的方式輸入A列。
第三個時鐘周期,B列的樣本需要進行SPP更新,更新的結(jié)果將寫入C列,C列寄存器的格式如下{sign,mag,α,γ,α_spp},其中α_spp為SPP更新后的顯著性狀態(tài),同時根據(jù)上節(jié)邏輯給出四個比特的SPP_VLD,存入寄存器SPP_VLD_REG[3:0]中。
第四個時鐘周期,C列的樣本需要進行MRP更新,顯著性狀態(tài)不會發(fā)生改變,該周期需要根據(jù)原始的顯著性狀態(tài)給出四個比特的MRP_VLD,存入MRP_VLD_REG[3:0]中。由于下一個周期判斷CLP_VLD需要用到之前的SPP_VLD信息,將SPP_VLD_REG延遲一個周期得到SPP_VLD_REG_DELAY_1。
第五個時鐘周期,D列的樣本需要進行CLP更新,更新的結(jié)果將寫入E列,E列寄存器的格式如下{sign,mag,α,γ,α_spp,α_clp},其中α_clp為CLP更新后的顯著性狀態(tài),將SPP_VLD_REG_DELAY_1和MRP_VLD_REG[3:0]按位與并取反獲得CLP_VLD,將結(jié)果輸入CLP_VLD_REG[3:0]中,同時將SPP_VLD_REG_DELAY1和MRP_VLD_REG分別延遲一個周期得到SPP_VLD_REG_DELAY2和MRP_VLD_REG_DELAY1。
第六個時鐘周期,此時SPP_VLD_REG_DELAY2、MRP_VLD_REG_DELAY1、CLP_VLD _REG作為四個編碼比特的通道判決輸出,此后的每一個時鐘周期,均會按條帶順順序輸出四個樣本的通道判決。
(2)電路整體結(jié)構
本文所設計的并行優(yōu)化的位平面編碼器電路結(jié)構如圖4所示,電路主要由讀地址控制器、比特平面計數(shù)器、狀態(tài)預處理器、通道判決電路、原語編碼電路和輸出級電路構成。
圖4 并行位平面編碼器電路結(jié)構
電路上電時,位平面編碼器處于空閑狀態(tài),等待小波量化系數(shù)輸出完成后,小波變換核bpc_start端口將輸出一個高電平脈沖,之后位平面編碼器電路進入工作狀態(tài),讀控制器開始輸出地址信號,按照順序從小波量化系數(shù)存儲器中讀取量化系數(shù),并將讀出的量化系數(shù)轉(zhuǎn)發(fā)至state_generate狀態(tài)預處理器中,狀態(tài)經(jīng)過預處理后送入通道判決電路,通道判決電路經(jīng)過流水線時延后每一個周期輸出一列四個比特的通道判決,以及對應的編碼原語,送入相應的編碼器之中,編碼器的輸出連同通道索引傳至輸出級電路,輸出級電路根據(jù)各編碼比特的通道判決決定各編碼模塊輸出結(jié)果的有效性,并通過內(nèi)部的排序電路將有效編碼輸出排至索引從0開始的連續(xù)端口上,同時輸出有效數(shù)目。
使用Matlab進行仿真,測試數(shù)據(jù)為32×32×8bit大小的碼塊,對編碼所需時鐘周期進行了仿真,串行方式下需要22528個時鐘周期;本文所設計的位平面編碼器僅需8564個時鐘周期,存儲資源使用量由1024bytes降至19bytes。