TMS320C54X DSP 的定标和归一化问题

TMS320C54X DSP 的定标和归一化问题

看书看到TMS320C54x有一个桶形移位器。

其功能是定标,以及累加器的归一化处理。

初看不大明白,细查资料大致理解。

 

1 定标。

因为TMS320C54X是定点DSP,本身不能处理浮点数据。

那么为什么不用浮点DSP呢?浮点DSP价格贵,而且功率大。对于手机这类产品,显然用浮点DSP不合适。

我们处理浮点数据,需要对数据位定标。定点DSP处理浮点数据是很麻烦的,经常要进行归一化,还要防止溢出。

所位定标,

也就是,确定小数位多少位。

比如Q15,小数点后就有15位。Q0,小数点后0位,当然就是整数。

定标的处理,实际上就是移位。

 

2 归一化处理

其实归一化处理涉及比较高级一点的问题。就是浮点数据处理的定点化。

为了保证一定的精度,

对于一个负数,如果前面有一些冗余的符号位,也就是一个比较小的小数,那么可以去掉冗余位,对数据进行左移。

对于一个大的正数,如果后面有不少的0,那么可以右移。因为这些0其实是没有什么实际运算作用。

当然,左移或者右移多少位,要保存起来。

TMS320C54X有两条指令,来做归一化。

首先是EXP src指令。计算能够移多少位,比如一个数有20个冗余符号位,那么能够左移20-8=12位,这个12会保存到T寄存器。

然后是NORM 指令,把寄存器的数归一化,也就是移位。

 

给一个书上的例子:

 

          EXP A; (多余符号位数-8)→T寄存器。

    ST T,EXPONENT;将保存在T寄存器中的指数存入指定的数据存储器中。

   NORM A;对累加器A进行归一化处理。

  

      40位累加器A中的定点数FF FFFF F001。先用EXP A指令,求得指数为13H,存放在T寄存器中,然后执行NORM A指令,在单个周期内将定点数分成尾数FF 8008 0000和指数13H两个部分。

具体计算方法:

将FF FFFF F001变成二进制数,即 11111111 1111111111111111 1111000000000001

是不是有很多1是无用的符号位?

最后一个F(蓝色)的第四位前都是多余的符号位(红色数字),共27位,27-8=19,也就是13H,所以指数为13H,T=13H.

NORM A 是将A归一化,即向左移位T中所存的数(13H),右边添0,移位的结果是FF 8008 0000。这样就将一个定点数转化成一个浮点数。

更深入理解归一化,推荐两篇文章。

http://blog.163.com/xiaohu345@126/blog/static/63587367201111452825497/

http://www.eefocus.com/book/09-02/646201276059458.html

 

posted @ 2011-12-15 00:29  proteus学习  阅读(2823)  评论(0编辑  收藏  举报