DSP实验
更新时间:2023-09-18 03:15:01 阅读量: 幼儿教育 文档下载
DSP系统结构
实验报告
姓名: 刘 成 专业: 电子与通信工程 班级: 35 班 学号: 2014170370 指导教师: 齐 美 彬 学院: 计算机与信息学院 时间: 2015-11
实验一 汇编语言程序设计
一、实验目的
1.熟悉DSP集成开发环境CCS 6000的使用方法。 2.熟悉TMS320C6437 DSP优化的3个层次。 二、实验条件
计算机(安装CCS3.3)、SEED-XDS510PLUS仿真器、DM6437实验平台 三、实验内容
以矢量点积算法为例,掌握C语言、线性汇编、并行汇编及软件流水汇编代码的优化原理、方法及步骤,并按实验步骤完成实验。
1、C语言代码
int DSP_dotprodc( const short *m, const short *n, int count) {
int i;
int prod, sum = 0; #ifndef NOASSUME
_nassert((int)m % 8 == 0); /* Double-word aligned */ _nassert((int)n % 8 == 0); /* Double-word aligned */ _nassert((int)m % 16 != (int)n % 16); /* In different banks */ #pragma MUST_ITERATE(4,,4); /* count >= 4, mult of 4 */ #endif
for (i = 0; i < count; i++) {
prod = m[i] * n[i]; sum += prod; }
return sum; } 2、线性汇编代码
.text
.global _DSP_dotprodsa
_DSP_dotprodsa: .cproc A_m, B_n, A_count .no_mdep
.reg A_reg1:A_reg0, B_reg1:B_reg0
.reg A_prod, B_prod, A_sum, B_sum, A_i ZERO A_sum ZERO B_sum
SHRU A_count, 2, A_i SUB A_i, 2, A_i .mptr A_m, x + 0, 8 .mptr B_n, x + 8, 8 loop: .trip 8
LDDW .1 *A_m++, A_reg1:A_reg0 LDDW .2 *B_n++, B_reg1:B_reg0 DOTP2 A_reg1, B_reg1, A_prod DOTP2 B_reg0, A_reg0, B_prod ADD A_sum, A_prod, A_sum ADD B_sum, B_prod, B_sum BDEC loop, A_i
ADD A_sum, B_sum, A_sum .return A_sum .endproc
.end
3、并行汇编代码 .sect \.global _DSP_dotprod64 _DSP_dotprod64:
*==============SYMBOLIC REGISTER ASSIGNMENTS ===================== * .asg A4, A_m ; pointer to vector m .asg B4, B_n ; pointer to vector n
.asg A6, A_count ; number of elements in each vector .asg A0, A_i ; loop count .asg A16, A_sum ; partial sum a
.asg A17, A_prod ; sum of products a[i]*b[i]+a[i+1]*b[i+1] .asg B16, B_sum ; partial sum b
.asg B17, B_prod ; product sum a[i+2]*b[i+2]+a[i+3]*b[i+3] .asg A9, A_reg1 ; elements a[i+3] a[i+2] .asg A8, A_reg0 ; elements a[i+1] a[i] .asg B7, B_reg1 ; elements b[i+3] b[i+2] .asg B6, B_reg0 ; elements b[i+1] b[i]
.asg A4, A_sumt ; total sum a + b returned to caller
* =============== PIPE LOOP PROLOG ============================= * B .S2 loop ; prime loop
|| LDDW .D2T2 *B_n++, B_reg1:B_reg0 ; load b[i+3]...b[i] || LDDW .D1T1 *A_m++, A_reg1:A_reg0 ; load a[i+3]...a[i]
B .S2 loop ; prime loop
|| LDDW .D2T2 *B_n++, B_reg1:B_reg0 ; load b[i+3]...b[i] || LDDW .D1T1 *A_m++, A_reg1:A_reg0 ; load a[i+3]...a[i] || SHRU .S1 A_count, 2, A_i ; calc loop count || ZERO .L1 A_prod:A_sum || ZERO .L2 B_prod:B_sum
B .S1 loop ; prime loop
||[A_i] LDDW .D2T2 *B_n++, B_reg1:B_reg0 ; load b[i+3]...b[i] ||[A_i] LDDW .D1T1 *A_m++, A_reg1:A_reg0 ; load a[i+3]...a[i] || ZERO .L1 A_prod:A_sum ; added for branch- || ZERO .L2 B_prod:B_sum ; target-not-span
[A_i] BDEC .S1 loop, A_i ; prime loop
||[A_i] LDDW .D2T2 *B_n++, B_reg1:B_reg0 ; load b[i+3]...b[i] ||[A_i] LDDW .D1T1 *A_m++, A_reg1:A_reg0 ; load a[i+3]...a[i] || ZERO .L1 A_prod:A_sum ; added for branch- || ZERO .L2 B_prod:B_sum ; target-not-span
[A_i] BDEC .S1 loop, A_i ; prime loop
||[A_i] LDDW .D2T2 *B_n++, B_reg1:B_reg0 ; load b[i+3]...b[i] ||[A_i] LDDW .D1T1 *A_m++, A_reg1:A_reg0 ; load a[i+3]...a[i] || ZERO .L1 A_prod:A_sum ; added for branch- || ZERO .L2 B_prod:B_sum ; target-not-span
* ================== PIPE LOOP KERNEL ============================= * loop:
ADD .L2 B_sum, B_prod, B_sum ; sum += productb || ADD .L1 A_sum, A_prod, A_sum ; sum += producta ||[A_i] LDDW .D2T2 *B_n++, B_reg1:B_reg0 ; load b[i+3]...b[i] ||[A_i] LDDW .D1T1 *A_m++, A_reg1:A_reg0 ; load a[i+3]...a[i] || DOTP2 .M2X A_reg0, B_reg0, B_prod ; a[0]*b[0]+a[1]*b[1] || DOTP2 .M1X A_reg1, B_reg1, A_prod ; a[2]*b[2]+a[3]*b[3] ||[A_i] BDEC .S1 loop, A_i ; iterate loop
* ================== PIPE LOOP EPILOG ============================= *
RETNOP.S2 B3, 4 ; Return to caller ADD .L1X A_sum, B_sum, A_sumt ; final sum
.end
四、实验步骤
(1) 开机:打开计算机电源,进入Win XP系统,双击桌面上的CCS3.3图
标,选择open——DM6437 Little Endian Simulator ,进入DSP软件集成开发环境,或者选择open——c6437 510 plus进入DSP硬件集成开发环境(使用实验箱做实验,先连接好实验箱及仿真器等方可开机)。
(2) 编辑文件:选择File-New—Source File菜单(或使用其它文本编辑器)
编辑好C程序文件(*.c)、汇编程序文件(*.asm)、头文件(*.asm)及链接命令文件(*.cmd),并保存在D盘DSPLAB\\LAB1文件夹中。 (3) 创建工程项目:选择Project-New,出现—对话框,在project栏(第
一行)填写项目名称,并选定项目的位置(D:\\DSPLAB\\LAB1),然后单击“完成”按钮,这样就新建了一个工程项目,该项目用来管理各种文件,便于编译、调试。
注意:路径、文件夹、文件名中不能含有汉字,且第一个字母不能是数字。
(4) 添加文件:将编辑好的三个文件添加到刚建好的工程项目中,选择
Project-Add Files to Project,出现一个对话框,选择文件夹(D:\\DSPLAB\\LAB1)并选中C文件、汇编程序文件、头文件、cmd文件,单击“打开”按钮就将这四个文件添加到该工程中了。 注:此步骤可一次加入四个文件,也可重复四次,每次加入一个文件。
(5) 编译汇编程序:选择Project—Compile File,分别编译主程序及头文件,
修改程序中的错误,再编译,直到无错误出现。编译后的文件为OBJ文件。
(6) 链接:选择Project—Build或Rebuild All,链接各OBJ文件,若有错误
出现应修改错误(错误应在cmd文件中),再链接,直到无错误出现。链接生成可执行的out文件。
(7) 下载out文件:选择File—Load Program,在debuge文件夹中选中out
文件(文件名与工程项目同名),单击“打开”按钮,这样out文件就下载到DSP中了。 (8) 调试:选择debuge—Step Into 单步执行代码或者选择debuge—Run连
续运行代码(debuge—Halt停止运行)。单步运行或运行结束后选择View-Memory和View-Registers-CPU Registers/Peripheral Regs查看存储器和寄存器中的数据。如果最后的结果有错误,则应查找原因修改程序并重复步骤5 ~ 步骤8,直到结果正确为止。
实验二 创新实验题(题目9)
一、实验任务及目的
任务:将yuv格式的图像数据转换到HSV中H空间,从而掌握C语言、汇编语言的优化。
目的:
1.熟悉DSP集成开发环境CCS 6000的使用方法。 2.熟悉TMS320C6437 DSP优化。
3.了解图像处理中将yuv格式的图像数据转换到HSV中H空间的方法,掌握yuv和HSV格式图像的组成原理,以及转化原理。 二、算法原理及程序优化方法 算法原理:
YUV 的格式是yuv420,若yuv的排列顺序如下:
Y1 Y2 Y3 Y4
Y5 Y6 Y7 Y8 U1 U2 V1 V2
则:还原出的RGB格式的像素为:y1+u1+v1->p1; y2+u1+v1->p2; y3+u2+v2->p3; y4+u2+v2->p4; y5+u1+v1->p5; y6+u1+v1->p6; y7+u2+v2->p7; y8+u2+v2->p8;
最后根据各p点的RGB值计算得出各个点的H分量值。 。 程序优化方法:修改原C语言程序中for循环语句中的算法实现部分,进行C语言的优化。 三、实验步骤
(1) 开机:打开计算机电源,进入Win XP系统,双击桌面上的CCS3.3图标,选择open——DM6437 Little Endian Simulator ,进入DSP软件集成开发环境,或者选择open——c6437 510 plus进入DSP硬件集成开发环境(使用实验箱做实验,先连接好实验箱及仿真器等方可开机)。
(2) 打开工程:选择project——open,将给定的工程打开。 (3) 根据.c文件编辑线性汇编文件保存(后缀为.sa) (4) 在主函数中调用线性汇编。
(5) 编译汇编程序:选择Project—Compile File,分别编译主程序及头文件,修改程序中的错误,再编译,直到无错误出现。编译后的文件为OBJ文件。
(6) 链接:选择Project—Build或Rebuild All,链接各OBJ文件,若有错误出现应修改错误(错误应在cmd文件中),再链接,直到无错误出现。链接生成可执行的out文件。
(7) 下载out文件:选择File—Load Program,在debuge文件夹中选中out文件(文件名与工程项目同名),单击“打开”按钮,这样out文件就下载到DSP中了。 (8) 调试:选择debuge—Step Into 单步执行代码或者选择debuge—Run连续运行
代码(debuge—Halt停止运行)。单步运行或运行结束后选择View-Memory和View-Registers-CPU Registers/Peripheral Regs查看存储器和寄存器中的数据。如果最后的结果有错误,则应查找原因修改程序并重复步骤5 ~ 步骤8,直到结果正确为止。 四、实验结果
原程序运行结果:
软件仿真耗时,Cost:236.189285ms 硬件仿真耗时,Cost:198.438602ms 优化后程序运行结果:
软件仿真耗时,Cost:175.494308 ms
硬件仿真耗时,Cost:139.315048ms 最后优化的处理结果(图片) 原图像:
处理后的图像:
五、简要回答思考题
1、分析待优化函数主要耗时部分在哪里?
答:主要是在for循环部分耗时严重,合理优化for中的算法的运算部分,可以大大减少运算时间。 2、你是如何优化的?
答:修改for循环中算法部分,对原C语言程序进行C语言的优化。
六、优化程序 C语言优化程序:
/********************************************************************函数:convert_YUVtoH
功能:将yuv格式的图像数据转换到HSV中H空间 /************************************************************************/
void convert_YUVtoH (unsigned char * restrict p_Y, unsigned char * restrict p_U,unsigned char * restrict p_V, unsigned char * restrict p_H) {
float temp,hue_c;
unsigned char R , G , B,max ,min; unsigned char *p_u_temp,*p_v_temp; unsigned char *p_malloc1, *p_malloc2; unsigned char *p_temp1, *p_temp2;
int i,j ;
p_malloc1=(unsigned char *)malloc(width*height*sizeof(unsigned char)); p_malloc2=(unsigned char *)malloc(width*height*sizeof(unsigned char)); p_u_temp=p_malloc1; p_v_temp=p_malloc2;
/**-- zhuan huan cheng yuv444 format --- **/
for(i=0; i { p_temp1=p_U+width/2*(i/2); p_temp2=p_V+width/2* (i/2); for(j=0;j *p_u_temp=*p_temp1; *(p_u_temp+1)=*p_temp1; *p_v_temp=*p_temp2; *(p_v_temp+1)=*p_temp2; p_temp1+=1; p_temp2+=1; p_u_temp+=2; p_v_temp+=2; } } p_u_temp=p_malloc1; p_v_temp=p_malloc2; #pragma MUST_ITERATE(101376, ,2) for(i=0;i { temp= (*p_Y)+((360*((* p_v_temp)-128))>>8); R=(temp>255)?255:temp; temp= (*p_Y)-((88*((* p_u_temp)-128))>>8)-((183*((* p_v_temp)-128))>>8); G=(temp>255)?255:temp; temp= (*p_Y)+((455*((* p_u_temp)-128))>>8); B=(temp>255)?255:temp; max=max_f(R,G,B); min=min_f(R,G,B); if (R==max) hue_c = ((float)_abs(G-B))/(max-min); else if (G==max) hue_c = 2 + ((float)(B-R))/(max-min); else hue_c = 4 + ((float)(R-G))/(max-min) ; hue_c = hue_c* 60 ; if (hue_c< 0) {hue_c = hue_c + 360 ; } *p_H=(unsigned char) (hue_c*255/360); } p_Y+=1; p_u_temp+=1; p_v_temp+=1; p_H+=1; free(p_malloc1); free(p_malloc2); }
正在阅读:
DSP实验09-18
电磁场与电磁波复习题(含答案)09-13
我的双面性格作文500字06-17
虚伪的个性签名02-11
生物除臭工艺设计03-24
2019高三生物上学期开学考试试题新人教版 新版 12-17
口译教学大纲05-10
门式钢管脚手架安全专项施工方案05-05
DWR框架的使用说明05-17
中外美术史欣赏 论文05-29
- 自动扶梯井顶板高支模架施工方案 - 图文
- 单片机水压检测与控制系统的设计(综合)
- 资源量和储量的类别划分
- 磨床试题-含答案
- 第一章 函数极限与连续
- 推荐软聚氯乙烯弹性料项目可行性研究报告(技术工艺+设备选型+财务概算+厂区规划)标准方案设计
- 2017-2018学年福建省厦门市高一下学期期末质量检测化学卷Word版含答案
- 西式面点 复习题(5)
- 徐承乾—-论文 - 图文
- 中国人民大学网络教育学院西方经济学作业2
- 掺气减蚀概念及优化 - 图文
- 马达加斯加国家语言 马语汉语音译资料(1640个单词)
- 中国文化概观复习题(1)
- 柜员岗复习题(1)
- 篮球知识试题集
- 建筑围护结构节能技术
- 2011021131+吴珍珍+日月明(识字)
- 如何悟道
- 糖水桃罐头工艺流程
- 刚体转动惯量的测定