DSP技术实验报告Word下载.docx
- 文档编号:17606953
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:38
- 大小:864.57KB
DSP技术实验报告Word下载.docx
《DSP技术实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《DSP技术实验报告Word下载.docx(38页珍藏版)》请在冰豆网上搜索。
10
11
12
13
14
15
16
17
18
19
20
福建农林大学计算机与信息学院信息工程类实验报告
电子信息工程专业:
电子信息工程年级:
2010级
姓名:
学号:
实验课程:
实验室号:
___田C513实验设备号:
实验时间:
2013.10.18
指导教师签字:
成绩:
1.实验目的和要求
1.熟悉DSP软件开发环境CCS的使用。
2.熟悉CCS中的C语言编程。
3.了解C6000DSP的汇编语言。
2.主要仪器设备(实验用的软硬件环境)
安装了CCS2.0的计算机,采用simulator配置文件sim6201_simulator.cfg
3.操作方法与实验步骤
1、配置CCS
打开桌面程序“SetupCCS2('
C6000)”,采用simulator配置文件sim6201_simulator.cfg,配置完成后保存。
2、实验内容1操作步骤:
(2)打开CCS:
①打双击桌面程序:
SetupCCS2('
C6000),配置CCS,选C6xxx;
②配置好后,打开桌面程序:
CCS2('
C6000);
(3)打开工程文件:
①把文件夹tutorial\sim62xx\hello1拷贝到myproject下;
②单击菜单Project->
Open,打开hello.pjt,选择支持库rts6200.lib
(4)编译程序:
菜单Project->
build或rebuild
(5)加载程序:
菜单File->
LoadProgram,选择Debug下的.out文件装入目标板
(6)gomain:
菜单Debug->
gomain,执行到main()处暂停
(7)执行程序:
Debug->
Run
(8)设置断点:
Togglebreakpoint
(9)单步执行:
Step(两种:
C和汇编)
(10)观察变量:
菜单Edit->
Variable
(11)观察存储器:
Memory
(12)测试函数执行的CLK:
Profiler->
ViewClock
(13)混合代码显示:
View->
MixedSource/ASM
3、自行完成实验内容2的操作。
4、自行完成实验内容3的编程及编译、目标程序的加载和执行,观察c=a*b对应的汇编代码,并解释该汇编代码。
4.实验内容及实验数据记录
1.新建一个project,把tutorial\sim62xx\hello1的文件添加进去,完成其功能。
练习CCS的基本操作:
加载程序、gomain、执行程序、设置断点、单步执行、观察变量、观察存储器、测试函数执行的CLK、混合代码显示。
2.打开tutorial\sim62xx\volume1的项目文件,完成图形方式观察变量、设置探点、GEL控制变量、FILEIO、动画显示输入输出的功能。
然后单步执行load.asm,观察C代码调用、寄存器的变化、测试函数执行时间、如何循环和返回C代码。
3.解释如何在C6201上实现32bitint乘32bitint,结果是32bitint的过程:
在刚才的hello1中设置3个全局变量inta=0x10008;
intb=56;
intc;
在main函数中执行语句c=a*b;
build后加载执行程序,混合代码显示c=a*b对应的汇编代码,解释之。
5.实验程序或实验数据处理与分析
1.配置CCS
2.打开CCS
(1)打开工程文件:
(2)编译程序:
(3)加载程序:
(4)gomain:
(5)执行程序:
(6)设置断点:
(7)单步执行:
(8)观察变量:
(9)观察存储器:
(10)测试函数执行的CLK:
(11)混合代码显示:
3.自行完成实验内容3的编程及编译、目标程序的加载和执行,观察c=a*b对应的汇编代码,并解释该汇编代码。
6.质疑、建议、问题讨论
通过此次实验,使我熟悉了DSP软件开发环境CCS的使用,熟悉CCS中的C语言编程,并且初步了解C6000DSP的汇编语言。
1实验课程:
______实验设备号:
实验时间:
2.熟悉C6000中的C运行时环境。
安装了CCS2.0的计算机,采用simulator配置文件sim6201_simulator.cfg
1)打开ccs6000的C运行时的环境;
2)双击桌面程序SetupCCS2(6000),配置CCS,选择C6xxx;
3)配置好后,打开桌面程序CCS2(6000);
4)把文件夹tutorial\sim62xx\hello1拷贝到myproject下;
5)单击菜单project->
open,打开open.pjt,选择文件库rts6200.lib;
6)将汇编代码段加到hello.asm,再在hello.c中加入汇编子函数的C语言程序,进行编译、加载生成.out文件,执行产生结果。
采用simulator配置文件sim6201_simulator.cfg
1.Hello1中添加1个C文件sop_c.c,该文件是一个乘法累加的子函数sop_c(short*a,short*x,int*y,intn),然后在main函数中调用。
不选择任何优化选项。
用混合代码显示,在汇编层次执行sop_c子函数,观察调用、执行和返回的过程。
2.用汇编语言实现两个数组a(n)和x(n)的乘法累加功能。
汇编文件名为:
sop_asm.asm,主函数C中调用格式:
intsop_asm(short*a,short*x,intn)。
1)在Hello1中添加文件sop_c.c
在mian函数中调用:
2)在Hello1中添加文件sop_asm.asm
在main函数中调用
3)实验处理:
由于对c6000的使用还不是太熟悉,所以操作中还是不太熟练,而且在编写代码时也有些不必要的错误,但进过细心的观察,最终找到错误并改正,今后应该注意,此次实验使我熟悉DSP软件开发环境CCS的使用,熟悉C6000中的C运行时环境。
____实验设备号:
2.掌握CCS中的C语言编程。
3.熟悉C6000DSP的代码优化过程。
1.采用simulator配置文件sim6201_simulator.cfg,写手工优化的sop_asm.asm程序:
在实验二的基础上实现16bit数组的乘法累加的函数,并手工优化和采用软件流水优化。
要求:
(1)使用LDW和MPY,MPYH指令;
对于C64可以使用扩展乘法指令。
(2)画出相关图和模迭代间隔表。
1.实现16位数组乘法函数
1)在hello.c中添加文件sop_c.c
2)在main函数中的调用
3)编译运行结果
2.优化
1)线性汇编优化sop_sa.sa
2)在main函数中的调用
3)编译运行结果
4)汇编优化sop_asm.asm
5)在main函数中的调用
6)编译运行结果
通过此次实验,进一步熟悉DSP软件开发环境CCS的使用,也知道并且熟悉C6000DSP的代码优化过程,但还是发现自己在编写改进程序上能力不足,今后一定加强这方面的练习。
学号:
___实验设备号:
1.通过创建基于DSP/BIOS的HelloWorld工程实例,熟悉CCS环境下DSP/BIOS软件的创建和使用方法。
2.熟悉在CCS环境下对代码的运行效率和性能作出评估的工具和方法。
3.实验要求
完成实验内容,运行成功,得到输出结果,填写以下表格,并作出对比分析。
运行一次所需要的指令周期数(单位:
个)
put()函数
1700
LOG_prinrt()函数
36
printf()函数
2530
第一步:
打开已有工程并运行
1、在C:
\ti\myprojects目录里面创建hellobios目录。
2、把C:
\ti\tutorial\sim64xx\hello1里的全部文件拷贝到这个新的目录下面。
3、如果CCS还没有启动,启动CCS环境,Setup里面设置为C64xxDeviceSimulator。
4、选择Project->
Open,打开这个工程,工程的项目文件目录为:
C:
\ti\myprojects\hellobios,项目名称是hello.pjt。
5、若提示以下错误,选择Browse,选择目录:
\ti\C6000\cgtools\lib\rts6400.lib,打开工程。
6、编译,运行工程,查看结果,应该是输出helloworld字符。
第二步:
评测stdio.h中输出函数put()的执行时间(周期数)
1、新建一个Profiler,选择Profiler->
StartNewSession,名称为MySession,确定。
2、出现Session窗口,选择Range栏。
如下所示,出现hello.out。
3、用鼠标拖曳,高亮put()函数,如下所示:
4、按住鼠标,拖曳到Range窗口里面,出现:
5、重新Load程序,运行,得到运行结果如下:
6、结论:
采用put()函数输出一次的指令周期数是:
1700。
7、采用同样方法,测试printf()函数的指令周期数目:
8、记录put()函数和printf()函数需要的指令周期数到表格,用来和下面实验的结果对比。
第三步:
编辑源代码
1、在CCS里,关闭hello.c窗口。
2、用WindowsExplorer把C:
\ti\tutorial\sim64xx\hello2目录里的hello.c文件拷贝到C:
\ti\myprojects\hellobios目录。
按Yes覆盖原来已经存在的hello.c文件。
hello2例中采用DSP/BIOS函数来替代hello1例中的标准C函数的put()输出函数。
3、双击hello.c文件,在ProjectView窗口打开源文件。
4、注意新代码的几点问题:
#include<
std.h>
log.h>
#include"
hellocfg.h"
Voidmain()
{LOG_printf(&
trace,"
helloworld!
"
);
/*fallintoDSP/BIOSidleloop*/
return;
}
5、hello.c文件首先包含了std.h和log.h两个头文件。
程序如果想使用DSP/BIOSAPI那它必须包含std.h文件以及程序中用到的模块的对应头文件。
log.h头文件中定义了LOG_Obj结构以及LOG模块用的API函数的声明。
std.h文件必须在其它的DSP/BIOS模块头文件之前声明。
其它模块的头文件声明顺序不重要。
6、代码接下来要包含hellocfg.h头文件,这个文件在创建并保存DSP/BIOS配置的时候创建的。
下一个步骤我们就来创建这个文件。
这个文件包含了配置文件夹里面的DSP/BIOSobjects的外部声明。
7、hellocfg.h文件也包含了配置文件里定义的DSP/BIOS模块的头文件。
既然std.h和log.h文件都会被hellocfg.h文件引用,那么hello.c文件的头两行时间上是冗余的。
但是这样也不会有任何问题。
8、调用LOG_printf的代码实际上是传递LOGobject对象(&
trace)和helloworld消息的地址。
9、最后main()函数返回,这个函数导致程序进入DSP/BIOS的Idle循环。
在这个循环中,DSP/BIOS等待线程,例如软件中断和硬件中断发生。
在该例中,没有其它线程发生,所以会一直处于IDLE状态。
第四步:
创建DSP/BIOS的配置文件
1、选择File->
New->
DSP/BIOSConfig。
2、选择一个目标模板,根据芯片选择,我们选c64xx.cdb,然后按OK。
观察configuration窗口,左边窗口是模块的列表,可以通过点击模块的“+”号打开下级目录,也可以按右键新建一个对象或查看一个建立好的对象的属性。
3、点击Instrumentation目录左侧的+号,显示模块的列表。
4、邮局选择LOG—EventLogMannger然后右击选择InsertLOG。
这个步骤是创建一个LOG对象,名称为LOG0。
5、右键选中LOG0对象,然后右击选择Rename。
把LOG对象改名为trace.
6、如果你在使用软件仿真器,需要设置RTDX模式为Simulator。
选择RTDX—Real-TimeDataExchangeSettings,右键,选择属性,打开对话框:
将RTDXMode设定为Simulator即可。
如果有目标板,可以选择JTAG。
7、选择File->
Save。
保存到当前目录(通常是C:
\ti\myprojects\hellobios)命名为hello.cdb,保存这个配置后,会生成以下6个文件:
Hello.cdb保存配置的内容
Hellocfg.cmd链接command文件
Hellocfg.h包括DSP/BIOS模块头文件和配置文件中用到的外部对象、变量的声明
Hellocfg.s62DSP/BIOS设置的汇编语言源文件
Hellocfg.h62Hellocfg.s62引用到的汇编语言源文件
Hellocfg_c.cChipSupportLibrary(CSL)代码结构和设置
第五步:
添加DSP/BIOS文件到工程项目
1、选择Project->
AddFilestoProject,在Filesoftype栏目里选择ConfigurationFile(*.cdb),选中hello.cdb文件后,点Open。
注意添加后,hello.cdb出现在PorjectView窗格下目录DSP/BIOSConfig里。
此外,CCS自动添加Hellocfg.s62和Hellocfg_c.c文件到生成的目录下。
2、输出文件名必须和.cdb文件一致。
可以通过Project->
BuildOptions打开Linker标签查看,确认OutputFilename内容是.\Debug\hello.out,按OK确定。
3、再次选择Project->
AddFilestoProject,选对LinkerCommandFile(*.cmd)在Filesoftype下拉菜单,选择hellocfg.cmd文件,然后按Open。
4、如果看到警告,按Yes。
Hello.cmd文件被hellocfg.cmd文件替代,hellocfg.cmd文件是保存DSP/BIOS时生成的。
5、若没有警告,直接将hello.cmd文件从项目中删除。
6、你可以自己创建独立的cmd文件,但文件中必须引用DSP/BIOS的生成的配置cmd文件。
如:
-1hellocfg.cmd
YourCode......
7、从项目中删除vectors.asm源文件。
因为硬件中断可以通过DSP/BIOS设置,不需要单独的处理。
8、从项目中删除rts6400.lib文件。
这个库已经被hellocfg.cmd自动引用了。
9、选择Project->
Save保存对项目的更改。
建议在编译和运行项目前,先保存修改。
10、选择Project->
RebuildAll。
11、经过以上修改,项目变化为:
第六步:
在CCS的Simulator环境下测试工程
LoadProgram,选中hello.out,确定。
2、选择DSP/BIOS->
MessageLog,出现窗口:
3、在Log窗口按右键,选择属性,把输出文件指定到hello.txt,用来保存结果,便于以后查看。
4、选择Debug->
GoMain,然后F10,单步运行。
观察Log窗口的输出。
5、在Log窗口,按右键选择close,关闭窗口。
6、重新Load程序,按F4。
7、运行程序,等待一会儿,再按结束,中止程序运行。
8、File->
Open,然后在Debug目录中选择hello.txt,打开查看,内容和窗口的输出是一样的,都是helloworld!
第七步:
评估DSP/BIOS输出函数LOG_printf()的执行时间(周期数)
在这个步骤中,我们利用CCS的Profiling工具来评估LOG_printf()函数需要的指令周期数目,并且和printf()和put()函数对比。
ReloadProgram。
2、选择Profiler->
StartNewSession,弹出Prolilersession窗口,接受默认的名称MySession,确认。
如果出现错误,可以禁用RTDX功能。
3、在MySession的窗口中,选择Ranges选项。
4、双击hello.c文件,在ProjectView中打开源文件。
5、高亮调用LOG_printf函数的语句。
6、用鼠标拖曳到MySessionProfile窗口中。
7、MySessionProfile窗口得到如下设置。
时间的行号(line28)可能会有所不同。
8、按下“Run”按钮,或按F5运行程序。
9、在MySessionProfile窗口,观察Incl.Totalcolumn.(由于这个函数只执行一次,所以Total、Maximum和Minimum是相同的)
TheIncl.Total的含义:
这个参数是用来表示从汇编指令执行到这一行的开始到执行结束所需要的指令周期数目。
比较LOG_printf()函数和puts()函数的指令周期数目。
结论:
经过对比发现,LOG_printf()函数比puts()函数的效率高很多。
实际的指令周期数目和DSP芯片的型号有关。
调用LOG_printf()函数效率高的原因是字符串的格式化工作在主机(PC)完成,而不是目标板(DSP)上完成,所以说,LOG_printf()函数效率非常高。
1、打开已有的HelloWorld工程,评估stdio.h的运行效率,即put()函数的性能;
2、在HelloWorld基础上,创建一个基于DSP/BIOS的HelloWorld工程;
3、评估DSP/BIOS的输出函数性能,即LOG_printf()函数运行的指令周期。
1)打开已有工程并运行
对hello.pjt编译并运行:
2)评测stdio.h中输出函数put()的执行时间
MySession窗口
将put()函数拉人ranges中:
重新Load程序,运行,得到运行结果如下:
采用以上方法,测试printf()函数的指令周期:
将put()语句改成printf()语句,然后拉人ranges中重新Load,得到结果如下:
采用printf()函数输出一次的指令周期数是:
2530。
3)编辑源代码
4)创建DSP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 技术 实验 报告