TI中文支持网
TI专业的中文技术问题搜集分享网站

Am5728的DSP浮点处理能力?

大家好!我现在选用Am5728平台,想用里面的DSP做浮点运算,运算的时间超出预期太多。因此采用简单的浮点乘法测试DSP运行的速度。

Am5728输入CLK=20MHz, DSP主频为20×150/5=600MHz,采用XDS220 USB仿真器运行测试代码,:测试代码段如下: 

double dTest1 = 1.7568;

double dTest2= 125773.567

double dResult;

SetGPIO(1);

dResult = dTest1 * dTest2;

SetGPIO(0);

       用示波器观测GPIO输出的高电平为620ns,按手册浮点运算应该是单周期,加上GPIO设置、数据存取等代码,反汇编不超过20条,应该不超过34ns才差不多。将浮点运算增加到3次(代码如下),测试GPIO输出时间1.2us,可以看出确实运算的时间比预期的长很多,不知道什么原因。怀疑是DSP的主频不对,但与DSP主频相关的寄存器都正确,且DSP时钟状态是锁定的。

         请问Am572X中DSP的浮点处理是单周期的吗?还有哪些地方需要排查,是什么原因导致执行速度这么慢?或者有什么方法可以确定DSP工作的主频? 非常感谢!

dResult = dTest1 * dTest2;

dResult = dResult * dTest2;

dResult = dResult * dTest2;

Shine:

GPIO管脚不是跑CPU主频,速度很慢的,所以用GPIO管脚来测代码运行时间是不精准的。
建议用TSCL, TSCH两个cpu cycles计数器 来测代码运行时间。
使用参考如下:
TSCL=0;//初始化为任意值使能TSC时钟计时
start = TSCL;
FUNC();
end = TSCL;
cycle = end – start;

sfloat s:

回复 Shine:

TSCL计数器是ARM的主频还是DSP的主频?

用这个计数器

start = TSCL;dResult = dTest1*dTest2;end = TSCL;

测试结果是172;

start = TSCL;

for(i = 0; i < 10000; i++)

{

dResult = dTest1*dTest2;

dTest2++;

}

end = TSCL;

测试结果是3460000

感觉这个时间也不应该是浮点处理器该有的速度。

我现在用仿真器跑DSP,是否和Arm核没有程序控制有关? 谢谢!

sfloat s:

回复 Shine:

TSCL是DSP的主频,但为什么一条浮点运算需要执行172个时钟周期呢?按手册不是单周期吗?是哪个地方可能有问题?谢谢!

yongqing wang:

回复 sfloat s:

使用DSP不是应该用DSP的接口函数吗

yongqing wang:

回复 sfloat s:

学习一下

赞(0)
未经允许不得转载:TI中文支持网 » Am5728的DSP浮点处理能力?
分享到: 更多 (0)