《第2章芯片的运算基础优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第2章芯片的运算基础优秀PPT.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章芯片的运算基础章芯片的运算基础现在学习的是第1页,共54页 根据参与运算的数据格式来分,根据参与运算的数据格式来分,DSP芯片芯片有定点和浮点两大类。有定点和浮点两大类。TMS320C2000系列系列DSP芯片属于定点芯片属于定点芯片,因此参与运算的数据格式必须采用定点芯片,因此参与运算的数据格式必须采用定点格式,为了使大家能够理解格式,为了使大家能够理解DSP芯片的运算芯片的运算方法,在这一章里我们一起来学习方法,在这一章里我们一起来学习DSP芯片芯片运算的基础知识。运算的基础知识。现在学习的是第2页,共54页2.1 2.1 定标的基本概念定标的基本概念 2.1.1 数的定标数的定标
2、 在在定定点点DSP芯芯片片中中,采采用用定定点点数数进进行行数数值值运运算算,其其操操作作数数一一般般采采用用整整型型数数来来表表示示。一一个个整整型型数数的的最最大大表表示示范范围围取取决决于于DSP芯片所给定的字长,一般为1616位位或或2424位位。显显然然,字字长长越越长长,所所能能表表示示的的数数的的范范围围越越大,精度也越高。大,精度也越高。DSPDSP芯芯片片的的数数以以2的的补补码码形形式式表表示示。每每个个16位数用一个符号位来表示数的正负,0 0表示数值为正,1 1则表示数值为负。其余则表示数值为负。其余1515位表示数值的大小。位表示数值的大小。现在学习的是第3页,共5
3、4页如:n n二进制数0010000000000011b8195n n二进制数1111111111111100b-4现在学习的是第4页,共54页 对DSP芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。那么是不是说DSP芯片就不能处理各种小数呢?当然不是。这其中的关键就是由我们设计者来确定一个数的小数点处于16位中的哪一位。这就是数的定标。现在学习的是第5页,共54页 通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。下
4、表列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。现在学习的是第6页,共54页Q Q表示表示S S表示表示十进制数表示范围十进制数表示范围Q15Q15S0.15S0.15-1X0.9999695-1X0.9999695Q14Q14S1.14S1.14-2X1.9999390-2X1.9999390Q13Q13S2.13S2.13-4X3.9998779-4X3.9998779Q12Q12S3.12S3.12-8X7.9997559-8X7.9997559Q11Q11S4.11S4.11-16X15.9995117-16X15.9995117Q10Q10S5.10S5.1
5、0-32X31.9990234-32X31.9990234Q9Q9S6.9S6.9-64X63.9980469-64X63.9980469Q8Q8S7.8S7.8-128X127.9960938-128X127.9960938Q7Q7S8.7S8.7-256X255.9921875-256X255.9921875Q6Q6S9.6S9.6-512X511.9804375-512X511.9804375Q5Q5S10.5S10.5-1024X1023.96875-1024X1023.96875Q4Q4S11.4S11.4-2048X2047.9375-2048X2047.9375Q3Q3S12.3
6、S12.3-4096X4095.875-4096X4095.875Q2Q2S13.2S13.2-8192X8191.75-8192X8191.75Q1Q1S14.1S14.1-16384X16383.5-16384X16383.5Q0Q0S15.0S15.0-32768X32767-32768X32767现在学习的是第7页,共54页n n同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如:n n16进制数2000H8192,用Q0表示n n16进制数2000H0.25,用Q15表示现在学习的是第8页,共54页 从表从表3.1还可以看出,不同的QQ所表示的数不仅所表示的数不仅范
7、围不同,而且精度也不相同。范围不同,而且精度也不相同。Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0Q0的数值范围是的数值范围是-3276832768到到+32767,其精度为,其精度为1,而,而Q15的数值范围为-1-1到到0.99996950.9999695,精度为 1/32768=0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。现在学习的是第9页,共54页浮点数与定点
8、数的转换关系可表示为:浮点数(x)转换为定点数(xq):xq=(int)x*2Q定点数(xq)转换为浮点数(x):x=(float)xq*2-Q如,浮点数 x=0.5,定标 Q15,则定点数xq 0.5*2Q=16384;反之,一个用 Q15 表示的定点数16384,其浮点数为163842-1516384/32768=0.5。现在学习的是第10页,共54页2.1.2 溢出及处理方法溢出:由于定点数的表示范围是一定的,因此在进行定点数的加法或减法运算时,其结果就有可能超出数值的表示范围的情况。上溢:结果大于最大值。下溢:结果小于最小值。现在学习的是第11页,共54页 在定点运算时,必须考虑溢出的
9、处理方法。否则就有可能导致灾难性的后果。如:两个16位的有符号位数x、y相加,结果也用16位有符号数表示,假设x=32766d=0111111111111110b;y=3d=0000000000000011b;x+y=32766+3=1000000000000001=-32767 现在学习的是第12页,共54页 为了避免这种情况发生,一般在DSP芯片中可以设置溢出的保护功能。设置了溢出功能后,当发生溢出时,DSP芯片自动将结果设置为最大值或最小值。现在学习的是第13页,共54页2.1.3 舍入(rounding)及截尾(truncation)一般对一个数进行取整处理,有以下两种方法:1、舍入:
10、将该数加0.5后,再将小数部分去处。2、截尾:直接将小数部分去处;现在学习的是第14页,共54页例2-1,已知x=123.3,y=123.7,试分别对x、y进行舍入和截尾处理。对x进行舍入:round(x)=round(123.3)trunc(123.3+0.5)=123对x进行截尾:trunc(123.3)=123对y进行舍入:round(y)=round(123.7)trunc(123.7+0.5)=124对y进行截尾:trunc(123.7)=123现在学习的是第15页,共54页 对于DSP芯片的乘法运算,常需要用到舍入处理方法。设两个Q值均为15的16位有符号数进行乘法运算,结果也采用
11、Q15表示的16位数。1、两数相乘,结果放在32位累加器中,Q=30;2、将累加器中的数左移一位,Q=31;3、为了将结果表示为16位,一种方法是直接将低16位截尾,保留高16位,作为乘法结果。另一种方法就是在截尾之前进行舍入处理。方法就是在低16位数的最高位加1,然后将低16位去除,将高16位作为结果。现在学习的是第16页,共54页2.2 定点运算实现的基本原理在编写DSP模拟算法时,为了方便,一般都是采用高级语言来编写模拟程序。程序中所用的变量一般既有整型数,又有浮点数。例2-2 256点汉明窗计算inti;float pi=3.14159;float hamwindow256;for(i
12、=0;iQy,加法/减法结果z的定标值为Qz,则:zx+y zq*2-Q=xq*2-Qx+yq*2-Qy =xq*2-Qx+yq*2(Qx-Qy)*2-Qx =xq+yq*2(Qx-Qy)*2-Qx zq=xq+yq*2(Qx-Qy)*2(Qz-Qx)现在学习的是第20页,共54页所以定点加法可以描述为:int x,y,z;long temp;/*临时变量*/tempy(QxQz),若QxQzz(int)(temp(QzQx),若QxQz现在学习的是第21页,共54页例2-3 定点加法设x0.5,y3.1,则浮点运算结果为zx+y0.5+3.13.6;Qx15,Qy13,Qz13,则定点加法为
13、:x16384;y25395;temp253952)29491;因为z的Q值为13,所以定点值z29491即为浮点值z29491/81923.6。现在学习的是第22页,共54页例2-4 定点减法设x3.0,y3.1,则浮点运算结果为zx-y3.0-3.1-0.1;Qx13,Qy13,Qz15,则定点减法为:x24576;y25395;temp25395;tempx-temp24576-25395-819;因为QxQz,故 z(int)(-819Qy,加法结果z的定标值为Qz,则定点加法为:int x,y;long temp,z;tempy(Qx-Qz),若QxQzztemp32767,因此Qx
14、1,Qy0,Qz0,则定点加法为:x30000;y20000;temp20000135000;因为z的Q值为0,所以定点值z=35000就是浮点值,这里z是一个长整型数。现在学习的是第25页,共54页 当加法或加法的结果超过16位表示范围时,如果我们事先能够了解到这种情况,并且需要保证运算精度时,则必须保持32位结果。如果程序中是按照16位数进行运算的,则超过16位实际上就是出现了溢出。如果不采取适当的措施,则数据溢出会导致运算精度的严重恶化。一般的定点DSP芯片都设有溢出保护功能,当溢出保护功能有效时,一旦出现溢出,则累加器ACC的结果为最大的饱和值(上溢为7FFFh,下溢为8000h),从
15、而达到防止溢出引起精度严重恶化的目的。现在学习的是第26页,共54页2.2.2 乘法运算的C语言定点模拟 设浮点乘法运算的表达式为:float x,y,z;z=xy;假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为Qz,则 z=xy zq*2-Q=xq*yq2-(Qx+Qy)zq=(xq*yq)*2(Qz-(Qx+Qy)现在学习的是第27页,共54页所以定点表示的乘法为:int x,y,z;long temp;temp=(long)x;z=(temp*y)(Qx+Qy-Qz);现在学习的是第28页,共54页例2-6 定点乘法设x=18.4,y=36.8,则浮点运算值为z=18
16、.436.8=677.12;根据上节,得Qx=10,Qy=9,Qz=5,所以x=18841;y=18841;temp=18841L;z=(18841L*18841)(10+9-5)=354983281L14=21666;因为z的定标值为5,故定点 z=21666即为浮点的 z=21666/32=677.08。现在学习的是第29页,共54页2.2.3 除法运算的C语言定点模拟设浮点除法运算的表达式为:float x,y,z;z=x/y;假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz,则z=x/y zq*2-Q=xq*2-Qx/yq*2-Qy zq=xq*2(Qz-
17、Qx+Qy)/yq现在学习的是第30页,共54页所以定点表示的除法为:int x,y,z;long temp;temp=(long)x;z=(temp(Qz-Qx+Qy)/y;现在学习的是第31页,共54页例2-7 定点除法设x=18.4,y=36.8,浮点运算值为z=x/y=18.4/36.8=0.5;根据上节,得Qx=10,Qy=9,Qz=15;所以有x=18841,y=18841;temp=(long)18841;z=(18841L(15-10+9)/18841=308690944L/18841=16384;因为商z的定标值为15,所以定点z=16384即为浮点 z=16384/215=
18、0.5。现在学习的是第32页,共54页2.2.4 程序变量的Q值确定 在前面几节学习的例子中,由于x、y、z的值都是已知的,因此从浮点变为定点时Q值很好确定。在实际的DSP应用中,程序中参与运算的都是变量,那么如何确定浮点程序中变量的Q值呢?从前面的分析可以知道,确定变量的Q值实际上就是确定变量的动态范围,动态范围确定了,则Q值也就确定了。现在学习的是第33页,共54页n n设变量的绝对值的最大值为|max|,注意必须小于或等于32767。取一个整数n,使它满足n n则有:Q=15-n现在学习的是第34页,共54页某变量的值在-1至1之间,即 1,因此n=0,Q15-n=15。程序变量Q值的确
19、定:一种是理论分析法,另一种是统计分析法。现在学习的是第35页,共54页1理论分析法有些变量的动态范围通过理论分析是可以确定的。(1)三角函数,y=sin(x)或y=cos(x),由三角函数知识可知,|y|1;(2)汉明窗,y(n)=0.54-0.46cos 2n/(N-1),0nN-1。因为-1cos 2n/(N-1)1,所以0.08y(n)1.0;现在学习的是第36页,共54页2统计分析法 对于理论上无法确定范围的变量,一般采用统计分析的方法来确定其动态范围。所谓统计分析,就是用足够多的输入信号样值来确定程序中变量的动态范围,这里输入信号一方面要有一定的数量,另一方面必须尽可能地涉及各种情
20、况。现在学习的是第37页,共54页DSP定点算术运算n n定点DSP芯片的数值表示是基于2的补码表示形式。每个16位数用1个符号位、i个整数位和15-i个小数位来表示。因此数00000010.10100000表示的值为=2.625,这个数可用Q8格式(个小数位)来表示,它表示的数值范围为-128+127.996,一个Q8定点数的小数精度为1/256=0.004。现在学习的是第38页,共54页n n虽然特殊情况必须使用混合表示法,但是,更通常的是全部以Q15格式表示的小数或以Q0格式表示的整数来工作。这一点对于主要是乘法和累加的信号处理算法特别易现实,小数乘以小数得小数,整数乘以整数得整数。当然
21、,乘积累加时可能会出现溢出现象,在这种情况下,程序员应当了解数学里面的物理过程以注意可能的溢出情况。下面讨论乘法、加法和除法的DSP定点运算。现在学习的是第39页,共54页n n2 2个定点数相乘时可以分为下列个定点数相乘时可以分为下列3 3种情况:种情况:n n1 1小数乘小数小数乘小数n nQ15Q15Q15Q15Q30Q30n n例例2.10 0.5*0.5=0.252.10 0.5*0.5=0.25n n 0.100000000000000 0.100000000000000;Q15Q15n n 0.1000000000000000.100000000000000;Q15Q15n n0
22、0.010000000000000000000000000000=0.2500.010000000000000000000000000000=0.25;Q30Q30n n2 2个个Q15Q15的小数相乘后得到的小数相乘后得到1 1个个Q30Q30的小数,即有的小数,即有2 2个符号位。一般情况下相个符号位。一般情况下相乘后得到的满精度数不必全部保留,而只需保留乘后得到的满精度数不必全部保留,而只需保留1616位单精度数。由于相乘位单精度数。由于相乘后得到的高后得到的高1616位不满位不满1515位的小数精度,为了达到位的小数精度,为了达到1515位精度,可将乘积左移位精度,可将乘积左移1 1位
23、位 现在学习的是第40页,共54页n n2整数乘整数n nQ0Q0=Q0n n例2.11 17(-5)=-85n n 0000000000010001=17n n 1111111111111011=-5n n11111111111111111111111110101011=-85现在学习的是第41页,共54页n n许多情况下,运算过程中为了既满足数值的动态范围又保证许多情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,就必须采用一定的精度,就必须采用Q0Q0与与Q15Q15之间的表示法。比如,数值之间的表示法。比如,数值1.23451.2345,显然,显然Q15Q15无法表示,而若用
24、无法表示,而若用Q0Q0表示,则最接近的数是表示,则最接近的数是1 1,精度无法保证。因此,数精度无法保证。因此,数1.23451.2345最佳的表示法是最佳的表示法是Q14Q14。n n例例2.12 1.50.75=1.1252.12 1.50.75=1.125n n 01.10000000000000=1.5 01.10000000000000=1.5 ;Q14Q14n n 00.11000000000000=0.75 00.11000000000000=0.75 ;Q14Q14n n0001.0010000000000000000000000000=1.125;Q280001.00100
25、00000000000000000000000=1.125;Q283.混合表示法 现在学习的是第42页,共54页n n一般的,若一个数的整数位为 i位,小数位为 j 位,另一个数的整数位为 m 位,小数位为 n 位,则这两个数的乘积为(i+m)位整数位和(j+n)位小数位。这个乘积的最高16位可能的精度为(i+m )整 数 位 和(15-i-m)小 数 位。现在学习的是第43页,共54页定点加法定点加法n n 乘的过程中,程序员可不考虑溢出而只需调整运算中的小数点。而加法则是一个更加复杂的过程。首先,加法运算必须用相同的Q值表示;其次,程序员或者允许其结果有足够的高位以适应位的增长,或者必须准
26、备解决溢出问题。如果操作数仅为16位长,其结果可用双精度数表示。现在学习的是第44页,共54页2.3.3 定点除法定点除法n n在通用DSP芯片中,一般不提供单周期的除法指令,为此必须采用除法子程序来实现。二进制除法是乘法的逆运算。乘法包括一系列的移位和加法,而除法可分解为一系列的减法和移位。现在学习的是第45页,共54页2.4非线性运算的定点快速实现n n在数值运算中,除基本的加减乘除运算外,还有其他许多非线性运算,如对数运算、开方运算、指数运算、三角函数运算等,实现这些非线性运算的方法一般有:n n(1)调用DSP编译系统的库函数;n n(2)查表法;n n(3)混合法。现在学习的是第46
27、页,共54页2.4.1调用调用DSP编译系统的库函数编译系统的库函数n nTMS320C2X/C5X 的C编译器提供了比较丰富的运行支持库函数。在这些库函数中,包含了诸如对数、开方、三角函数、指数等常用的非线性函数。在C程序中(也可在汇编程序中)只要采用与库函数相同的变量定义,就可以直接调用。现在学习的是第47页,共54页n n如,在库函数中,定义了以10为底的常用对数log10():n ninclude n ndouble log10(double x);n n在C程序中按如下方式调用:n nfloat x,y;n nx=10.0;n ny=log10(x);现在学习的是第48页,共54页2
28、.4.2 查表法查表法n n在实时DSP应用中实现非线性运算,一般都采取适当降低运算精度来提高程序的运算速度。查表法是快速实现非线性运算最常用的方法。采用这种方法必须根据自变量的范围和精度要求制作一张表格。显然输入的范围越大,精度要求越高,则所需的表格就越大,即存储量也越大。查表法求值所需的计算就是根据输入值确定表的地址,根据地址就可得到相应的值,因而运算量较小。现在学习的是第49页,共54页n n 已知正弦函数已知正弦函数y=cos(x)y=cos(x),制作一个,制作一个512512点表格,并说明查表点表格,并说明查表方法。方法。n n由于正弦函数是周期函数,函数值在由于正弦函数是周期函数
29、,函数值在1 1至至1 1之间,用查表法比之间,用查表法比较合适。较合适。n n由于由于Q15Q15的表示范围为的表示范围为1 1至至32767/3276832767/32768之间,原则上讲之间,原则上讲1 1至至1 1的范围必须用的范围必须用Q14Q14表示。但一般从方便和总体精度考表示。但一般从方便和总体精度考虑,类似情况仍用虑,类似情况仍用Q15Q15表示,此时表示,此时1 1用用3276732767来表示。来表示。n n(1)(1)产生产生512512点值的点值的C C语言程序如下所示语言程序如下所示:n n#define N 512#define N 512n n#define p
30、i 3.14159#define pi 3.14159n nint sin_tab512;int sin_tab512;n nvoid main()void main()n n n nint i;int i;n nfor(i=0;iN;i+)sin_tabi=(int)(32767*sin(2*pi*i/N);for(i=0;i20。现在学习的是第51页,共54页3混合法混合法n n(1)提高查表法的精度n n(2)扩大自变量范围现在学习的是第52页,共54页小 结n n本章讨论了DSP芯片进行定点运算所涉及的一些基本问题,这些问题包括:数的定标,DSP程序的定点模拟,DSP芯片的定点运算等。充分理解这些问题对于用定点芯片实现DSP算法具有非常重要的作用。现在学习的是第53页,共54页作业作业n n2.6思考题 n n 1、2、3现在学习的是第54页,共54页