北京理工大学远程教育学院2018-2019年第二学期
《DSP原理及应用》期末大作业
教学站 学号 姓名 成绩
C6000实验1:汇编语言、体系结构和CCS
采用simulator配置文件sim6201_simulator.cfg
1. 新建一个project,把tutorial\sim62xx\hello1的文件添加进去,完成其功能。练习CCS的基本操作:加载程序、go main、执行程序、设置断点、单步执行、观察变量、观察存储器、测试函数执行的CLK、混合代码显示。
2. 打开tutorial\sim62xx\volume1的项目文件,完成图形方式观察变量、设置探点、GEL控制变量、FILE IO、动画显示输入输出的功能。然后单步执行load.asm:如何被C代码代码调用、观察寄存器的变化、测试函数执行时间、如何循环和返回C代码。
3. 解释如何在C6201上实现32bit int乘32bit int, 结果是32 bit int的过程:在刚才的hello1中设置3个全局变量int a = 0x10008; int b = 56; int c;在main函数中执行语句 c = a * b; build后加载执行程序, 混合代码显示 c = a*b对应的汇编代码,解释之。
4. Hello1中添加1个C文件sop_c.c ,其中有一个矢量乘的子函数sop(short * a, short * x, int * y, int n),然后在main函数中调用。不选择任何优化选项。用混合代码显示,在汇编层次执行sop子函数,观察调用、执行和返回的过程。
奥鹏在线离线论文作业答案请添加:opzy666
C6000实验2:C6000流水线和C运行时环境
采用simulator配置文件sim6201_simulator.cfg
1. 用汇编语言实现两个数组的乘法累加功能: sop_asm.asm中实现函数int sop_asm(short * a, short * x, int n);然后,手工优化汇编代码;
2. C调用汇编函数,汇编函数调用c函数:
在main函数中调用汇编实现的函数addarr3, 在addarr3中调用C子函数addarr2.
addarr3(int * arr1, int * arr2, int * arr3, int * arr4, int n) 是汇编函数,其功能为3个数组的对应位置相加,结果放在arr4[n]中;
汇编函数addarr3中调用C的子函数,它把arr1和arr2相加放到arr3[n]中;
addarr2(int * arr1, int * arr2, int * arr3, int n)
C6000实验3:DSP/BIOS
采用simulator配置文件sim6201_simulator.cfg
1. 在volume2的基础上添加一个中断4,并写中断4的服务函数,每发生一次中断把计数器加1。simulator 中,利用pin connect仿真中断;
2. 在实验1的基础上添加一个任务TSK1,优先级为3,其服务函数采用for(){}的结构,该任务每3ms执行一次。
3. 在实验2的基础上添加一个idle线程,观察idle线程的函数每ms执行多少次;
4. 在实验2的基础上添加一个任务TSK2,优先级为4,其服务函数采用for(){}的结构,该任务每2ms执行一次。在第6ms、12ms、18ms….等时刻时,分析TSK1和TSK2的任务切换过程。
奥鹏在线离线论文作业答案请添加:opzy666
C6000实验4:C6000代码优化
1. 采用simulator配置文件sim6201_simulator.cfg
写手工优化的.asm程序:在volume1的load.asm基础上实现16bit数组的乘法累加的函数,并手工优化和采用软件流水优化;要求:
(1)使用LDW和MPY,MPYH指令;对于C64可以使用扩展乘法指令。
(2)画出相关图和模迭代间隔表
2. 采用simulator配置文件sim6701_simulator.cfg .
写一个线形汇编实现的子函数,做复数数组求模,并找出模的最大值的位置和值。复数的实部和虚部为short,求模的结果为unsigned int;
提示:使用INTSP指令把整数转化为浮点数后再开方;奥鹏在线离线论文作业答案请添加:opzy666