计算机组成原理实验教学方法改进

更新时间:2024-02-01 作者:用户投稿原创标记本站原创 点赞:3994 浏览:10557

摘 要 :目前的高校计算机课程教学正越来越偏重学生实践能力的培养,不少高校都设计了各类的实验教学课程来提高学生们对于计算机课程的理解.文章介绍了一项自主开展的基于FPGA开发板的CPU设计实验课程.总结了在课程的开展过程中所遇到的多项问题.并通过为学生提供更多的课程辅助工具及平台,使得课程的开展更加高效且符合学生们的需求,提高了学生们在此项课程中的学习效率.

关 键 词 : MIPS;计算机组成原理;CPU实验;教学改革;FPGA

中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2014)28-6704-03

1.概述

计算机学科是一门与实践结合非常紧密的课程,纯理论化的教学已经无法满足学生掌握计算机知识以及培养实践能力的需求了.因此,计算机实验课程在现有的计算机教学体系中所占的比例越来越高.该文针对所关注的计算机组成原理课程的教学方法,结合我们自己所开设的组成原理实践课程,针对目前教学中所存在的一些问题,对组成原理的实验课程方法作进一步的改进,使其更符合现在国内教学现状的需求,提高学生的实验效率.

2.CPU实验课程简介

我们的CPU实验课程主要目标为:指导学生设计出一个符合MIPS标准的CPU.从设计初级的数字逻辑器件出发,到实现一个完整的CPU,然后学生们可以围绕自己设计的CPU编写汇编器、高级语言编译器甚至简单的操作系统[1,2].让学生可以完整地了解计算机的运行原理.

参与本课程的学生所要实现的CPU使用如表1所示的31条指令,可以覆盖大部分简单程序的需求,其具体功能可以参考MIPS指令手册[3-5].

前两个实验比较简单,主要为了让学生能够熟悉整个的开发环境与流程,而且译码器和选择器也是将来在其他实验中所需要使用到的部件.从第三个实验开始,学生们将从简到难地一步步实现CPU中的各个部件的设计,并在第七个实验中最终完成一个完整的CPU.

3.实验教学存在的问题

3.1 testbench用例不完善

我们的CPU实验课程主要是对于硬件的设计,在硬件设计的过程中,testbench的编写占有着举足轻重的地位.而参与我们课程的学生绝大多数都是第一次接触硬件的设计,并且对于CPU的各个部件并没有一个良好的认识.所以对于这些参与到我们课程的学生来说,有相当一部分学生没有编写完备的testbench的能力与意识.在遇到相对复杂的模块时,学生们可能无法发现自己设计中的缺陷,这为以后的设计留下了一定的隐患.而且随着工程越来越大时,初期的错误就越来越难被发现.

3.2 学生开发机器运行缓慢

我们这门实验课是“口袋实验室”,参与到我们这项课程的同学都会将实验板带回宿舍作实验,由于,学生各自的计算机性能并不能完全满足CPU实验的设计需求.特别是随着工程的增大,在生成CPU后仿真的模型以及生成开发板所需的电路文件时,往往需要相当长的时间,并且这个过程在CPU的开发过程中往往需要执行很多次.而在此期间,学生往往只能等待而无法进行课程的学习,这会造成极大的时间浪费,降低学习效率的同时也很有可能增加学生的挫败感.

3.3 应用开发效率低下

CPU要执行有一定功能的程序才会显得有意义,我们的课程会鼓励学生在自己设计的CPU上开发一些小应用来显示CPU的实用性.我们目前的课程只提供了基于我们课程所涉及指令的汇编器,但对于参加我们课程的学生而言,使用汇编程序编写应用所需要的技巧与经验往往他们都不具备,这增加了小应用程序开发的难度,不利于学生们创意与想法的拓展.在我们的课程实践中,学生们往往都会选择开发一些类似的容易实现的应用程序,造成了应用程序的同质化.


3.4 没有统一的评分体系

任何课程都要面临的一个考核的问题.如何能够公平客观的评价学生在整个课程中的表现不仅对于参与课程的学生,对于此课程未来的发展都至关重要.目前我们的课程主要依赖学生的自行演示以及助教的手工查看.此方法不仅效率低下,每周都要花大量的时间在实验结果的检查上,而且由于参与检查的人数较多不容易保持评价标准的一致性.

目前我们的课程仍处于试验性阶段,参与的学生人数较少,若未来将此课程推广,手工检查的方式将无法满足课程的需求.

4.针对目前教学中的问题的解决方法

4.1 统一的部件接口和测试平台

通过给学生提供统一的部件接口,我们可以为学生提供统一的测试平台.在完成每个部件的编写后,学生们首先可以使用自己编写的testbench来验证自己设计的正确性,随后再由统一的测试平台来进一步确认部件的设计.这样就可以有效地避免由于testbench的不完善而造成的部件设计缺陷,提高了每次部件实验结果的可靠性,从而为接下来的实验进程打下良好的基础.

4.2 实验结果验证平台

统一的部件接口使得自动化测试以及自动评分成为了可能.学生们可以将自己编写的代码提交到我们的测试平台,运行统一的testbench,通过对比学生代码的运行结果和标准的测试结果就可以为学生们编写的部件提供一个客观合理的评价.

我们可以根据学生每次提交的正确率以及最终通过测试所用的提交次数来作为学生每次实验的评价参考.通过这种方法,我们可以不再逐个检查学生的实验结果,不仅可以免去每次人工检查实验结果的时间,也大大提高了每次实验评价的客观性.

4.3 CPU模拟器

我们的课程设计了一个基于部分MIPS指令集CPU的模拟器,其输入可以为自行编写的汇编程序,模拟器的运行的结果可以作为我们CPU运行结果的参照.同时我们课程中还拥有一个31条指令的汇编器,其输入同样为学生自行编写的汇编程序,而输出是二进制或十六进制的机器码文件,该文件可以导入到学生自己的CPU中运行.然后学生可以通过对比Modelsim的仿真结果与模拟器的运行结果来验证自己所设计的CPU的正确性.我们的课程也提供了一些小程序来帮助学生进行CPU的验证. 4.4 综合任务怎么写作器

大多数情况下,学生们所使用的PC的性能进行完整的综合与布线任务时往往都会花费很长的时间.我们可以为他们提供一个专门进行繁重计算任务的怎么写作器.

学生们可以提交自己的设计到怎么写作器上,通过怎么写作器来生成所需的电路文件,将此文件下载到本地后载入FPGA,完成下板工作.鉴于怎么写作器相对学生PC有着更出色的性能以及统一的工作环境,可以大大节省学生们完成一次设计修改的时间,提高学生们的开发效率.

4.5 合理使用C语言开发环境

高级语言可以大大降低程序的开发难度,而且通过完善的IDE(集成开发环境)可以更方便的确保程序的正确性.目前大部分学生所编写的小程序都不会超出我们课程所使用的指令集.GCC编译器在默认的配置下其编译出的MIPS指令集不会超出MIPS-I中的所有指令.经过多次测试,在多数情况下编译出的指令多并不会超出我们目前所使用的31条指令.对于那些不在我们31条指令集范围内的MIPS-I指令,其中有相当一部分指令是可以使用现有的指令组合来完成其功能的,我们仅需对GCC所编译出的汇编程序进行一定的修改即可使用.这为我们使用C语言编写开发板程序提供了很好的前提.

学生们可以首先使用C语言在现有的成熟IDE上进行编程,在验证了程序的正确性后使用GCC将C语言编译为MIPS-I的汇编程序,在对编译完成的汇编程序进行一些修改后可以使用我们课程提供的汇编器生成机器码来运行在学生自己设计的CPU上.

由于学生们对于C语言的熟悉程度要远高于MIPS的汇编指令,通过合理使用C语言进行编程,可以大大降低学生们编写应用程序的难度.

5.总结

对实验进行了诸多改进后,学生们在课程实验中的开发效率得到了明显的提升,这也使得学生们更有兴趣将精力投入到实验课程中.同时,在线平台的引入也减小了开展试验课程的人力投入,打下了推广该实验的基础.该文结合了我们现有CPU实验课程开展情况,针对实验课程中所出现的问题,提出了针对性的解决方案.这一系列的改进方案将学生从一些不必要的负担中解放出来,从而使得学生能够将更多的精力投入到计算机组成原理的学习中.这些方案的引入将会使得我们现有的课程变得更加具有可持续性,有利于将来此课程的进一步拓展.