陳超偉, 梁 煜, 張 為, 包 娜, 劉艷艷
(1. 天津大學(xué) 微電子學(xué)院,天津 300072;2. 南開大學(xué) 電子信息與光學(xué)工程學(xué)院,天津 300071)
JPEG2000是一種被廣泛應(yīng)用于各個領(lǐng)域的新型圖像壓縮標(biāo)準(zhǔn).最優(yōu)化嵌入式編碼(Embedded Block Coding with Optimal Truncation,EBCOT)承擔(dān)了JPEG2000的主要編碼工作,并占據(jù)了整體編碼時間的80%以上.Tier 1編碼作為EBCOT的主要部分,是優(yōu)化JPEG2000整體編碼性能的關(guān)鍵.Tier 1編碼由2個編碼器完成: 位平面編碼器(Bit Plane Encoder,BPC)以及MQ編碼器.BPC根據(jù)3種編碼通道產(chǎn)生上下文-判決對(Contex-Decison pair,CXD),CXD對進(jìn)入MQ編碼器完成編碼并最終產(chǎn)生壓縮碼流.
當(dāng)前影響Tier 1編碼的主要瓶頸在于MQ編碼器的編碼性能較低.MQ編碼器串行工作的特點(diǎn)以及復(fù)雜的算法給優(yōu)化工作造成了困難,傳統(tǒng)的MQ編碼器單位時鐘周期內(nèi)只能處理1個CXD對,且編碼時間較長.目前MQ編碼器的優(yōu)化思路主要有兩種:設(shè)計單位時鐘周期內(nèi)能并行處理多對CXD對的編碼器;提高單位時鐘周期內(nèi)處理單個CXD對的速度.根據(jù)第一種思路提出的優(yōu)化結(jié)構(gòu)雖然能實(shí)現(xiàn)多對并行處理,但是編碼器工作頻率不高,并且犧牲了大量的硬件面積以及存儲資源.此外,部分編碼器在輸入多對相同CXD對的情況下,會出現(xiàn)無法并行工作的問題,導(dǎo)致吞吐率嚴(yán)重下降[1].
針對第2種優(yōu)化思路,目前也有許多優(yōu)化結(jié)構(gòu)被提出.文獻(xiàn)[2]針對編碼過程當(dāng)中較為復(fù)雜的Renormalization操作進(jìn)行優(yōu)化,但其優(yōu)化結(jié)構(gòu)只能在前后輸入的CXD對不同的情況下發(fā)揮作用.文獻(xiàn)[3]通過附加電路處理發(fā)生概率極低的編碼操作,減少了關(guān)鍵路徑.但附加電路也占據(jù)了大量電路面積.
文中將根據(jù)第2種優(yōu)化思路來優(yōu)化MQ編碼器結(jié)構(gòu).此外,文中還將提出一種接口設(shè)計使得提出的MQ編碼器結(jié)構(gòu)有效地運(yùn)用到Tier1編碼當(dāng)中,實(shí)現(xiàn)Tier 1整體編碼吞吐率最高3倍的提升.
MQ編碼器是一種二進(jìn)制自適應(yīng)算數(shù)編碼器,根據(jù)輸入的CXD對不斷調(diào)整編碼區(qū)間以實(shí)現(xiàn)編碼操作[4].每一個CXD對都與一個Index值和MPS值相關(guān)聯(lián),兩者都被存放在Index值查找表(Index Look up Table,ILT)當(dāng)中.每個Index值又指向一個存儲在概率估計值表(Probability Estimate Table,PET)里的條目.PET一共有47個條目,每個條目包括4個重要編碼參數(shù): Qe、NMPS、NLPS和SWITCH.
編碼器根據(jù)判決值D與MPS值是否相等,從CODEMPS和CODELPS當(dāng)中選擇一種作為當(dāng)前的編碼模式來完成編碼工作.每一種編碼模式還包括Renormalization操作以及Byte-out操作.MQ編碼器用寄存器A和寄存器C來記錄當(dāng)前編碼區(qū)間.前者用來存放編碼區(qū)間的寬度,后者用來存放編碼區(qū)間的下邊界值.
寄存器A的值必須保持在0.75≤A≤1.50這一范圍當(dāng)中.寄存器C是一個28位的整型數(shù).一旦寄存器A的值低于0.75,那么Renormalization操作就會執(zhí)行,通過移位加倍使得寄存器A的值回到規(guī)定范圍內(nèi),寄存器C也會隨之移位.寄存器CT用來記錄移位次數(shù).
編碼器通過執(zhí)行Byte-out操作輸出壓縮字節(jié).當(dāng)寄存器CT的值減小到0,則輸出寄存器C當(dāng)中的壓縮字節(jié),一個CXD對最多可輸出2個壓縮字節(jié),即進(jìn)行兩次Byte-out操作.
圖1所示為文中提出的高性能MQ編碼器結(jié)構(gòu).該結(jié)構(gòu)包含兩部分: Index值預(yù)測模塊以及主體編碼模塊.
圖1 高性能MQ編碼器結(jié)構(gòu)
2.1.1 Index值預(yù)測模塊
在MQ編碼器編碼過程中,如果執(zhí)行了Renormalization操作,ILT可能會發(fā)生更新.因此,為了得到正確的Index值,后一個輸入CXD對往往必須等待前者編碼完全結(jié)束,從而大大增加了編碼等待時間.
文中運(yùn)用Index預(yù)測模塊來提前獲得待編碼CXD對的Index值.一旦預(yù)測工作結(jié)束,該模塊將生成一個Start=MQ信號,將Index值傳遞給主體編碼模塊,并通知其可以開始后續(xù)編碼,從而無需等待前一個CXD對編碼結(jié)束,縮短了等待時間,同時也使得流水線結(jié)構(gòu)得以運(yùn)用到后續(xù)編碼當(dāng)中.此外,由于MPS值與對應(yīng)Index值的最低位相等,因此,無需在ILT當(dāng)中進(jìn)行額外存儲,從而減小了ILT的存儲需求.Renorm信號由主體編碼模塊給出,用于標(biāo)記是否執(zhí)行Renormalization操作.
圖2所示為Index值預(yù)測模塊的電路結(jié)構(gòu).Index 1表示當(dāng)前編碼CXD對的Index值.Index 2表示為待編碼的CXD對預(yù)測的Index值.根據(jù)當(dāng)前編碼CXD對的判決值D1與對應(yīng)的MPS值是否相等來判斷當(dāng)前編碼模式.Index 2有兩個可能值:從未更新的ILT中獲取的原始值(Index=original);前一個CXD對在編碼過程中產(chǎn)生的更新值(Index=update).預(yù)測模塊將從中選出一個作為預(yù)測Index值,同時更新ILT.預(yù)測模塊預(yù)測工作偽代碼如下所示:
Index 2=((CX1==CX2) && Renorm)? Index=update: Index=original
Index=update=(D1==MPS)? NMPS: NLPS
圖2 Index值預(yù)測模塊的電路結(jié)構(gòu)
Index值預(yù)測模塊為待編碼CXD對提供Index值,預(yù)測的Index值是從ILT以及PET中選取的,這兩個查找表都由JPEG2000標(biāo)準(zhǔn)規(guī)定,因此,只要預(yù)測模塊正常工作,Index值的預(yù)測就不會出現(xiàn)錯誤.針對Index預(yù)測模塊的功能驗(yàn)證,文中將預(yù)測模塊與主體編碼模塊結(jié)合之后形成完整MQ編碼器進(jìn)行整體功能驗(yàn)證,從而保證驗(yàn)證結(jié)果的準(zhǔn)確性和全面性.詳細(xì)驗(yàn)證方案將在下文介紹.
圖3 主體編碼模塊4級流水線結(jié)構(gòu)
2.1.2 主體編碼模塊的流水線結(jié)構(gòu)
如圖3所示,主體編碼模塊是一個4級流水線結(jié)構(gòu).下面對各級流水線的工作進(jìn)行說明.
(1) 第1級流水線.編碼器從PET當(dāng)中獲得Qe等編碼參數(shù).為了減小存儲需求,文中對Qe的存儲進(jìn)行了優(yōu)化.此外,PET當(dāng)中還存儲了寄存器A在CODELPS編碼模式下發(fā)生重歸一化時所要移位的次數(shù)LZ.
(2) 第2級流水線.本級流水線主要進(jìn)行寄存器A的更新,并產(chǎn)生Renorm信號將傳遞給Index值預(yù)測模塊.如果當(dāng)前編碼模式為CODELPS,那么寄存器A的移位可根據(jù)上一級流水線查表得到的LZ值實(shí)現(xiàn)一次性移位.
(3) 第3級流水線.為了避免因使用28位加法器導(dǎo)致關(guān)鍵路徑變長,寄存器C的更新被拆分成低16位C16和高12位C12,分兩級進(jìn)行.其中低16位C16更新在本級流水線完成.
(4) 第4級流水線.完成寄存器C高12位C12的更新,并執(zhí)行Byte-out操作.文中對寄存器C最終更新當(dāng)中所用到的MASK信號產(chǎn)生電路進(jìn)行了優(yōu)化.
表1 Qe的分類
注:表中a、b、c表示每組當(dāng)中各個Qe數(shù)值不同的位.
2.1.3 主體編碼模塊的優(yōu)化
(1) Qe存儲的優(yōu)化 . Qe的位寬是15 . 文中將PET當(dāng)中的47個Qe分成3組,每組當(dāng)中的每個Qe有8位是相同的.因此, 只需存儲剩余的連續(xù)7位,從而節(jié)省了53%的存儲空間.表1所示即為Qe的分類.
(2) Renorm信號的產(chǎn)生.Renorm信號用來標(biāo)記是否執(zhí)行Renormalization操作.該信號的產(chǎn)生電路如圖4所示.通過比較判決值D與MPS值也就是Index值最低位即可判斷當(dāng)前編碼模式.在編碼模式CODELPS中,Renormalization操作一定執(zhí)行.而對于編碼模式CODEMPS,在A- Qe< 0.75的情況下,Renormalization操作才執(zhí)行.
(3) MASK信號生成的優(yōu)化.編碼器執(zhí)行Byte-out操作之后,寄存器C的保留位由MASK信號決定,并得到最終更新值.為了實(shí)現(xiàn)Byte-out操作與寄存器C最終更新的并行完成,文中對MASK信號生成電路進(jìn)行優(yōu)化.如圖5所示,MASK值被初始化為0xFFFFFFF,并根據(jù)Byte-out操作輸出的字節(jié)數(shù)以及Flush信號進(jìn)行移位更新.移位有3種可能: 輸出1個壓縮字節(jié)時的移位(shift_1)、輸出2個壓縮字節(jié)時的移位(shift_2)以及執(zhí)行Flush操作時的移位(shift_flush).CT_add1表示第1個字節(jié)輸出后CT被重置的值,CT_add2表示第2個字節(jié)輸出后CT被重置的值,兩者都為7或8.LZ表示寄存A的前移0個數(shù).
針對BPC輸出的特點(diǎn),文中設(shè)計了一種高效的接口結(jié)構(gòu).如圖6(a)所示,BPC輸出3種通道類型的數(shù)據(jù),經(jīng)分開之后通過對應(yīng)先入先出(First In First Out,F(xiàn)IFO)通道傳遞給指定的MQ編碼器,3個通道的MQ編碼器并行工作.
2.2.1 BPC輸出特點(diǎn)
BPC通過3種不同的編碼通道產(chǎn)生3種CXD對.3種編碼通道分別為: 重要性通道(Significance Propagation Pass,SP)、幅度細(xì)化通道(Magnitude Refinement Pass,MRP)以及清除通道(Clean up Pass,CP).3種CXD對有所差異,每個CXD對的最高兩位將用來指示其所屬編碼通道,可用來作為區(qū)分依據(jù),分開后的3種CXD對分別為bpc_out_sp、bpc_out_mrp以及bpc_out_cp.
圖4 Renorm信號產(chǎn)生電路圖5 MASK信號生成電路
圖6 BPC-MQ編碼器連接設(shè)計
2.2.2 接口設(shè)計
針對3種CXD對,接口設(shè)計包括3套FIFO通道,每套FIFO通道當(dāng)中有多個fifo單元.fifo的數(shù)目根據(jù)對應(yīng)編碼通道在單位時鐘周期內(nèi)所能產(chǎn)生最大CXD對數(shù)目而定.由于BPC和MQ編碼器存在吞吐率差異,F(xiàn)IFO采用異步讀寫,配備了寫控制模塊和讀控制模塊.
寫控制模塊采用從低到高循環(huán)并行寫入fifo的方式.如圖6(b)所示,設(shè)置一個寫信號“write_fifo”,其位寬與fifo數(shù)目相同,每一位表示對應(yīng)的fifo是否寫入數(shù)據(jù).同時設(shè)置一個寫指針“start_point”,用來指向下一個將要寫入數(shù)據(jù)的空fifo.進(jìn)入寫控制模塊的所有CXD對將并行寫入對應(yīng)空fifo當(dāng)中.讀控制模塊設(shè)置讀指針“read_fifo”,每個時鐘周期從所有fifo中取出一個并輸出,然后在下一個周期指向下一個fifo.
文中將提出的高性能MQ編碼器在Xilinx Virtex 5 XC5VLX330 FPGA上進(jìn)行驗(yàn)證.測試結(jié)果表明,該MQ編碼器能夠取得的最大工作頻率為 181.434 MHz,吞吐率達(dá)到 181.434 Msymbol/sec,所用Slices數(shù)目為210,關(guān)鍵路徑延時為 2.432 ns.
圖7 改進(jìn)MQ編碼器結(jié)構(gòu)驗(yàn)證方案
MQ編碼器通過查表的方式完成編碼,一旦出現(xiàn)編碼錯誤是難以恢復(fù)的.為了使得改進(jìn)MQ編碼器結(jié)構(gòu)能運(yùn)用到JPEG2000編碼器當(dāng)中,必須保證改進(jìn)結(jié)構(gòu)功能的正確.為了驗(yàn)證預(yù)測模塊的功能,文中采用了Jasper作為驗(yàn)證標(biāo)準(zhǔn).Jasper是一款JPEG2000編碼器的開源軟件,可以作為改進(jìn)結(jié)構(gòu)編碼結(jié)果的參照.文中采用的功能驗(yàn)證方案如圖7所示.測試圖像首先通過Jasper完成JPEG2000前期的預(yù)處理、離散小波變換、量化、BPC編碼過程,最終生成CXD對數(shù)據(jù)存放于TXT文件當(dāng)中.然后將數(shù)據(jù)文件導(dǎo)入至改進(jìn)MQ編碼器當(dāng)中進(jìn)行編碼,同時Jasper繼續(xù)進(jìn)行編碼,最終對比兩者的編碼結(jié)果來確定改進(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)行性能比較,對比結(jié)果如表2所示.為了提高對比的全面性,引入了FoM參數(shù),其計算公式如式(1)所示,式中的Throughput表示編碼器吞吐率,Slices/LEs表示編碼器所用Slice或者LE的數(shù)目,Memory(bits)表示編碼器所用存儲資源大小.為了保證結(jié)果的準(zhǔn)確性,比較雙方均使用同樣的FPGA.
(1)
文中將提出的MQ編碼器運(yùn)用到Tier 1編碼當(dāng)中,并在Xilinx Virtex 5 XC5VLX330 FPGA上進(jìn)行驗(yàn)證.通過多份測試數(shù)據(jù)統(tǒng)計表明,大部分位平面均能通過BPC產(chǎn)生3個編碼通道的CXD對,因此,3個MQ編碼器可以并行工作,從而實(shí)現(xiàn)Tier 1編碼吞吐率的3倍提升.但部分位平面會出現(xiàn)個別編碼通道不產(chǎn)生CXD對的情況.此時,無CXD對輸入的MQ編碼器沒有工作,Tier 1整體編碼吞吐率未達(dá)到最理想值.
表2 編碼器性能比較
注:文獻(xiàn)[1-2,5,7,9]未提供所用存儲數(shù)據(jù),無法計算FoM,故表中未列出比較;文獻(xiàn)[1]的結(jié)構(gòu)在輸入的兩個CXD對相同的情況下,無法實(shí)現(xiàn)并行編碼,吞吐率下為最高值的一半(155.95).
文中提出了一種運(yùn)用于JPEG2000的高性能MQ編碼器.通過Index預(yù)測等優(yōu)化方法,實(shí)現(xiàn)編碼速度提升以及存儲消耗的減少.同時,文中還將提出的MQ編碼器運(yùn)用到Tier 1編碼當(dāng)中,提出一種高效的接口設(shè)計來實(shí)現(xiàn)BPC和MQ編碼器的并行工作.在BPC的3種編碼通道均輸出CXD對的情況下,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é)報, 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.