实验一 CCS使用及DSP基本数学运算一、实验目的:1、熟悉CCS集成开发环境,掌握工程的生成方法;2、熟悉SEED-DTK5416实验环境;3、掌握CCS集成开发环境的调试方法;4、了解数在计算过程中的定标,掌握数的定点、浮点表示方法,定点、浮点基本运算以及定点、浮点间的相互转换。
二、实验内容:1、 DSP源文件的建立;2、 DSP程序工程文件的建立;3、编译与链接的设置,生成可执行的DSP文件;4、进行DSP程序的调试与改错;5、学习使用CCS集成开发工具的调试工具;6、观察实验结果;三、实验知识背景:在DSP编程过程中,数以二进制、十进制、与十六制表示均可。
在定点DSP的运算过程中,数一般采用二进制与二进制补码的形式进行运算的。
其中二进制数只能代表正数不能代表负的数,而二进制补码记数系统弥补了这一缺点。
它的构成如下;在二进制的基础上,加一符号位。
符号位位于二进制数的最高位当为正数时,符号位为0,为负数时,符号位为1当采用二进制补码进行数的运算时,具有如下的两个优点:可以将加法与减法统一成加法运算符号位可以进行扩展,而其数值不变,这可以使一个比较小的数存放到比较大的寄存器当中例:(11110)2 = 1×(-16)+ 1×8 + …… + 1×2 + 0×1 = -2当将其符号位扩展三位,放入一8位的寄存器中(11111110)2 = 1×(-128)+ 1×64 + …… + 1×2 + 0×1 = -2 这将为运算提供极大的方便,因而在定点的DSP中,大多数情况采用二进制补码形式。
C5000系列的DSP硬件只支持定点运算,浮点运算要通过软件来实现。
其运算字长为16位,也就是说,DSP所能表示的整数的范围也就决定了,其范围为-32768到32767。
而在很多情况下,数学运算过程中不一定是整数,而且动态范围也不是固定不变的。
如何解决这个问题?对于只支持定点运算的CPU来说,在硬件上并没有提供小数点定位的机制。
只有靠软件中人为地假设将小数点放在16位数据中的不同位置,就可以表示不同大小与不同精度的数据了,这就是数的定标。
数的定标有Q与S两种表示方法。
在Q表示法中,Q代表(Quantity of Fractional Bits)数中尾数部分的位数,即小数点右边的位数。
而S表示法中,S代表数中整数部分的位数,即小数点左边的位数。
实用中一般用Q表示法,例:Q0表示小数点在第0位的右边,即为整数。
Q15表数小数点在第15位的右边,即为小于1的小数(以二进制补码表示,第15位为符号位)。
下表给出了16位数的16种不同的Q表示法。
并列出了它们所能表示的十进制数的范围。
Q表示法S表示法十进制数表示的范围Q15 S0.15-1≤x≤0.9999695Q14 S1.14-2≤x≤1.9999390Q13 S2.13-4≤x≤3.9998779Q12 S3.12-8≤x≤7.9997559Q11 S4.11-16≤x≤15.9995117Q10 S5.10-32≤x≤31.9990234Q9 S6.9-64≤x≤63.9980469Q8 S7.8-128≤x≤127.9960938Q7 S8.7-256≤x≤255.9921875Q6 S9.6-512≤x≤511.9804375Q5 S10.5-1024≤x≤1023.96875Q4 S11.4-2048≤x≤2047.9375Q3 S12.3-4096≤x≤4095.875Q2 S13.2-8192≤x≤8191.75Q1 S14.1-16384≤x≤16383.5Q0 S15.0-32768≤x≤32767对于加法和减法运算来说,其运算结果并不会改变小数点的位置,也就是说,2个Q15的数相加或相减,其结果还是1个Q15的数。
而对于乘法运算则不然,2个Q15的数相乘,其结果将是1个Q30的数,符号位由1位扩展为2位。
如果保留高16位,舍弃低16位,则将得到1个带有2个符号位的Q14的数。
此时,要想将乘法结果与另1个Q15的数相加或相减,则需要对由乘法运算得到的带有2个符号位的Q14的数去掉一个符号位,规一化为Q15的数,即要左移1位。
对于C5000系列,在数值运算中一般采用Q15数制。
这是由于C5000在进行乘法运算时,其乘法运算单元具有自动左移一位的功能。
这样可以将两个Q15相乘后得到一Q30的数据中的两个符号位去除一个,保证其结果的正确性。
下面举例进行说明:十进制乘法 0.5×0.5 = 0.25;Q15当二进制数相乘时 0.100000000000000× 0.100000000000000 ;Q1500.0100000000000000000000000000 = 0.25 ;Q30↑符号位两个Q15的定点数相乘后得到一个带2个符号位的Q30的数,在结果保存时一般只保存与输入数据相同的精度的结果即可,也就是只保存高16位即可,但DSP乘法运算结果的高16位中包含了2个符号位,也即高16位是1个带有2个符号位的Q14的数,从而其精度将损失1位。
另外,若想用乘法结果与另1个Q15的数相加或相减,由于小数点没有对齐,将导致运算错误。
因此在保存乘法运算结果的高16位时,应将乘积左移一位,从而得到正确的Q15结果。
而这一过程在C5000的DSP中可以自动来处理。
只需要设置ST1的FRCT 位就可以了。
在C5000系列中,若采用其它的Q数制时,就需要在软件中人为地对乘法运算的结果进行相应的左移操作,才能确保数值运算的正确。
浮点数与定点数的转换关系可表示为:=(int)A×2Q;浮点数A转换成定点数B: B定点数A转换成浮点数B: B=(int)A×2-Q。
举例说明浮点数x = 0.5,定标在Q15,则定点数为X q= 0.5 × 32768 = 16384将定点数转换成浮点数也是一样。
由于定点数的表示范围是一定的,因此在进行运算时,其结果就有可能超出数的表示范围的情况,这就是溢出。
溢出有大于最大表示值,叫上溢出,小于最小值叫下溢出。
在定点运算时一定要考虑溢出的处理方法。
在DSP中可以设置溢出保护功能,当发生时,DSP自动将结果设置为最大值或是最小值。
四、实验程序结构说明:在CCS使用及DSP的基本数学运算的实验中主要包括以下文件:1、 math.c这个文件中包含了实验中关于DSP运算的主要函数。
主要包含有:fixed_add(int x,int y):定点加法运算;fixed_sub(int x,int y):定点减法运算;fixed_mul(int x,int y):定点乘法运算;fixed_div(int x,int y):定点除法运算;float_add(double x,double y):浮点加法运算;float_sub(double x,double y):浮点减法运算;float_mul(double x,double y):浮点乘法运算;float_div(double x,double y):浮点除法运算;float_fixed(double x):浮点转定点运算;fixed_float(int x):定点转浮点运算;2、 math.cmd这是DSP的链接文件。
它的主要功能是将DSP的每段的程序链接到相应的DSP的存贮区中。
3、 rts.lib这是一个库文件,主要包含了有关C的运行环境与相应的函数的代码。
五、实验步骤:1、将DSP仿真器与计算机连接好;2、将DSP仿真器的JTAG插头与SEED-DEC54xx单元的J8相连接;启动计算机,当计算机启动后,打开SEED-DTK5416的电源。
观察SEED-DTK_IO单元的+5V、+3.3V、+15V、-15V的电源指示灯是否均亮;若有不亮的,请断开电源,检查电源。
3、打开CCS集成开发环境,进入CCS的操作环境。
4、新建源文件创建一个未知名的源文件编写源代码并保存保存源程序名为math.c创建其他源程序(如.cmd)可重复上述步骤5、建立新工程,打开CCS,点击Project-->New,创建一个新工程工程名及路径可任意指定点击完成,已新建一个名为DTK-MATH.pjt的工程,路径为D:\ti\projects\DTK-MATH点击Project选择add files to project,添加math.c、math.cmd、rts.lib文件到工程中在下拉菜单中分别选择.c点击打开,即可添加源程序到工程中;同样的方法可以添加文件math.cmd、rts.lib到工程中;在下面窗口中可以看到math.c、math.cmd、rts.lib文件已经加到工程文件中以下操作可使您对工程中的文件进行打开、删除、查看属性等操作6、设置编译与连接选项设置相应的编译参数,一般情况下,按默认值就可以;进行连接的参数设置,设置输出文件名,堆栈的大小以及初如化的方式。
设置连接顺序,注:当使用rts.lib时将其放在最后。
点击Project-->Build all,对工程进行编译,如正确则生成 DTK-math.out;若是修改程序,可以使用Project->Build命令,进行编译连接,它只对修改部分做编译连接工作。
可节省编译与连接的时间。
编译通过,生成DTK-math.out7、点击File-->load program,载入debug 文件夹下的可执行文件DTK-MATH.out装载完毕点击窗口左侧的Go Main回到C程序的入口进入C程序的入口设置断点、打开CPU与外设寄存器的观察窗;File->Workspace->Save Workspace…保存调试环境,以便下次调试时,不再需要重新进行设置。
只要File->Workspace->Load Workspace…即可恢复当前的观察窗与断点的设置运行程序到第一个断点在STDout观察窗内看定点运算是否正确。
然后再运行程序到第二个断点,观察浮点运算是否正确;再运行程序,观察浮点与定点之间的转换是否正确。
8、观察CPU寄存器、Memory、Graph关于Graph的设置在以后的实验中有详细的说明,这里就不再说明了。
在图示窗口中可观察到CPU各寄存器的值和外围寄存器的值9、调试工具(debug)在下拉菜单中可选择复位CPU、进入C主程序、重新开始等操作。
以下操作将会在调试过程中经常用到:F5 运行F8 单步运行且进入子程序中F9 设置断点F10 单步运行。
Probe Points是一个对调试有相当帮助的工具,它允许CCS更新观窗口并可以完成在程序的指定处(设置Probe Point处)将PC文件数据读到存贮器或将存贮器数据写入到PC文件中,应用此功能时,设置FILE I/O的属性。