打印

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

[复制链接]
582|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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,则使能了时钟评估这个选项。



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

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

708

主题

1032

帖子

2

粉丝