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