小命 (1)小数的表示方法 C54x用2的补码表示小数,其最高位为符号位,数值范围 从-1~1。一个16位2的补码小数(Q15格式)的每一位的权值 为 MSB(最高位) LSB(最低位) 1/21/1/8 2 -15 个十进制小数乘以32768之后再将其十进制整数部分转换 成十六进制数,就能得到这个十进制小数的2的补码表示了。 7FFFh 0.5正数:乘以32768 4000h 0 0000h 0.5负数:其绝对值部分乘以32768,再取反加1c000h 8000h
27 C54x采用2的补码表示小数,其最高位为符号位,数值范围 从-1~1。一个16位2的补码小数(Q15格式)的每一位的权值 为: MSB(最高位) … LSB(最低位) -1. 1/2 1/4 1/8 … 2 -15 一个十进制小数乘以32768之后再将其十进制整数部分转换 成十六进制数,就能得到这个十进制小数的2的补码表示了。 ≈1 → 7FFFh 0.5 正数:乘以32768 4000h 0 → 0000h -0.5 负数:其绝对值部分乘以32768,再取反加1 C000h -1 8000h (1)小数的表示方法
小命 在汇编语言中,是不能直接写入十进制 小数的,可写为整数运算式 注意如果要定义一个系数0.707,可以写成 WOrd32768*707/1000 不能写成32768*0.707。 Q格式表示法 在Q格式中,Q之后的数字(如Q15格式中的15)决 定小数点右边有多少位二进制位,故Q15表示在小数 点后有15位小数。当用一个16位的字来表示Q15格式 时,在MSB(最高位)的右边有一个小数点,而MSB表 示符号位。所以Q15的表示数字可表示范围从+1(以 +0.999997表示)到-1的值
28 在汇编语言中,是不能直接写入十进制 小数的,可写为整数运算式。 如果要定义一个系数0.707,可以写成: .word 32768*707/1000 不能写成32768*0.707。 注意 Q格式表示法 在Q格式中,Q之后的数字(如Q15格式中的15)决 定小数点右边有多少位二进制位,故Q15表示在小数 点后有15位小数。当用一个16位的字来表示Q15格式 时,在MSB(最高位)的右边有一个小数点,而MSB表 示符号位。所以Q15的表示数字可表示范围从+1(以 +0.999997表示)到-1的值
小命 通过合适的Q格式,可以把数值根据所需的精确度做 适当地转换,以便定点数的DSP也可以处理高精度的 浮点数。下面以Q15为例,说明转换的过程。 1)先确定准备转换的十进制数值N,是在Q15格式 的数值范围之间,即-1.000000≤N≤+0.9997 2)数值N乘以215,即NNN×215=N×32768 3)把步骤2)的结果加216,即N’=N+216=N3+65536 4)步骤3)的结果转换成十六进制,并把第17位舍 弃掉,得到的结果就是N的Q15转换值
29 通过合适的Q格式,可以把数值根据所需的精确度做 适当地转换,以便定点数的DSP也可以处理高精度的 浮点数。下面以Q15为例,说明转换的过程。 1) 先确定准备转换的十进制数值N,是在Q15格式 的数值范围之间,即-1.000000≤N≤+0.999997。 2)数值N乘以2 15 ,即N'=N×2 15=N×32768 3)把步骤2)的结果加2 16 ,即N''=N'+2 16=N'+65536 。 4)步骤3)的结果转换成十六进制,并把第17位舍 弃掉,得到的结果就是N的Q15转换值
命捉大 下面通过把-0.2345及+0.2345转换成Q15格式来说 明转换方法。 0.2345的转换为: 0.2345×32768=-7684.1≈-7684 7684+65536=57852 57852转换成十六进制数值为0E1FCh,所以结果为 E1FCh。 +0.2345的转换为: 0.2345×32768=7684.1≈7684 7684+65536=73320 73320转换成十六进制数值为11E04h,并把第17位 舍弃掉,结果为1E04h
30 下面通过把-0.2345及+0.2345转换成Q15格式来说 明转换方法。 -0.2345的转换为: -0.2345×32768=-7684.1≈-7684 -7684+65536=57852 57852转换成十六进制数值为0E1FCh,所以结果为 E1FCh。 +0.2345的转换为: 0.2345×32768=7684.1≈7684 7684+65536=73320 73320转换成十六进制数值为11E04h,并把第17位 舍弃掉,结果为1E04h
小命 (2)小数乘法与冗余符号位 以字长为4位和8位累加器为例,先看一个小数乘法的例子。 0100(0.5→23×0.5=(4)10-(0100)2) × 101(-0.375→23×(-0.375)=(-3) 10 0100 (1101)林) 0000 0100 1100(-0100) 1110100(-0.1875=12/26←-12=(1110100)x) 补
31 以字长为4位和8位累加器为例,先看一个小数乘法的例子。 0 1 0 0(0.5→2 3×0.5=(4)10 =(0100)2) × 1 1 0 1(-0.375→2 3×(-0.375)=(-3)10 0 1 0 0 =(1101)补) 0 0 0 0 0 1 0 0 1 1 0 0 (-0100) 1 1 1 0 1 0 0 (-0.1875=-12/2 6←-12=(1110100)补) (2)小数乘法与冗余符号位