自适应算术编码的FPGA实现
并行编码后产生的码流存储在并行数据中,但在大多的情况下只有两、三个输出,甚至没有输出,若采用并行输出,就会产生极大的浪费。为了充分利用资源,在并行编码之后进行并/串转换,使其一位一位地输出,并且这个输出过程与下一个符号编码的过程并行完成,因此并不占用多余的时钟周期。
在编码过程中,当一个符号编码结束后,触发reload信号,通知此次编码结束,进行下一次编码,读取输入的符号。同时需判断输入是否合法,如果是合法的输入,就进行编码;否则停止编码,否则停止编码,处于等待状态,直到复位信号ret置1,重新初始化、编码。
图3
4 仿真结果
本文算法采用VHDL硬件描述语言实现,并在ALTERA公司的MAX+plusⅡ软件上编译仿真。市府采用全局同步时钟,避免了毛剌的产生,保证了信号的稳定性。编码的仿真结果如图书3所示。
其中,rst、clk、c为输入信号,rst为模块中各寄存器的初始化信号,clk为时钟同步信号,而c则为输入的编码信号;out_flag、out_bit、reload、end_code、为输出信号,out_flag和out_bit分别为输出标志位和输出位(若out_falg=1,则此时out_bit为有效输出;否则out_bit输出无效),reload为一个符号编码结束)下一个符号输入的标志位,end_code为编码结束的标志(若end_code=0,则继续编码,否则编码结束)。
在进行性能仿真时[4],采用的器件是FLEX1K系列的EP1K30TC144-1器件,其最大工作频率为40MHz,消耗1533个LC,平均编码时间为20个时钟周期。一个符号的编码时间不到500ns,对于QCIF格式的图像完全可以满足每秒钟实时编码30帧图像的要求。
自适应算术编码是一种效率很高的无失真编码,本文通过VHDL语言实现了自适应的算术编码,在编码过程中,根据硬件结构的特点,充分利用其并行特性。通过并行执行,实现了速度的优化。由于满足每秒钟编码30帧图像的要求,因此可以应用于视频图像的实时编码中。