1、厦门大学软件学院毕业设计(论文)开题报告 学生姓名 班级 学号 校内指导教师姓名 职称 所在单位 厦门大学软件学院 校外指导教师姓名 职称 毕业设计(论文)题 目 基于 ARM 体系的虚拟机的构架实现 毕业设计(论文)的 目标: 在晋通 PC 平台上实现 ARMv4 体系的虚拟机。随着时代的发展,嵌入式开发应用已经深入各个领域,前景十分看好。目前,嵌入式开发方式都以实际硬件为主,由于代价较高,不利于学习和开发调试,使得嵌入式开发门槛较高,难以普及。 虚拟机是一项应用广泛的技术,它 也早已在嵌入式开发中得到大量的应用。在嵌入式开发中,很多时候,我们只需要在虚拟机中调试我们的程序,就可以让程序很好
2、地移植到实际硬件平台上执行。 ARM 系列 CPU 是目前最成功和最广泛地应用于嵌入式的 CPU 系列。我们的目标是实现一个基础的 ARM 体系的虚拟机。 实现方法: 我们的实现方式遵循从内部到外围逐渐完善的方式迭代完成整个虚拟机的开发。 我们以虚拟 ARMv4 体系, ARM920T 核心的系统为目标。 我将完成 CPU 的译码与执行。 指令结构: ARMv4 包 括如下类型指令: 跳转指令 数据处理指令 状态寄存器转移指令 存储指令 协处理器指令 异常产生指令 部分指令分析图: 跳转指令: B, BL, BLX, BX 数据处理指令: AND, EOR, SUB, RSB, ADD, AD
3、C, SBC, RSC, TST, TEQ, CMP, CMN, ORR, MOV,BIC, MVN 乘法指令包括: 通常, 32 位结果: MUL, MLA 长, 64 位结果: SMULL, UMULL, SMLAL, UMLAL 算术指令包括: CLZ 信号指令: SWP, SWPB 状态寄 存器转移指令: CPSR, SPSR 存储指令 存取指令: LDR, STR 多次存取指令: LDM, STM 协处理器指令: CDP, LDC, MCR, MRC, STC 异常产生指令: SWI, BKPT 指令解析: 通过构造指令结构树,可以很方便地处理指令,并能使代码更好地文档化。 以指令
4、LDR 的解析为例: 首先: ARM 的每个指令 32 位。其中处与最高的 4位地址用于条件判断。 这样共有 16 种指令执行判断,如下: 我们可以在 C+中这样描述它 : struct cond_op UINT32 cond:4; UINT32 code:28; ; 这样,如果当前指令存储在变量中: 我们先这样: if( STAUS_REGISTER( cond =1 ) /在这里继续执行指令 else /不用执行指令 如果状态寄存器指示本条指令要被执行,我们就继续解析它。 为了判断是那一条指令,我们定义: struct sel_op UINT32 cond:4; UINT32 sel:4;
5、 UINT32 code:24; ; 通过 sel 来判断指令类型: ProcessInstruction(sel); ProcessInstruction 是一个分配函数,它以 sel 为索引,查找一个函数指针数组,并调用相应函数。 现在,我们可以知道它是存取指令: 这样我们构造出这样的结构体: struct ld_st_op UINT32 cond:4; UINT32 cons:2; UINT32 I:1; UINT32 P:1; UINT32 U:1; UINT32 B:1 UINT32 W:1; UINT32 L:1; UINT32 Rn:4; UINT32 Rd:4; UINT32
6、ams:12; ; 继续这个步骤: 最后得到: if(U=1) address=Register(Rn)+offset_12; else address=Register(Rn)-offset_12 Register(Rd)=ReadMemory(address); 以上演示了模拟 CPU 执行指令。 时间进度安排: 2007 年 2 月 -2007 年 3 月,理解毕业设计(论文)的任务,阅读 有关文献,熟悉开发工具,提出系统的总体设计框架。 2007 年 3 月底,完成毕业设计(论文)开题报告。 2007 年 4 月 -2007 年 5 月中旬,完成系统整体设计,进行系统的调试和文档整理工作。 2007 年 5 月中旬 -2007 年 6 月,撰写、修改毕业论文,并提交。 2007 年 6 月 12日 -14 日,进行论文答辩。 指导教师审核意见: 侯绍东 同学的毕业设计 “基于 ARM 体系的虚拟机的构架实现”,其目标是 在晋通PC 平台上实现 ARMv4 体系的虚拟机。经过一个多月的文献阅读和理解毕业设计任务,该同 学完成了开题报告。 所提交的开题报告,目标明确,实现方法可行,时间进度安排合理。同意开题。 校内指导教师签名: 年 月 日