AVS熵编码的FPGA实现

上传人:飞*** 文档编号:39952908 上传时间:2018-05-21 格式:DOC 页数:9 大小:39.50KB
返回 下载 相关 举报
AVS熵编码的FPGA实现_第1页
第1页 / 共9页
AVS熵编码的FPGA实现_第2页
第2页 / 共9页
AVS熵编码的FPGA实现_第3页
第3页 / 共9页
AVS熵编码的FPGA实现_第4页
第4页 / 共9页
AVS熵编码的FPGA实现_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《AVS熵编码的FPGA实现》由会员分享,可在线阅读,更多相关《AVS熵编码的FPGA实现(9页珍藏版)》请在金锄头文库上搜索。

1、 AVSAVS 熵编码的熵编码的 FPGAFPGA 实现实现摘 要:本文从数字音视频编解码技术标准(avs,audio video coding standard)的熵编码原理出发,对算法模块进行分析,提出了一种使用较少存储空间来存储码表的方法,并结合算法特点给出了现场可编程门阵列(fpga,fieldprogrammable gate array)的实现方法。本设计中将码表查询、切换和指数哥伦布编码合并为一个流水线单元并行处理,节省了大量存储中间结果所需的空间;并将各任务并行执行,加快了处理速度。利用 fpga 开发工具 ise10.1 和仿真工具 modelsim se 6.2b,完成了

2、avs 熵编码的 fpga 设计与实现。关键词:fpga;avs;熵编码;指数哥伦布编码。implementation of avs entropy encoding based on fpgabai yuting, zhang gang(taiyuan university of technology (taiyuan), college of information engineering, taiyuan 030024 china)【abstract】a profound analysis of the entropy encoding algorithm for avs (audio

3、video coding standard) is performed based on the principle of entropy encoding method. this paper presents a method of using less rom to save data in coding table, and gives a realization method based on fpga (field-programmable gate array) according to the algorithm characteristics. coding table qu

4、ery, coding table switch and golomb coding are combined into a pipeline unit, saving a lot of intermediate memories. the parallel execution of entropy encoding task resultes in higher processing speed. using the fpga development tool ise10.1 and modelsim se 6.2b, entropy encoding of avs based on fpg

5、a can be implemented.【key words】fpga; avs; entropy encoding; golomb coding.0 引 言avs 标准是中国数字音视频编解码技术标准工作组制定的具有自主知识产权的视频编码标准,性能高于 mpeg2 标准与 h.264 标准相当1。avs 视频压缩标准采用了一系列高运算量技术来达到高效率的视频编码。其中熵编码模块运算复杂,耗时较大。fpga 平台拥有强大的逻辑资源和寄存器资源,其并行执行的硬件实现方式可以应对设计中大量的高速电子线路设计需求。本文利用 fpga 并行执行特点,合理规划熵编码各模块,完成了 avs 熵编码 fpg

6、a 平台设计与实现。1 avs 熵编码原理avs dct 变换系数经量化后,能量集中在低频直流区域,高频区域数值较小,大部分为 0。为进一步压缩码率 avs 采用 2d_vlc 熵编码2。熵编码之前,要进行 zig-zag 扫描和游程编码。avs 对 level 数组扫描一次,统计非零系数的个数;初始化选择子表 tablenum=0;编码时从最后一个 level 和 run 读入,每次读入一组,最后一组为 eob 标志位。symbol2d 为 run、level 对应输出的二维变长编码值。当 level的绝对值小于 27,并且 run 的绝对值小于 26 时,在当前avs_2dvlc_intr

7、a 的子表内查询相应码字。如果 symbol2d 非负,说明这是正常情况下的编码。如果查得 symbol2d 为负值,或是level 和 run 的绝对值超出码表的范围,按照逃逸事件编码处理。逃逸事件是将 run 和 level 分别进行编码的。如果是对 eob 进行编码,则结束了整个块系数的熵编码。每编码完一个(level,run)序列,根据当前 level 的绝对值来确定下一对序列查表时所用的码表号。2 avs 熵编码器设计熵编码主要分为 zig-zag 扫描、游程编码、码字计算、码表切换、指数哥伦布编码和码流输出共 6 个子模块3。整个熵编码部分需要 3 块 ram,2 块 rom 存储

8、器。ram1 接收量化系数矩阵,经zig-zag 扫描后的(run,level)对存储在 ram2 中,图 1 熵编码流程图fig.1 the flow chart of entropy encoding ram3 暂存指数哥伦布编码后数据;rom1 用于存放优化后的码表,rom2 用于存放逃逸事件中用到的 refabslevel_t。zig-zag 扫描和游程编码不是针对单一的量化系数,是以整个8*8 子块为单位的进行的,只能选择顺序执行。码字计算包括码表查询和 level 是否为负值等相关的判断,码表切换可以与码表查询之后的运算并行执行4;在第二对(run,level)查询二维变长编码值时

9、,同时对第一个码字进行指数哥伦布编码。直至所有(run,level)对完成指数哥伦布编码,码流以字节为单位输出,如图 2 所示。图 2 熵编码的流水线结构fig.2 the pipeline structure of entropy encoding2.1 zig-zag 扫描在进行正确的编码操作前,需要将量化后的数据进行 zigzag 扫描。接收量化系数时进行顺序重排,使数据按照 zigzag 后的顺序依次存放在 ram1(16bit*64)中。8*8 块中的量化系数按照图 3所示存入相应的地址中,仿真过程如图 4 所示。2.2 游程编码游程 run 和幅值 level 按照扫描的先后顺序依

10、次存入数组,作为熵编码的输入数据;使用多个变长码表对这些(run, level)对进行编码。从 ram1 中依次读出扫描后的数据,判断是否为非零系数。若为非零系数,当前值赋给 level,run 保持不变,并成对存储在 ram2 中;否则 level 值保持不变,run 的值加 1。编码一组(run, level)对需要三个周期(rle_cnt) 。图 5 所示为游程编码过程中需要完成的任务和并行实现方式。图 6 为游程编码部分的仿真结果。2.3 码表优化、查询及切换帧内亮度块的熵编码过程,需要调用 7 张变长编码表,每张表需 26*27 字节存储空间,其中有效码字(非负值)仅有 30 个,码

11、表中存在大量的逃逸标志位-1。fpga 高速存储资源有限,为节省存储空间,按照 7 个码表的顺序依次将每个码表中的有效值进行重新排序,存储到 rom15。为减少判断周期数,根据码表分布特点,选择 level 值或 run 值设置偏移量来查询码字的地址,前 4 张表使用 run 值作为偏移量,后三张表使用 level 值作为偏移量。每个码表有 30 个有效码字,码表的首地址只需将码表序号乘以 30 就可以。优化后,存储码字占用的空间仅是原来的 4.3%,同时也方便查找。在 vlc0_intra 中,run=0 和 level=0 没有对应的二维变长编码值,因此 rom1 中地址是否为 0 可以作

12、为区分逃逸事件和非逃逸事件的标志。查表 avs_2dvlc_intra 的子表 tablenum,若利用偏移量没有找到相应码字,将 addra1 置 0,作为逃逸事件编码。逃逸事件是将一对 run 和 level 分别编码。码表切换主要是比较当前level 的绝对值和跳转门限作比较,图 3 量化系数的存放地址 fig.3 the storage address of quantization coefficient图 4 zig-zag 扫描子模块的仿真结果fig.4 the simulation result of zig-zag scan sub-module可以分为五种情况,由 case

13、 语句实现。2.4 指数哥伦布编码哥伦布编码主要是用循环来确定哥伦布的层数和长度,会占用大量的周期数,大大降低了硬件平台上的编码速度。本设计使用case 语句对 symbol2d 进行判断,确定码字结构。由变长编码所固有的伸缩特性,编码输出的码字长度存在不一致性。vhdl 语言中信号的位宽是固定的,于是 code_num 选用最长的位宽,码字长度另选变量 numbits 表示。每完成一次指数哥伦布编码,将 code_ num 和 numbits 存放在ram3 中,直至所有(run,level)对编码结束。若是逃逸事件,有两组值写到 ram3 中,symbol2d 和 escape_level

14、_diff。2.5 码流输出熵编码将各种信息以二进制的形式逐个比特写到码流,最终以字节为单位封装,这样会增加运算的时间,使得编码的效率极低。本文针对 fpga 平台的特点对写码流作了优化,即以一个字节为单位写码流。由于码字长度的不确定性,写入码字的起始位置也是不确定的6。需要根据前一个码字的输出和相应的码长剩余信号对码字进行组合,得到最终的码流。设置一个变量 w 作为码字输出的缓存,t 是 w 中码字的长度。每当 t 大于等于 8 时,输出码流,同时 t 减去 8;否则继续读入下一个已编码的 code_num 和码字长度numbits,将 code_num 的低 numbits 位写到 w 中

15、。这一部分由一个简单的状态机实现,如图 7 所示。最终输出的码流如图 8 所示。3 实验结果及分析本文使用 vhdl 设计并优化实现 avs 熵编码器,并借助 modelsim se 6.2b 对其进行仿真。通过输入不同的量化系数矩阵观察仿真波形,输出的码流信息与 avs 参考软件输出的结果一致。选择器件类型为 virtex2p 时,综合结果如图 9 所示。图 7 码流输出的状态转移图 fig.7 the state transition diagram of bit stream output图 8 码流输出的仿真结果 fig.8 the simulation result of bit s

16、tream output sub-module图 9 仿真综合结果 fig.9 the result of synthesis and simulation4 结 论本文通过对码表存储结构和查询方式的改进,使得有效码字相对集中,提高了查表效率,并且节省了大量的码表存储空间。利用 fpga 的特点,子模块最大程度地并行实现,提高 了编码速度。经仿真验证,本设计正确的且资源利用效率高。时钟最高频率达到 115mhz,可用于高分辨率实时 avs 编码器中。参考文献1 avs 工作组, gb/t20090.2-2006.信息技术先进音视频编码第二部分:视频s. 北京:中国标准化出版社,2006.2 田晓华. avs 视频编码中整数变换与熵编码研究d. 武汉:华中科技大学,2004.3 毕厚杰. 视频压缩编码标准-h.264/avcm. 北京:人民邮电出版社,2005

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号