APP下载

应用于JPEG2000的高性能MQ编码器VLSI设计

2018-06-14陈超伟刘艳艳

西安电子科技大学学报 2018年3期
关键词:寄存器字节编码器

陈超伟, 梁 煜, 张 为, 包 娜, 刘艳艳

(1. 天津大学 微电子学院,天津 300072;2. 南开大学 电子信息与光学工程学院,天津 300071)

JPEG2000是一种被广泛应用于各个领域的新型图像压缩标准.最优化嵌入式编码(Embedded Block Coding with Optimal Truncation,EBCOT)承担了JPEG2000的主要编码工作,并占据了整体编码时间的80%以上.Tier 1编码作为EBCOT的主要部分,是优化JPEG2000整体编码性能的关键.Tier 1编码由2个编码器完成: 位平面编码器(Bit Plane Encoder,BPC)以及MQ编码器.BPC根据3种编码通道产生上下文-判决对(Contex-Decison pair,CXD),CXD对进入MQ编码器完成编码并最终产生压缩码流.

当前影响Tier 1编码的主要瓶颈在于MQ编码器的编码性能较低.MQ编码器串行工作的特点以及复杂的算法给优化工作造成了困难,传统的MQ编码器单位时钟周期内只能处理1个CXD对,且编码时间较长.目前MQ编码器的优化思路主要有两种:设计单位时钟周期内能并行处理多对CXD对的编码器;提高单位时钟周期内处理单个CXD对的速度.根据第一种思路提出的优化结构虽然能实现多对并行处理,但是编码器工作频率不高,并且牺牲了大量的硬件面积以及存储资源.此外,部分编码器在输入多对相同CXD对的情况下,会出现无法并行工作的问题,导致吞吐率严重下降[1].

针对第2种优化思路,目前也有许多优化结构被提出.文献[2]针对编码过程当中较为复杂的Renormalization操作进行优化,但其优化结构只能在前后输入的CXD对不同的情况下发挥作用.文献[3]通过附加电路处理发生概率极低的编码操作,减少了关键路径.但附加电路也占据了大量电路面积.

文中将根据第2种优化思路来优化MQ编码器结构.此外,文中还将提出一种接口设计使得提出的MQ编码器结构有效地运用到Tier1编码当中,实现Tier 1整体编码吞吐率最高3倍的提升.

1 MQ编码器工作原理

MQ编码器是一种二进制自适应算数编码器,根据输入的CXD对不断调整编码区间以实现编码操作[4].每一个CXD对都与一个Index值和MPS值相关联,两者都被存放在Index值查找表(Index Look up Table,ILT)当中.每个Index值又指向一个存储在概率估计值表(Probability Estimate Table,PET)里的条目.PET一共有47个条目,每个条目包括4个重要编码参数: Qe、NMPS、NLPS和SWITCH.

编码器根据判决值D与MPS值是否相等,从CODEMPS和CODELPS当中选择一种作为当前的编码模式来完成编码工作.每一种编码模式还包括Renormalization操作以及Byte-out操作.MQ编码器用寄存器A和寄存器C来记录当前编码区间.前者用来存放编码区间的宽度,后者用来存放编码区间的下边界值.

寄存器A的值必须保持在0.75≤A≤1.50这一范围当中.寄存器C是一个28位的整型数.一旦寄存器A的值低于0.75,那么Renormalization操作就会执行,通过移位加倍使得寄存器A的值回到规定范围内,寄存器C也会随之移位.寄存器CT用来记录移位次数.

编码器通过执行Byte-out操作输出压缩字节.当寄存器CT的值减小到0,则输出寄存器C当中的压缩字节,一个CXD对最多可输出2个压缩字节,即进行两次Byte-out操作.

2 高性能MQ编码器结构

2.1 MQ编码器

图1所示为文中提出的高性能MQ编码器结构.该结构包含两部分: Index值预测模块以及主体编码模块.

图1 高性能MQ编码器结构

2.1.1 Index值预测模块

在MQ编码器编码过程中,如果执行了Renormalization操作,ILT可能会发生更新.因此,为了得到正确的Index值,后一个输入CXD对往往必须等待前者编码完全结束,从而大大增加了编码等待时间.

文中运用Index预测模块来提前获得待编码CXD对的Index值.一旦预测工作结束,该模块将生成一个Start=MQ信号,将Index值传递给主体编码模块,并通知其可以开始后续编码,从而无需等待前一个CXD对编码结束,缩短了等待时间,同时也使得流水线结构得以运用到后续编码当中.此外,由于MPS值与对应Index值的最低位相等,因此,无需在ILT当中进行额外存储,从而减小了ILT的存储需求.Renorm信号由主体编码模块给出,用于标记是否执行Renormalization操作.

图2所示为Index值预测模块的电路结构.Index 1表示当前编码CXD对的Index值.Index 2表示为待编码的CXD对预测的Index值.根据当前编码CXD对的判决值D1与对应的MPS值是否相等来判断当前编码模式.Index 2有两个可能值:从未更新的ILT中获取的原始值(Index=original);前一个CXD对在编码过程中产生的更新值(Index=update).预测模块将从中选出一个作为预测Index值,同时更新ILT.预测模块预测工作伪代码如下所示:

Index 2=((CX1==CX2) && Renorm)? Index=update: Index=original

Index=update=(D1==MPS)? NMPS: NLPS

图2 Index值预测模块的电路结构

Index值预测模块为待编码CXD对提供Index值,预测的Index值是从ILT以及PET中选取的,这两个查找表都由JPEG2000标准规定,因此,只要预测模块正常工作,Index值的预测就不会出现错误.针对Index预测模块的功能验证,文中将预测模块与主体编码模块结合之后形成完整MQ编码器进行整体功能验证,从而保证验证结果的准确性和全面性.详细验证方案将在下文介绍.

图3 主体编码模块4级流水线结构

2.1.2 主体编码模块的流水线结构

如图3所示,主体编码模块是一个4级流水线结构.下面对各级流水线的工作进行说明.

(1) 第1级流水线.编码器从PET当中获得Qe等编码参数.为了减小存储需求,文中对Qe的存储进行了优化.此外,PET当中还存储了寄存器A在CODELPS编码模式下发生重归一化时所要移位的次数LZ.

(2) 第2级流水线.本级流水线主要进行寄存器A的更新,并产生Renorm信号将传递给Index值预测模块.如果当前编码模式为CODELPS,那么寄存器A的移位可根据上一级流水线查表得到的LZ值实现一次性移位.

(3) 第3级流水线.为了避免因使用28位加法器导致关键路径变长,寄存器C的更新被拆分成低16位C16和高12位C12,分两级进行.其中低16位C16更新在本级流水线完成.

(4) 第4级流水线.完成寄存器C高12位C12的更新,并执行Byte-out操作.文中对寄存器C最终更新当中所用到的MASK信号产生电路进行了优化.

表1 Qe的分类

注:表中a、b、c表示每组当中各个Qe数值不同的位.

2.1.3 主体编码模块的优化

(1) Qe存储的优化 . Qe的位宽是15 . 文中将PET当中的47个Qe分成3组,每组当中的每个Qe有8位是相同的.因此, 只需存储剩余的连续7位,从而节省了53%的存储空间.表1所示即为Qe的分类.

(2) Renorm信号的产生.Renorm信号用来标记是否执行Renormalization操作.该信号的产生电路如图4所示.通过比较判决值D与MPS值也就是Index值最低位即可判断当前编码模式.在编码模式CODELPS中,Renormalization操作一定执行.而对于编码模式CODEMPS,在A- Qe< 0.75的情况下,Renormalization操作才执行.

(3) MASK信号生成的优化.编码器执行Byte-out操作之后,寄存器C的保留位由MASK信号决定,并得到最终更新值.为了实现Byte-out操作与寄存器C最终更新的并行完成,文中对MASK信号生成电路进行优化.如图5所示,MASK值被初始化为0xFFFFFFF,并根据Byte-out操作输出的字节数以及Flush信号进行移位更新.移位有3种可能: 输出1个压缩字节时的移位(shift_1)、输出2个压缩字节时的移位(shift_2)以及执行Flush操作时的移位(shift_flush).CT_add1表示第1个字节输出后CT被重置的值,CT_add2表示第2个字节输出后CT被重置的值,两者都为7或8.LZ表示寄存A的前移0个数.

2.2 BPC与MQ编码器的接口设计

针对BPC输出的特点,文中设计了一种高效的接口结构.如图6(a)所示,BPC输出3种通道类型的数据,经分开之后通过对应先入先出(First In First Out,FIFO)通道传递给指定的MQ编码器,3个通道的MQ编码器并行工作.

2.2.1 BPC输出特点

BPC通过3种不同的编码通道产生3种CXD对.3种编码通道分别为: 重要性通道(Significance Propagation Pass,SP)、幅度细化通道(Magnitude Refinement Pass,MRP)以及清除通道(Clean up Pass,CP).3种CXD对有所差异,每个CXD对的最高两位将用来指示其所属编码通道,可用来作为区分依据,分开后的3种CXD对分别为bpc_out_sp、bpc_out_mrp以及bpc_out_cp.

图4 Renorm信号产生电路图5 MASK信号生成电路

图6 BPC-MQ编码器连接设计

2.2.2 接口设计

针对3种CXD对,接口设计包括3套FIFO通道,每套FIFO通道当中有多个fifo单元.fifo的数目根据对应编码通道在单位时钟周期内所能产生最大CXD对数目而定.由于BPC和MQ编码器存在吞吐率差异,FIFO采用异步读写,配备了写控制模块和读控制模块.

写控制模块采用从低到高循环并行写入fifo的方式.如图6(b)所示,设置一个写信号“write_fifo”,其位宽与fifo数目相同,每一位表示对应的fifo是否写入数据.同时设置一个写指针“start_point”,用来指向下一个将要写入数据的空fifo.进入写控制模块的所有CXD对将并行写入对应空fifo当中.读控制模块设置读指针“read_fifo”,每个时钟周期从所有fifo中取出一个并输出,然后在下一个周期指向下一个fifo.

3 结果与讨论

3.1 MQ编码器

文中将提出的高性能MQ编码器在Xilinx Virtex 5 XC5VLX330 FPGA上进行验证.测试结果表明,该MQ编码器能够取得的最大工作频率为 181.434 MHz,吞吐率达到 181.434 Msymbol/sec,所用Slices数目为210,关键路径延时为 2.432 ns.

图7 改进MQ编码器结构验证方案

MQ编码器通过查表的方式完成编码,一旦出现编码错误是难以恢复的.为了使得改进MQ编码器结构能运用到JPEG2000编码器当中,必须保证改进结构功能的正确.为了验证预测模块的功能,文中采用了Jasper作为验证标准.Jasper是一款JPEG2000编码器的开源软件,可以作为改进结构编码结果的参照.文中采用的功能验证方案如图7所示.测试图像首先通过Jasper完成JPEG2000前期的预处理、离散小波变换、量化、BPC编码过程,最终生成CXD对数据存放于TXT文件当中.然后将数据文件导入至改进MQ编码器当中进行编码,同时Jasper继续进行编码,最终对比两者的编码结果来确定改进MQ编码器结构是否能够正确完成编码.功能验证结果表明,改进结构能完成编码,得到正确的压缩字节.

文中还将所提出的MQ编码器结构与部分文献的优化结构进行性能比较,对比结果如表2所示.为了提高对比的全面性,引入了FoM参数,其计算公式如式(1)所示,式中的Throughput表示编码器吞吐率,Slices/LEs表示编码器所用Slice或者LE的数目,Memory(bits)表示编码器所用存储资源大小.为了保证结果的准确性,比较双方均使用同样的FPGA.

(1)

3.2 Tier 1编码

文中将提出的MQ编码器运用到Tier 1编码当中,并在Xilinx Virtex 5 XC5VLX330 FPGA上进行验证.通过多份测试数据统计表明,大部分位平面均能通过BPC产生3个编码通道的CXD对,因此,3个MQ编码器可以并行工作,从而实现Tier 1编码吞吐率的3倍提升.但部分位平面会出现个别编码通道不产生CXD对的情况.此时,无CXD对输入的MQ编码器没有工作,Tier 1整体编码吞吐率未达到最理想值.

表2 编码器性能比较

注:文献[1-2,5,7,9]未提供所用存储数据,无法计算FoM,故表中未列出比较;文献[1]的结构在输入的两个CXD对相同的情况下,无法实现并行编码,吞吐率下为最高值的一半(155.95).

4 结 束 语

文中提出了一种运用于JPEG2000的高性能MQ编码器.通过Index预测等优化方法,实现编码速度提升以及存储消耗的减少.同时,文中还将提出的MQ编码器运用到Tier 1编码当中,提出一种高效的接口设计来实现BPC和MQ编码器的并行工作.在BPC的3种编码通道均输出CXD对的情况下,Tier 1编码整体吞吐率可以实现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结构[J]. 西安电子科技大学学报, 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.

猜你喜欢

寄存器字节编码器
融合CNN和Transformer编码器的变声语音鉴别与还原
STM32和51单片机寄存器映射原理异同分析
No.8 字节跳动将推出独立出口电商APP
Lite寄存器模型的设计与实现
No.10 “字节跳动手机”要来了?
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
移位寄存器及算术运算应用
基于双增量码道的绝对式编码器设计
基于数字信号处理的脉冲编码器
光电编码器故障诊断技术研究现状与展望