陳超偉, 梁 煜, 張 為, 包 娜, 劉艷艷
(1. 天津大學(xué) 微電子學(xué)院,天津 300072;2. 南開(kāi)大學(xué) 電子信息與光學(xué)工程學(xué)院,天津 300071)
JPEG2000是一種被廣泛應(yīng)用于各個(gè)領(lǐng)域的新型圖像壓縮標(biāo)準(zhǔn).最優(yōu)化嵌入式編碼(Embedded Block Coding with Optimal Truncation,EBCOT)承擔(dān)了JPEG2000的主要編碼工作,并占據(jù)了整體編碼時(shí)間的80%以上.Tier 1編碼作為EBCOT的主要部分,是優(yōu)化JPEG2000整體編碼性能的關(guān)鍵.Tier 1編碼由2個(gè)編碼器完成: 位平面編碼器(Bit Plane Encoder,BPC)以及MQ編碼器.BPC根據(jù)3種編碼通道產(chǎn)生上下文-判決對(duì)(Contex-Decison pair,CXD),CXD對(duì)進(jìn)入MQ編碼器完成編碼并最終產(chǎn)生壓縮碼流.
當(dāng)前影響Tier 1編碼的主要瓶頸在于MQ編碼器的編碼性能較低.MQ編碼器串行工作的特點(diǎn)以及復(fù)雜的算法給優(yōu)化工作造成了困難,傳統(tǒng)的MQ編碼器單位時(shí)鐘周期內(nèi)只能處理1個(gè)CXD對(duì),且編碼時(shí)間較長(zhǎng).目前MQ編碼器的優(yōu)化思路主要有兩種:設(shè)計(jì)單位時(shí)鐘周期內(nèi)能并行處理多對(duì)CXD對(duì)的編碼器;提高單位時(shí)鐘周期內(nèi)處理單個(gè)CXD對(duì)的速度.根據(jù)第一種思路提出的優(yōu)化結(jié)構(gòu)雖然能實(shí)現(xiàn)多對(duì)并行處理,但是編碼器工作頻率不高,并且犧牲了大量的硬件面積以及存儲(chǔ)資源.此外,部分編碼器在輸入多對(duì)相同CXD對(duì)的情況下,會(huì)出現(xiàn)無(wú)法并行工作的問(wèn)題,導(dǎo)致吞吐率嚴(yán)重下降[1].
針對(duì)第2種優(yōu)化思路,目前也有許多優(yōu)化結(jié)構(gòu)被提出.文獻(xiàn)[2]針對(duì)編碼過(guò)程當(dāng)中較為復(fù)雜的Renormalization操作進(jìn)行優(yōu)化,但其優(yōu)化結(jié)構(gòu)只能在前后輸入的CXD對(duì)不同的情況下發(fā)揮作用.文獻(xiàn)[3]通過(guò)附加電路處理發(fā)生概率極低的編碼操作,減少了關(guān)鍵路徑.但附加電路也占據(jù)了大量電路面積.
文中將根據(jù)第2種優(yōu)化思路來(lái)優(yōu)化MQ編碼器結(jié)構(gòu).此外,文中還將提出一種接口設(shè)計(jì)使得提出的MQ編碼器結(jié)構(gòu)有效地運(yùn)用到Tier1編碼當(dāng)中,實(shí)現(xiàn)Tier 1整體編碼吞吐率最高3倍的提升.
MQ編碼器是一種二進(jìn)制自適應(yīng)算數(shù)編碼器,根據(jù)輸入的CXD對(duì)不斷調(diào)整編碼區(qū)間以實(shí)現(xiàn)編碼操作[4].每一個(gè)CXD對(duì)都與一個(gè)Index值和MPS值相關(guān)聯(lián),兩者都被存放在Index值查找表(Index Look up Table,ILT)當(dāng)中.每個(gè)Index值又指向一個(gè)存儲(chǔ)在概率估計(jì)值表(Probability Estimate Table,PET)里的條目.PET一共有47個(gè)條目,每個(gè)條目包括4個(gè)重要編碼參數(shù): Qe、NMPS、NLPS和SWITCH.
編碼器根據(jù)判決值D與MPS值是否相等,從CODEMPS和CODELPS當(dāng)中選擇一種作為當(dāng)前的編碼模式來(lái)完成編碼工作.每一種編碼模式還包括Renormalization操作以及Byte-out操作.MQ編碼器用寄存器A和寄存器C來(lái)記錄當(dāng)前編碼區(qū)間.前者用來(lái)存放編碼區(qū)間的寬度,后者用來(lái)存放編碼區(qū)間的下邊界值.
寄存器A的值必須保持在0.75≤A≤1.50這一范圍當(dāng)中.寄存器C是一個(gè)28位的整型數(shù).一旦寄存器A的值低于0.75,那么Renormalization操作就會(huì)執(zhí)行,通過(guò)移位加倍使得寄存器A的值回到規(guī)定范圍內(nèi),寄存器C也會(huì)隨之移位.寄存器CT用來(lái)記錄移位次數(shù).
編碼器通過(guò)執(zhí)行Byte-out操作輸出壓縮字節(jié).當(dāng)寄存器CT的值減小到0,則輸出寄存器C當(dāng)中的壓縮字節(jié),一個(gè)CXD對(duì)最多可輸出2個(gè)壓縮字節(jié),即進(jìn)行兩次Byte-out操作.
圖1所示為文中提出的高性能MQ編碼器結(jié)構(gòu).該結(jié)構(gòu)包含兩部分: Index值預(yù)測(cè)模塊以及主體編碼模塊.
圖1 高性能MQ編碼器結(jié)構(gòu)
2.1.1 Index值預(yù)測(cè)模塊
在MQ編碼器編碼過(guò)程中,如果執(zhí)行了Renormalization操作,ILT可能會(huì)發(fā)生更新.因此,為了得到正確的Index值,后一個(gè)輸入CXD對(duì)往往必須等待前者編碼完全結(jié)束,從而大大增加了編碼等待時(shí)間.
文中運(yùn)用Index預(yù)測(cè)模塊來(lái)提前獲得待編碼CXD對(duì)的Index值.一旦預(yù)測(cè)工作結(jié)束,該模塊將生成一個(gè)Start=MQ信號(hào),將Index值傳遞給主體編碼模塊,并通知其可以開(kāi)始后續(xù)編碼,從而無(wú)需等待前一個(gè)CXD對(duì)編碼結(jié)束,縮短了等待時(shí)間,同時(shí)也使得流水線結(jié)構(gòu)得以運(yùn)用到后續(xù)編碼當(dāng)中.此外,由于MPS值與對(duì)應(yīng)Index值的最低位相等,因此,無(wú)需在ILT當(dāng)中進(jìn)行額外存儲(chǔ),從而減小了ILT的存儲(chǔ)需求.Renorm信號(hào)由主體編碼模塊給出,用于標(biāo)記是否執(zhí)行Renormalization操作.
圖2所示為Index值預(yù)測(cè)模塊的電路結(jié)構(gòu).Index 1表示當(dāng)前編碼CXD對(duì)的Index值.Index 2表示為待編碼的CXD對(duì)預(yù)測(cè)的Index值.根據(jù)當(dāng)前編碼CXD對(duì)的判決值D1與對(duì)應(yīng)的MPS值是否相等來(lái)判斷當(dāng)前編碼模式.Index 2有兩個(gè)可能值:從未更新的ILT中獲取的原始值(Index=original);前一個(gè)CXD對(duì)在編碼過(guò)程中產(chǎn)生的更新值(Index=update).預(yù)測(cè)模塊將從中選出一個(gè)作為預(yù)測(cè)Index值,同時(shí)更新ILT.預(yù)測(cè)模塊預(yù)測(cè)工作偽代碼如下所示:
Index 2=((CX1==CX2) && Renorm)? Index=update: Index=original
Index=update=(D1==MPS)? NMPS: NLPS
圖2 Index值預(yù)測(cè)模塊的電路結(jié)構(gòu)
Index值預(yù)測(cè)模塊為待編碼CXD對(duì)提供Index值,預(yù)測(cè)的Index值是從ILT以及PET中選取的,這兩個(gè)查找表都由JPEG2000標(biāo)準(zhǔn)規(guī)定,因此,只要預(yù)測(cè)模塊正常工作,Index值的預(yù)測(cè)就不會(huì)出現(xiàn)錯(cuò)誤.針對(duì)Index預(yù)測(cè)模塊的功能驗(yàn)證,文中將預(yù)測(cè)模塊與主體編碼模塊結(jié)合之后形成完整MQ編碼器進(jìn)行整體功能驗(yàn)證,從而保證驗(yàn)證結(jié)果的準(zhǔn)確性和全面性.詳細(xì)驗(yàn)證方案將在下文介紹.
圖3 主體編碼模塊4級(jí)流水線結(jié)構(gòu)
2.1.2 主體編碼模塊的流水線結(jié)構(gòu)
如圖3所示,主體編碼模塊是一個(gè)4級(jí)流水線結(jié)構(gòu).下面對(duì)各級(jí)流水線的工作進(jìn)行說(shuō)明.
(1) 第1級(jí)流水線.編碼器從PET當(dāng)中獲得Qe等編碼參數(shù).為了減小存儲(chǔ)需求,文中對(duì)Qe的存儲(chǔ)進(jìn)行了優(yōu)化.此外,PET當(dāng)中還存儲(chǔ)了寄存器A在CODELPS編碼模式下發(fā)生重歸一化時(shí)所要移位的次數(shù)LZ.
(2) 第2級(jí)流水線.本級(jí)流水線主要進(jìn)行寄存器A的更新,并產(chǎn)生Renorm信號(hào)將傳遞給Index值預(yù)測(cè)模塊.如果當(dāng)前編碼模式為CODELPS,那么寄存器A的移位可根據(jù)上一級(jí)流水線查表得到的LZ值實(shí)現(xiàn)一次性移位.
(3) 第3級(jí)流水線.為了避免因使用28位加法器導(dǎo)致關(guān)鍵路徑變長(zhǎng),寄存器C的更新被拆分成低16位C16和高12位C12,分兩級(jí)進(jìn)行.其中低16位C16更新在本級(jí)流水線完成.
(4) 第4級(jí)流水線.完成寄存器C高12位C12的更新,并執(zhí)行Byte-out操作.文中對(duì)寄存器C最終更新當(dāng)中所用到的MASK信號(hào)產(chǎn)生電路進(jìn)行了優(yōu)化.
表1 Qe的分類
注:表中a、b、c表示每組當(dāng)中各個(gè)Qe數(shù)值不同的位.
2.1.3 主體編碼模塊的優(yōu)化
(1) Qe存儲(chǔ)的優(yōu)化 . Qe的位寬是15 . 文中將PET當(dāng)中的47個(gè)Qe分成3組,每組當(dāng)中的每個(gè)Qe有8位是相同的.因此, 只需存儲(chǔ)剩余的連續(xù)7位,從而節(jié)省了53%的存儲(chǔ)空間.表1所示即為Qe的分類.
(2) Renorm信號(hào)的產(chǎn)生.Renorm信號(hào)用來(lái)標(biāo)記是否執(zhí)行Renormalization操作.該信號(hào)的產(chǎn)生電路如圖4所示.通過(guò)比較判決值D與MPS值也就是Index值最低位即可判斷當(dāng)前編碼模式.在編碼模式CODELPS中,Renormalization操作一定執(zhí)行.而對(duì)于編碼模式CODEMPS,在A- Qe< 0.75的情況下,Renormalization操作才執(zhí)行.
(3) MASK信號(hào)生成的優(yōu)化.編碼器執(zhí)行Byte-out操作之后,寄存器C的保留位由MASK信號(hào)決定,并得到最終更新值.為了實(shí)現(xiàn)Byte-out操作與寄存器C最終更新的并行完成,文中對(duì)MASK信號(hào)生成電路進(jìn)行優(yōu)化.如圖5所示,MASK值被初始化為0xFFFFFFF,并根據(jù)Byte-out操作輸出的字節(jié)數(shù)以及Flush信號(hào)進(jìn)行移位更新.移位有3種可能: 輸出1個(gè)壓縮字節(jié)時(shí)的移位(shift_1)、輸出2個(gè)壓縮字節(jié)時(shí)的移位(shift_2)以及執(zhí)行Flush操作時(shí)的移位(shift_flush).CT_add1表示第1個(gè)字節(jié)輸出后CT被重置的值,CT_add2表示第2個(gè)字節(jié)輸出后CT被重置的值,兩者都為7或8.LZ表示寄存A的前移0個(gè)數(shù).
針對(duì)BPC輸出的特點(diǎn),文中設(shè)計(jì)了一種高效的接口結(jié)構(gòu).如圖6(a)所示,BPC輸出3種通道類型的數(shù)據(jù),經(jīng)分開(kāi)之后通過(guò)對(duì)應(yīng)先入先出(First In First Out,F(xiàn)IFO)通道傳遞給指定的MQ編碼器,3個(gè)通道的MQ編碼器并行工作.
2.2.1 BPC輸出特點(diǎn)
BPC通過(guò)3種不同的編碼通道產(chǎn)生3種CXD對(duì).3種編碼通道分別為: 重要性通道(Significance Propagation Pass,SP)、幅度細(xì)化通道(Magnitude Refinement Pass,MRP)以及清除通道(Clean up Pass,CP).3種CXD對(duì)有所差異,每個(gè)CXD對(duì)的最高兩位將用來(lái)指示其所屬編碼通道,可用來(lái)作為區(qū)分依據(jù),分開(kāi)后的3種CXD對(duì)分別為bpc_out_sp、bpc_out_mrp以及bpc_out_cp.
圖4 Renorm信號(hào)產(chǎn)生電路圖5 MASK信號(hào)生成電路
圖6 BPC-MQ編碼器連接設(shè)計(jì)
2.2.2 接口設(shè)計(jì)
針對(duì)3種CXD對(duì),接口設(shè)計(jì)包括3套FIFO通道,每套FIFO通道當(dāng)中有多個(gè)fifo單元.fifo的數(shù)目根據(jù)對(duì)應(yīng)編碼通道在單位時(shí)鐘周期內(nèi)所能產(chǎn)生最大CXD對(duì)數(shù)目而定.由于BPC和MQ編碼器存在吞吐率差異,F(xiàn)IFO采用異步讀寫,配備了寫控制模塊和讀控制模塊.
寫控制模塊采用從低到高循環(huán)并行寫入fifo的方式.如圖6(b)所示,設(shè)置一個(gè)寫信號(hào)“write_fifo”,其位寬與fifo數(shù)目相同,每一位表示對(duì)應(yīng)的fifo是否寫入數(shù)據(jù).同時(shí)設(shè)置一個(gè)寫指針“start_point”,用來(lái)指向下一個(gè)將要寫入數(shù)據(jù)的空f(shuō)ifo.進(jìn)入寫控制模塊的所有CXD對(duì)將并行寫入對(duì)應(yīng)空f(shuō)ifo當(dāng)中.讀控制模塊設(shè)置讀指針“read_fifo”,每個(gè)時(shí)鐘周期從所有fifo中取出一個(gè)并輸出,然后在下一個(gè)周期指向下一個(gè)fifo.
文中將提出的高性能MQ編碼器在Xilinx Virtex 5 XC5VLX330 FPGA上進(jìn)行驗(yàn)證.測(cè)試結(jié)果表明,該MQ編碼器能夠取得的最大工作頻率為 181.434 MHz,吞吐率達(dá)到 181.434 Msymbol/sec,所用Slices數(shù)目為210,關(guān)鍵路徑延時(shí)為 2.432 ns.
圖7 改進(jìn)MQ編碼器結(jié)構(gòu)驗(yàn)證方案
MQ編碼器通過(guò)查表的方式完成編碼,一旦出現(xiàn)編碼錯(cuò)誤是難以恢復(fù)的.為了使得改進(jìn)MQ編碼器結(jié)構(gòu)能運(yùn)用到JPEG2000編碼器當(dāng)中,必須保證改進(jìn)結(jié)構(gòu)功能的正確.為了驗(yàn)證預(yù)測(cè)模塊的功能,文中采用了Jasper作為驗(yàn)證標(biāo)準(zhǔn).Jasper是一款JPEG2000編碼器的開(kāi)源軟件,可以作為改進(jìn)結(jié)構(gòu)編碼結(jié)果的參照.文中采用的功能驗(yàn)證方案如圖7所示.測(cè)試圖像首先通過(guò)Jasper完成JPEG2000前期的預(yù)處理、離散小波變換、量化、BPC編碼過(guò)程,最終生成CXD對(duì)數(shù)據(jù)存放于TXT文件當(dāng)中.然后將數(shù)據(jù)文件導(dǎo)入至改進(jìn)MQ編碼器當(dāng)中進(jìn)行編碼,同時(shí)Jasper繼續(xù)進(jìn)行編碼,最終對(duì)比兩者的編碼結(jié)果來(lái)確定改進(jìn)MQ編碼器結(jié)構(gòu)是否能夠正確完成編碼.功能驗(yàn)證結(jié)果表明,改進(jìn)結(jié)構(gòu)能完成編碼,得到正確的壓縮字節(jié).
文中還將所提出的MQ編碼器結(jié)構(gòu)與部分文獻(xiàn)的優(yōu)化結(jié)構(gòu)進(jìn)行性能比較,對(duì)比結(jié)果如表2所示.為了提高對(duì)比的全面性,引入了FoM參數(shù),其計(jì)算公式如式(1)所示,式中的Throughput表示編碼器吞吐率,Slices/LEs表示編碼器所用Slice或者LE的數(shù)目,Memory(bits)表示編碼器所用存儲(chǔ)資源大?。疄榱吮WC結(jié)果的準(zhǔn)確性,比較雙方均使用同樣的FPGA.
(1)
文中將提出的MQ編碼器運(yùn)用到Tier 1編碼當(dāng)中,并在Xilinx Virtex 5 XC5VLX330 FPGA上進(jìn)行驗(yàn)證.通過(guò)多份測(cè)試數(shù)據(jù)統(tǒng)計(jì)表明,大部分位平面均能通過(guò)BPC產(chǎn)生3個(gè)編碼通道的CXD對(duì),因此,3個(gè)MQ編碼器可以并行工作,從而實(shí)現(xiàn)Tier 1編碼吞吐率的3倍提升.但部分位平面會(huì)出現(xiàn)個(gè)別編碼通道不產(chǎn)生CXD對(duì)的情況.此時(shí),無(wú)CXD對(duì)輸入的MQ編碼器沒(méi)有工作,Tier 1整體編碼吞吐率未達(dá)到最理想值.
表2 編碼器性能比較
注:文獻(xiàn)[1-2,5,7,9]未提供所用存儲(chǔ)數(shù)據(jù),無(wú)法計(jì)算FoM,故表中未列出比較;文獻(xiàn)[1]的結(jié)構(gòu)在輸入的兩個(gè)CXD對(duì)相同的情況下,無(wú)法實(shí)現(xiàn)并行編碼,吞吐率下為最高值的一半(155.95).
文中提出了一種運(yùn)用于JPEG2000的高性能MQ編碼器.通過(guò)Index預(yù)測(cè)等優(yōu)化方法,實(shí)現(xiàn)編碼速度提升以及存儲(chǔ)消耗的減少.同時(shí),文中還將提出的MQ編碼器運(yùn)用到Tier 1編碼當(dāng)中,提出一種高效的接口設(shè)計(jì)來(lái)實(shí)現(xiàn)BPC和MQ編碼器的并行工作.在BPC的3種編碼通道均輸出CXD對(duì)的情況下,Tier 1編碼整體吞吐率可以實(shí)現(xiàn)3倍的提升.
[1] CAO H, ZHANG Y F, JIANG H X. A High-throughput MQ Coder Architecture Based on Dependence Extraction Method[C]//Proceedings of the 2014 IEEE International Conference on Image Processing. Piscataway: IEEE, 2015: 1203-1207.
[2] LIU W S, ZHU E, LIN Y, et al. Design of JPEG2000 Arithmetic Coder Using Optimized Renormalization Procedure[C]//Proceedings of the 2011 International Conference on Multimedia and Signal Processing. Piscataway: IEEE, 2011: 41-45.
[3] RHU M, PARK I C. A Novel Trace-pipelined Binary Arithmetic Coder Architecture for JPEG2000[C]//Proceedings of the 2009 IEEE Workshop on Signal Processing Systems. Piscataway: IEEE, 2009: 243-248.
[4] 曹斌, 李云松, 劉凱, 等. JPEG2000中MQ編碼器的VLSI結(jié)構(gòu)[J]. 西安電子科技大學(xué)學(xué)報(bào), 2004, 31(5): 714-718.
CAO Bin, LI Yunsong, LIU Kai, et al. Parallel Architecture in VLSI Implementation of the MQ-coder for JPEG2000[J]. Journal of Xidian University, 2004, 31(5): 714-718.
[5] KUMAR N R, XIANG W, WANG Y. Two-symbol FPGA Architecture for Fast Arithmetic Encoding in JPEG 2000[J]. Journal of Signal Processing Systems, 2012, 69(2): 213-224.
[6] LIU K, ZHOU Y, SONG LI Y, et al. A High Performance MQ Encoder Architecture in JPEG2000[J]. Integration, the VLSI Journal, 2010, 43(3): 305-317.
[7] RAMULU G, CHANDRA S S, KUMAR A T R, et al. VLSI Architecture for MQ Coder in JPEG2000[C]//Proceedings of the 2012 Asia Pacific Conference on Postgraduate Research in Microelectronics and Electronics. Piscataway: IEEE, 2012: 106-110.
[8] SARAWADEKAR K, BANERJEE S. Area Efficient, High Speed EBCOT Architecture for Digital Cinema[J]. Isrn Signal Processing, 2012, 2012: 714176.
[9] EL-SHARKASY W M, RAGAB M E. Hardware Modelling of JPEG2000 MQ-encoder[C]//Proceedings of the 2012 4th International Conference on Intelligent and Advanced Systems: A Conference of World Engineering, Science and Technology Congress. Piscataway: IEEE, 2012: 707-712.
[10] DI Z, HAO Y, SHI J, et al. A High-throughput VLSI Architecture Design of Arithmetic Encoder in JPEG2000[J]. Journal of Signal Processing Systems, 2014, 81(2): 227-247.