DSP技术1 1Word文档下载推荐.docx
《DSP技术1 1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DSP技术1 1Word文档下载推荐.docx(40页珍藏版)》请在冰点文库上搜索。
![DSP技术1 1Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/817e98ab-593a-4697-be15-dbd737888ab9/817e98ab-593a-4697-be15-dbd737888ab91.gif)
12
13
14
15
16
17
18
19
20
福建农林大学计算机与信息学院信息工程类实验报告
电子信息工程专业:
电子信息工程年级:
10级
姓名:
学号:
实验课程:
DSP单片机原理及应用
实验室号:
_田C513实验设备号:
25实验时间:
2013.10.18
指导教师签字:
成绩:
一、实验目的和要求
1.熟悉DSP软件开发环境CCS的使用。
2.熟悉CCS中的C语言编程。
3.了解C6000DSP的汇编语言。
二、主要仪器设备(实验用的软硬件环境)
安装了CCS2.0的计算机,采用simulator配置文件sim6201_simulator.cfg
三、实验内容
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对应的汇编代码,解释之。
四、操作方法与实验步骤
1)配置CCS
打开桌面程序“SetupCCS2('
C6000)”,采用simulator配置文件sim6201_simulator.cfg,配置完成后保存。
2)实验内容1操作步骤:
(1)打开CCS:
①打双击桌面程序:
SetupCCS2('
C6000),配置CCS,选C6xxx;
②配置好后,打开桌面程序:
CCS2('
C6000);
(2)打开工程文件:
①把文件夹tutorial\sim62xx\hello1拷贝到myproject下;
②单击菜单Project->
Open,打开hello.pjt,选择支持库rts6200.lib
(3)编译程序:
菜单Project->
build或rebuild
(4)加载程序:
菜单File->
LoadProgram,选择Debug下的.out文件装入目标板
(5)gomain:
菜单Debug->
gomain,执行到main()处暂停
(6)执行程序:
Debug->
Run
(7)设置断点:
Togglebreakpoint
(8)单步执行:
Step(两种:
C和汇编)
(9)观察变量:
菜单Edit->
Variable
(10)观察存储器:
Memory
(11)测试函数执行的CLK:
Profiler->
ViewClock
(12)混合代码显示:
View->
MixedSource/ASM
3)自行完成实验内容2的操作。
4)自行完成实验内容3的编程及编译、目标程序的加载和执行,观察c=a*b对应的汇编代码,并解释该汇编代码。
五、实验内容及实验数据记录
1、配置CCS
2、练习CCS的基本操作
1)打开工程
2)编译工程,加载程序
2)编译工程,编译通过后加载.out文件
3)单步运行,调试程序
4)设置断点
5)观察变量
6)观察存储器
7)测试函数clk的执行
2、volume1实验结果
3、结果
六、质疑、建议、问题讨论
对于实验一,由于只是熟悉dsp开发软件,所以比较简单。
需要注意的地方就是设置cpu时,一定要选择对cpu,这样后面就不会出错。
另外,由于编译器的不同,运行之前一定要先load.out文件,否则运行结果不会显示出来。
学号:
_田C513实验设备号:
2013.10.25
实验二C6000流水线和C运行时环境
2.熟悉C6000中的C运行时环境。
三、实验内容以及步骤
采用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)打开ccs6000的C运行时的环境。
2)打双击桌面程序:
3)配置好后,打开桌面程序:
4)把文件夹tutorial\sim62xx\hello1拷贝到myproject下;
5)单击菜单Project->
6)将汇编代码段加到hello.asm,再在holle.c中加入汇编子函数的C语言程序。
进行编译、加载生成.out文件,执行产生结果。
四、实验内容及实验数据记录
1)用汇编语言实现两个数组的乘法累加功能:
sop_asm.asm中实现函数intsop_asm(short*a,short*x,intn);
然后,手工优化汇编代码。
*2)写一个汇编语言子函数Mul32to64(unsignedinta,unsignedintb,void*p_64int),实现32bit乘以32bit结果不大于64bit的无符号整型数据的乘法。
五、实验程序或实验数据处理与分析
1)汇编子函数:
.global_sop_asm1
.text
_sop_asm1:
ZERO.D1A0;
A0存放结果
MV.S2B6,B0;
B0=n
LOOP:
LDH.D1T1*A4++,A5;
A5=a
LDH.D2T2*B4++,B6;
A6=x
NOP4
MPY.M1XA5,B6,A2
NOP
ADD.D1A0,A2,A0
SUB.L2B0,1,B0
[B0]B.S2LOOP
nop5
MV.L1A0,A4
.end
2)实验处理:
同样选好与此实验相关的cpu是最为关键的地方。
需要注意的是,虽然同样采用的是汇编,但是由于汇编与具体机器相关,所以其编写格式与语法和8086略有不同之处,所以一定要注意。
2013.11.01
实验三C6000代码优化
一.实验目的和要求
2.掌握CCS中的C语言编程。
3.熟悉C6000DSP的代码优化过程。
二.主要仪器设备(实验用的软硬件环境)
三,实验内容
1.采用simulator配置文件sim6201_simulator.cfg,写手工优化的sop_asm.asm程序:
在实验二的基础上实现16bit数组的乘法累加的函数,并手工优化和采用软件流水优化。
要求:
(1)使用LDW和MPY,MPYH指令;
对于C64可以使用扩展乘法指令。
(2)画出相关图和模迭代间隔表。
2.(选做)写一个汇编语言子函数Mul32to64(unsignedinta,unsignedintb,void*p_64int),实现32bit*32bit64bit的无符号整型数据的乘法;
3.(选做)采用simulator配置文件sim6701_simulator.cfg,写一个线形汇编实现的子函数,做复数数组求模,并找出模的最大值的位置和值。
复数的实部和虚部为short,求模的结果为unsignedint。
(提示:
使用INTSP指令把整数转化为浮点数后再开方。
)
四.操作方法与实验步骤
1.打开ccs运行环境;
2.将C:
/ti/tutorial/sim62xx/volume1复制到C:
/ti/myprojects中;
3.启动CCS环境,选择Project中Open,打开这个工程,工程项目文件目录为:
C:
/ti/myprojects/volume1,项目名称为volume.pjt;
4.若提示错误,选择Browse,选择目录:
/ti/C6000/cgtools/lib/rts6200.lib
5.打开工程;
6.打开volume.c以及volume.asm文件,进行编译、加载、执行;
7.将下面的程序段覆盖原来的volume1.c
/*主函数:
volume1.c*/
/***************************************************************************/
#include<
stdio.h>
#include"
volume.h"
/*Globaldeclarations*/
#definen10shorta[n],x[n];
intt;
/**========main========*/
voidmain()
{
inti;
for(i=0;
i<
n;
i++)
{
a[i]=2;
}
{
x[i]=i++;
t=load(a,x,n);
printf("
t=%d\n"
t);
};
7)将下面的优化代码段覆盖原先的volume.asm
优化:
load.asm
.global_load
.text
_load:
ZERO.D1A0;
||SUB.S2A6,7,B0
P0:
LDH.D1T1*A4++,A5
||LDH.D2T2*B4++,B6
P1:
||[B0]SUB.L2B0,1,B0
P2:
||[B0]B.S2P7
P3:
P4:
P5:
||MPY.M1XA5,B6,A2
P6:
||[B0]SUB.L2B0,1,B0
P7:
||MPY.M1XA5,B6,A2
||ADD.L1A0,A2,A0
MPY.M1XA5,B6,A2
||ADD.L1A0,A2,A0
||ADD.L1A0,A2,A0
||ADD.L1A0,A2,A0
ADD.L1A0,A2,A0
MV.L1A0,A4
bb3
nop5
;
return
.end
8)进行编译、加载、执行。
五.实验内容及实验数据记录
采用simulator配置文件sim6201_simulator.cfg,编写手工优化的.asm程序:
在volume1的load.asm基础上实现16bit数组的乘法累加的函数,并手工优化和采用软件流水优化。
(2)画出相关图并建立编排表。
六.实验程序或实验数据处理与分析
1)对覆盖后的程序进行编译:
2)编译完成后,程序没有出错,进行加载:
3)执行程序,运行结果为:
七.质疑、建议、问题讨论
对于编写代码来说,完成代码后最关键的地方就是优化,利用C6000汇编语言对C代码进行优化无疑是最好的办法。
但是仍需注意,对于寄存器的安排,以及语法错误(不能同时最同一个寄存器进行写操作等错误)。
田C513实验设备号:
2013.11.08
1.通过创建基于DSP/BIOS的HelloWorld工程实例,熟悉CCS环境下DSP/BIOS软件的创建和使用方法。
2.熟悉在CCS环境下对代码的运行效率和性能作出评估的工具和方法。
CCS2.2环境,C64XXDeviceSimulator。
三.实验内容
完成实验内容,运行成功,得到输出结果,填写以下表格,并作出对比分析。
运行一次所需要的指令周期数(单位:
个)
put()函数
LOG_prinrt()函数
printf()函数
1)打开已有工程并运行
(1)在C:
\ti\myprojects目录里面创建hellobios目录。
(2)把C:
\ti\tutorial\sim64xx\hello1里的全部文件拷贝到这个新的目录下面。
(3)如果CCS还没有启动,启动CCS环境,Setup里面设置为C64xxDeviceSimulator。
(4)选择Project->
Open,打开这个工程,工程的项目文件目录为:
\ti\myprojects\hellobios,项目名称是hello.pjt。
(5)若提示以下错误,选择Browse,选择目录:
\ti\C6000\cgtools\lib\rts6400.lib,打开工程。
(6)编译,运行工程,查看结果,应该是输出helloworld字符。
2)评测stdio.h中输出函数put()的执行时间(周期数)
a)新建一个Profiler,选择Profiler->
StartNewSession,名称为MySession,确定。
b)出现Session窗口,选择Range栏。
如下所示,出现hello.out。
c)用鼠标拖曳,高亮put()函数,如下所示:
d)按住鼠标,拖曳到Range窗口里面,出现:
e)重新Load程序,运行,得到运行结果如下:
f)结论:
采用put()函数输出一次的指令周期数是:
1700。
g)采用同样方法,测试printf()函数的指令周期数目:
h)记录put()函数和printf()函数需要的指令周期数到表格,用来和下面实验的结果对比。
3)编辑源代码
(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)注意新代码的几点问题:
std.h>
log.h>
hellocfg.h"
Voidmain()
{LOG_printf(&
trace,"
helloworld!
"
);
/*fallintoDSP/BIOSidleloop*/
return;
}
①hello.c文件首先包含了std.h和log.h两个头文件。
程序如果想使用DSP/BIOSAPI那它必须包含std.h文件以及程序中用到的模块的对应头文件。
log.h头文件中定义了LOG_Obj结构以及LOG模块用的API函数的声明。
std.h文件必须在其它的DSP/BIOS模块头文件之前声明。
其它模块的头文件声明顺序不重要。
②代码接下来要包含hellocfg.h头文件,这个文件在创建并保存DSP/BIOS配置的时候创建的。
下一个步骤我们就来创建这个文件。
这个文件包含了配置文件夹里面的DSP/BIOSobjects的外部声明。
hellocfg.h文件也包含了配置文件里定义的DSP/BIOS模块的头文件。
既然std.h和log.h文件都会被hellocfg.h文件引用,那么hello.c文件的头两行时间上是冗余的。
但是这样也不会有任何问题。
③调用LOG_printf的代码实际上是传递LOGobject对象(&
trace)和helloworld消息的地址。
④最后main()函数返回,这个函数导致程序进入DSP/BIOS的Idle循环。
在这个循环中,DSP/BIOS等待线程,例如软件中断和硬件中断发生。
在该例中,没有其它线程发生,所以会一直处于IDLE状态。
4)创建DSP/BIOS的配置文件
(1)选择File->
New->
DSP/BIOSConfig。
(2)选择一个目标模板,根据芯片选择,我们选c64xx.cdb,然后按OK。
观察configuration窗口,左边窗口是模块的列表,可以通过点击模块的“+”号打开下级目录,也可以按右键新建一个对象或查看一个建立好的对象的属性。
(3)点击Instrumentation目录左侧的+号,显示模块的列表。
(4)邮局选择LOG—EventLogMannger然后右击选择InsertLOG。
这个步骤是创建一个LOG对象,名称为LOG0。
a)右键选中LOG0对象,然后右击选择Rename。
把LOG对象改名为trace.
b)如果你在使用软件仿真器,需要设置RTDX模式为Simulator。
选择RTDX—Real-TimeDataExchangeSettings,右键,选择属性,打开对话框。
将RTDXMode设定为Simulator即可。
如果有目标板,可以选择JTAG。
c)选择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)代码结构和设置
5)添加DSP/BIOS文件到工程项目
(1)选择Project->
AddFilestoProject,在Filesoftype栏目里选择ConfigurationFile(*.cdb),选中hello.cdb文件后,点Open。
注意添加后,hello.cdb出现在PorjectView窗格下目录DSP/BIOSConfig里。
此外,CCS自动添加Hellocfg.s62和Hellocfg_c.c文件到生成的目录下。