- 1、本文档共96页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP技术-05 电子通信08
无延时 在分支指令到达流水线执行阶段时,紧跟在该指令后面的2条已读入流水线的指令在流水线中被清除,不执行。 带延时 在分支指令到达流水线执行阶段时,紧跟在分支指令后面的一个2字指令或2个单字指令被执行。 远分支转移 远分支转移允许分支转移到扩展存储器。 一个16位2的补码小数的Q15格式的每一位权值为: MSB(最高位) … LSB(最低位) 符号位 1/2 1/4 1/8 … 2-15 一个十进制小数乘以32768之后再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的2的补码表示了。 +1 → 7FFFh 0.5 正数:乘以32768,整数部分转为16进制数 4000h 0 → 0000h -0.5 负数:绝对值部分乘以32768,…再取反加1 C000h -1 8000h 在C54xDSP汇编语言中,是不能直接写入十进制小数的,但可写为整数运算式。例如要定义一个系数0.707,可以写成: .word 32768*707/1000 而不能写成32768*0.707。 注意: 通过选择合适的Q格式,可以把数值根据所需的精确度做适当地转换,以便定点DSP也可以处理高精度的浮点数。下面以Q15为例,说明转换的过程。 先确定准备转换的十进制数值N,是在Q15格式的数值范围之间,即-1.000000≤N≤+0.999997。 2. 数值N乘以215,即N×215=N×32768 步骤2)的结果转换成十六进制(负数取反加1),得到的结果就是N的Q15转换值。 例 下面把-0.2345及+0.2345转换成Q15格式。 +0.2345的转换为: 0.2345×32768=7684.1≈7684 7684转换成十六进制数值结果为1E04h 即+0.2345的Q格式表示为1E04H -0.2345的转换为: -0.2345×32768=-7684.1≈-7684 -7684转换成十六进制数值结果为9E04H 即-0.2345的Q格式表示为0xE1FCH 以数据字长为4位,8位累加器为例的小数乘法: 0.5×(-0.375)= -0.1875 0 1 0 0 0.5→23×0.5=(4)10=(0100)2 × 1 1 0 1 -0.375→23×(-0.375)=(-3)10 =(1101)2补 0 1 0 0 (Q3格式) 0 0 0 0 0 1 0 0 1 1 0 0 -0100 1 1 1 0 1 0 0 -0.1875=-12/26← -12=(1110100)补 (Q6格式) (2)小数乘法与冗余符号位 上述乘积是7位,当将其送到8位累加器时,为保持乘积的符号,必须进行符号位扩展,这样,累加器中的值应-0.09375=-12/27),出现了冗余符号位。原因是: S x x x (Q3) × S y y y (Q3) S S z z z z z z (Q6格式) 即两个带符号数相乘,得到的乘积带有2个符号位,造成错误的结果。 同样,对于两个十六位数相乘,乘积只有30位,在最高的两位也是符号位,同样会造成错误的结果。 解决冗余符号的办法是: 在程序中将状态寄存器ST1中的FRCT(小数方式)位设为1,在乘法器将结果传送至累加器时就自动地左移1位,累加器中结果为:Szzzzzz0(Q7格式),即{-0.1875=-24/27←-24=补}, 自动地消去了两个带符号数相乘时产生的冗余符号位。所以在小数乘法编程时,应当事先置位FRCT: SSBX FRCT ;FRCT=1 … MPY *AR2,*AR3,A STH A,@Z 这样,C54x就完成了Q15*Q15=Q15的小数乘法。 例 编制计算 的程序段,其中数据均为小数: a1=0.1, a2=0.2, a3=-0.3, a4=0.4, x1=0.8, x2=0.6, x3=-0.4, x4=-0.2。 .title “cjy4.
文档评论(0)