文档详情

DSP实验报告相关HD8680通信技术应用讲义正文.doc

发布:2017-08-11约1.29万字共18页下载文档
文本预览下载声明
实验14  定点小数乘法运算 一、实验目的 ㈠ 了解DSP定点运算中小数乘法的处理方法。 ㈡ 掌握汇编源程序的建立、汇编、链接过程,练习使用CCS进行程序调试的方法。 二、实验原理 ㈠ 小数运算 两个16位整数相乘,乘积总是“向左增长”。这就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将32位乘积保存到数据存储器,就要开销2个机器周期以及2个字的程序和RAM单元。更坏的是,由于乘法器都是16位相乘,因此很难在后续的递推运算中,将32位乘积作为乘法器的输人。 然而,小数相乘,乘积总是“向右增长”。这就意味着超出定点器件数据范围的将是不太感兴趣的部分。在小数乘法情况下,既可以存储32位乘积,也可以存储高16位乘积,这就允许 用较少的资源保存结果,也可以用于递推运算。这就是为什么定点DSP芯片都采用小数乘法的原因。 小数的表示方法: C54x采用2的补码小数,其最高位为符号位,数值范围从-1~+1。一个16位2的补 码小数(Q15格式)的每一位的权值为: MSB … LSB -1 1/2 1/4 1/8 … 2-16 一个十进制小数乘以32768之后,再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的2的补码表示了,如图8-4-1所示: 图8-4-1 DSP定点运算中小数的表示 在汇编语言程序中,是不能直接写入十进制小数的。如果要定义一个系数0.707,可以写成: .word 32768*707/1000 而不能写成32768*0.707。 ㈡ 小数乘法 先看一个小数乘法的例子(假设字长4位,累加器8位): 上述乘积是7位,当将其送到累加器时,为保持乘积的符号,必须进行符号位扩展,这样,累加器中的值-0.09375),出现了冗余符号位。原因是: 即两个带符号数相乘,得到的乘积带有2个符号位,造成错误的结果。 解决冗余符号位的办法是:在程序中设定状态寄存器ST1中的FRCT(小数方式)位为1,在乘法器将结果传送至累加器时就能自动地左移1位,累加器中的结果为:Szzzzzz0(Q7格式),-0.1875),自动地消去了两个带符号数相乘时产生的冗余符号位。 所以,在小数乘法编程时,应当事先设置FRCT位: SSBX FRCT … 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 汇编程序如下: ;*** 编制计算小数乘法运算的程序段。其中数据均为小数*** ;*** 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 chef.asm .mmregs .def start,_c_int00 .bss x,4 .bss a,4 .bss y,1 .data table: .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10 .text _c_int00 b start nop nop start: SSBX FRCT STM #0,SWWSR STM #x,AR1 RPT #7 MVPD table,*AR1+ STM #x,AR2 STM #a,AR3 STM #y,AR4 RPTZ A,#3 MAC *AR2+,*AR3+,A STH A,*AR4 done: B done 该程序运行的结果y=0x1EB7=0.24。
显示全部
相似文档