采用Nios定制指令的嵌入式系统优化设计
来管理函数和传输数据的。专用MP3解码器ASIC可用于执行密集计算量的解码和传数据给音频器件。本例中,Altera的Nios处理器用于完成处理控制信号,传输数据和进行MP3解码。通常,MP3解码器流程如下:
①通过IDE接口从CF(CompactFlashcontroler)中读取MP3数据;
②将MP3数据存入SPAM中缓存;
③对MP3数据解码;
④将MP3边带合成到脉冲编码调制(PCM)数据;
⑤把PCM数据传给脉宽调制器PWM。
此外,播放器采用MPEGAudioDecoder(MAD)进行MP3解码,是基于以下方面:
①100%定点(整数)计算;
②网上有可利用的源码;
③在GNUCeneralPublicLicense(GPL)下发布。
(2)定制指令
我们知道在执行MP3解码的过程中,大量时间花费在边带的合成上。因此,优化AlteraMP3的重点就落在函数mad_synth_frame上。我们可通过使用定制指令f_mul和DCT32来优化该函数。
F_mul
F_mul和mad_f_mul是MAD使用的宏,用整数乘法来模拟浮点乘法。定义如下:
#definemad_f_mul(x,y)
((((x)+0x00002000L)>>14)×(((y)+0x00002000L))>>14)
#definef_mul(x,y)
(((x)|0x0001FFFFL)((y)|0x0001FFFFL))
这些函数完成的功能是一组易被硬件实现的操作,包括移位、加法、乘法和逻辑或运算。在AlteraMP3的优化设计中,用硬件定制指令f_mul执行原先用软件宏;还可利用前缀选项,把两个宏合为一个单定制指令。以下就是用Altera的定制指令定义(f_mul和mad_f_mul):
#definef_mul(x,y)nm_fmul((x),(y));
#definemad_f_mul(x,y)nm_fmul_pfx(1,(x),(y));
DCT32
在MP3解码中,DCT32完成离散余弦变换。MAD软件用优化过的DVT来增强性能。从软件角度来看,该优化算法比起一般DCT对提高性能具有重大意义。因为标准DCT需要1024个乘法,而用优化后的DCT只需80个乘法。
图4DCT32与mad_synth_frame软件流程
DCT32定制指令所用硬件由Celoxica提供,它是可重配置计算方案提供商,采用了基于HandelC的设计工具。Altera的DCT32定制指令按以下特点设计:
|①可以存储32位输入和32位输出;
②在DCT计算时,能独立于CPU工作;
③用前缀指令接受命令
——装入/卸载
——启动DCT计算
——轮询是否完成。
因为定制指令可以轮询,在DCT输出前其它代码可以并行运行。当需要DCT输出时,定制指令被查询,看是否已完成计算。如果完成,Nios处理器卸载输出数据,同时装入下组输入数据。图4给出了DCT32定制指令及mad_synth_frame的流程图。
(3)优化前后比较
表1给出了三种情况下完成mad_synth_frame函数的比较结果。三种情况分别是只用硬件乘法指令,单用定制指令f_mul及f_mul和DCT32共用。
从表1中可以看出,f_mul是最有效的定制指令,系统规模仅仅增加3%,却减少了77%的循环数目。规模增加很小是因为f_mul定制指令无需专用的硬件乘法器。
表1三种情况比较
所用硬件循环数目逻辑元件(IE)内存位只用硬件乘法1279000354226624f_mul293000364226624f_mul和DCT32并行231600433130528
DCT32指令运行在并行模式下,比起f_mul又减少了21%的循环数目,LE资源也只增加了18.9%。
把定制指令 《采用Nios定制指令的嵌入式系统优化设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/172510.html
①通过IDE接口从CF(CompactFlashcontroler)中读取MP3数据;
②将MP3数据存入SPAM中缓存;
③对MP3数据解码;
④将MP3边带合成到脉冲编码调制(PCM)数据;
⑤把PCM数据传给脉宽调制器PWM。
此外,播放器采用MPEGAudioDecoder(MAD)进行MP3解码,是基于以下方面:
①100%定点(整数)计算;
②网上有可利用的源码;
③在GNUCeneralPublicLicense(GPL)下发布。
(2)定制指令
我们知道在执行MP3解码的过程中,大量时间花费在边带的合成上。因此,优化AlteraMP3的重点就落在函数mad_synth_frame上。我们可通过使用定制指令f_mul和DCT32来优化该函数。
F_mul
F_mul和mad_f_mul是MAD使用的宏,用整数乘法来模拟浮点乘法。定义如下:
#definemad_f_mul(x,y)
((((x)+0x00002000L)>>14)×(((y)+0x00002000L))>>14)
#definef_mul(x,y)
(((x)|0x0001FFFFL)((y)|0x0001FFFFL))
这些函数完成的功能是一组易被硬件实现的操作,包括移位、加法、乘法和逻辑或运算。在AlteraMP3的优化设计中,用硬件定制指令f_mul执行原先用软件宏;还可利用前缀选项,把两个宏合为一个单定制指令。以下就是用Altera的定制指令定义(f_mul和mad_f_mul):
#definef_mul(x,y)nm_fmul((x),(y));
#definemad_f_mul(x,y)nm_fmul_pfx(1,(x),(y));
DCT32
在MP3解码中,DCT32完成离散余弦变换。MAD软件用优化过的DVT来增强性能。从软件角度来看,该优化算法比起一般DCT对提高性能具有重大意义。因为标准DCT需要1024个乘法,而用优化后的DCT只需80个乘法。
图4DCT32与mad_synth_frame软件流程
DCT32定制指令所用硬件由Celoxica提供,它是可重配置计算方案提供商,采用了基于HandelC的设计工具。Altera的DCT32定制指令按以下特点设计:
|①可以存储32位输入和32位输出;
②在DCT计算时,能独立于CPU工作;
③用前缀指令接受命令
——装入/卸载
——启动DCT计算
——轮询是否完成。
因为定制指令可以轮询,在DCT输出前其它代码可以并行运行。当需要DCT输出时,定制指令被查询,看是否已完成计算。如果完成,Nios处理器卸载输出数据,同时装入下组输入数据。图4给出了DCT32定制指令及mad_synth_frame的流程图。
(3)优化前后比较
表1给出了三种情况下完成mad_synth_frame函数的比较结果。三种情况分别是只用硬件乘法指令,单用定制指令f_mul及f_mul和DCT32共用。
从表1中可以看出,f_mul是最有效的定制指令,系统规模仅仅增加3%,却减少了77%的循环数目。规模增加很小是因为f_mul定制指令无需专用的硬件乘法器。
表1三种情况比较
所用硬件循环数目逻辑元件(IE)内存位只用硬件乘法1279000354226624f_mul293000364226624f_mul和DCT32并行231600433130528
DCT32指令运行在并行模式下,比起f_mul又减少了21%的循环数目,LE资源也只增加了18.9%。
把定制指令 《采用Nios定制指令的嵌入式系统优化设计(第2页)》