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