2.3 使用Nios II的定制指令提高系统性能
使用Nios II的定制指令,可以将一个复杂的标准指令序列简化为一个用硬件实现的单一指令,从而简化系统软件设计并加快系统运行速度。Nios II的定制指令是与CPU的数据通路中的ALu相连的用户逻辑块。其基本操作是,接收从dataa和/或datab端口输入的数据,经过定制指令逻辑的处理,将结果输出到result端口。
JPEG图像解码的核心算法是离散余弦反变换IDCT,二维
DCT/IDCT变换需要经过两次矩阵乘法,8*8的图像子块的
DCT/IDCT需要进行8 192次乘法和3 584次加法。基于Nios II的JPEG图像显示系统采用w Li循环斜卷积算法,在保证不增加加法器个数的同时,大大减少了乘法器数目,改进了传统的
DCT/IDCT硬件实现方法,采用流水线结构,实行并行优化算法,提高了IDCT模块的运算速度,减小了延迟。
定制指令逻辑和Nios II的连接在SoPC Builder中完成。Nios II CPU配置向导提供了一个可添加256条定制指令的图形用户界面,在该界面中导入设计文件,设置定制指令名,并分配定制指令所需的CPU时钟周期数目。系统生成时,Nios II IDE为每条用户指令产生一个在系统头文件中定义的宏,可以在C或C++应用程序代码中直接调用这个宏。
3 系统软件的设计与实现
本系统的JPEG图像处理和解码算法采用c++语言在Nios II IDE中实现 。JPEG图像解码算法的流程如图3所示。
预处理算法需要识别不同的标记码,并提取标记码中的有用信息。JPEG图像文件可分为2个部分:压缩数据和标记码。压缩数据是以MCU(最小编码单元)形式存储的经过压缩编码后的数据。标记码给出了诸如图像长度、宽度、量化表、HuFMan表等重要信息,而这些信息都包含在不同类型的标记码中。对一个MCU进行Hufman解码,需在完成亮度解码后才能进行色度解码。解码后得到6个具有64位元素的一维数组,分别是:4个Y亮度数组、1个cb色度数组、1个cr色度数组(4:1:1模式)。对一个数组来说,Huffman解码包括直流解码和交流解码。对数组第一个元素的解码称为直流解码(简记为DC解码),对剩下的63个元素的解码称为交流解码(简记为AC解码)。JPEG文件中一般包含4个Hufman表,即亮度DG表、AC表,色度DC表、AC表。一个Huffman码包括码头和码值2部分,码头用来惟一的标识该Hufman码,并与Hufman表一一对应,码值是该码的实际大小。
量化运算需要量化表的配合。从JPEG文件中读取的量化表一般有2个,分别用2个64位元素的一维数组来存储,用于对亮度和色度进行反量化。反量化运算就是将上面经Huffman解码得到的数组中的元素与量化表中对应位置元素相乘。为了进行后面的IDCT,还需要将完成反量化运算的数组进行z字型变换,将一维数组变换成8×8的二维数组。
IDCT变换直接利用自定制指令快速完成8×8的二维数组的离散余弦反变换。后续处理的任务之一就是完成颜色空间的转换,即将JPEG图像数据的Y、cb、cr颜色空间转换为RGB颜色空间。但是,为了使计算出的R、G、B的值都是正数,需要对Y、cb、cr分别加128进行修正,同时乘法运算出现了浮点数,故需要对浮点数进行定标处理.
结束语
本文提出了一种基于Nios II嵌入式处理器软核的JPEG图像显示系统的实现方法。使用ALTEra的Cyclone FPGA实现,具有开发周期短、成本低等特点;同时,采用Nios II的定制指令来提高系统性能,利用硬件实现算法速度快的优点,使以Nios II处理器为核心的系统能够快速地完成大量图像数据处理。
|
(
上一页 [1] [2] [3]