TI C2000定点DSP的快速实现取整函数的一点心得

[复制链接]
1611|1
 楼主| Clovee 发表于 2018-11-23 16:00 | 显示全部楼层 |阅读模式
TI C2000定点DSP的快速实现取整函数的一点心得



floor与ceil函数都是C语言的标准库函数,在<math.h>头文件引用之后一般即可直接调用。在浮点DSP上,通过TI 的FastFPU库,此类浮点函数一般可以通过查ROM的方法快速计算得到。但在定点的DSP,比如C2000中常用的TMS320F2812上,则需做一定的处理,以提高执行效率。我们知道,在浮点DSP上一般有专门的浮点协处理器FPU来完成浮点运算,而在定点DSP上直接计算浮点运算需要消耗大量的处理能力,将浮点运算转换为定点来计算是唯一的选择。


在一个用到floor与ceil函数的具体实验中,我采用了TI公司的TMS320F2812定点DSP,采用C语言编程并使用TI公司定点处理智能数**算(IQmath)。以对Vrab求取floor与ceil值为例,得到以下代码

       /*floor and ceil calculation*/

       _iq Uab,temp;

       Uint16 fab,cab;

if(Uab>=0)     {

fab=_IQint(Uab);

       temp=_IQfrac(Uab);

       cab=(temp||0)+fab;

}

else{

       cab=_IQint(Uab);

       fab=cab-1;

}



经测试,若采用C语言的标准库函数ceil与floor,计算六次floor与ceil与值需要耗费4118个时钟周期,而改写之后,求取六个值只需要137个周期,大大节省了计算时间;以DSP的时钟周期为例,则执行时间从4118*6.67ns=27.47us,缩短到了137*6.67ns=0.91us,运算速度得到极大的提高。

在此,顺便讲一下CCS中如何计算程序的执行时间:

首先是打开ccs,建立工程,编译程序,解决错误。。。这个过程不多讲,最后自然是下载程序。

其次,在ccs的工具栏中点击Profile---Clock---View,就可以在ccs的左下角看到时钟周期数了。。然后还需要再来一遍Profile---Clock---Enable,则使能了时钟评估这个选项。



其次,在需要被测试的程序两端加入断点,然后运行程序。。程序运行到第一个端点停止后,双击一下右下角的计数值,则它就能清零了。然后再运行一下程序,此时程序运行到第二个端点停止,这时的右下角的数值就是执行这段程序所用的时钟周期数。当然,考虑上插入断点所带来的处理器开销,实际的执行时钟周期要稍微小于所显示的值。

shenmu2012 发表于 2018-11-25 20:55 | 显示全部楼层
在浮点DSP上一般有专门的浮点协处理器FPU来完成浮点运算,而在定点DSP上直接计算浮点运算需要消耗大量的处理能力,将浮点运算转换为定点来计算是唯一的选择。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

708

主题

1032

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部