“计算机组成原理专题实验”的教学改革
2013-05-03姜欣宁
姜欣宁,陈 宇
“计算机组成原理”课程是计算机专业的一门核心课程,它在整个专业课程中起了承前启后的作用,所以它非常重要,但它的内容比较抽象,学好不易,必须经过训练,通过实践环节,才能理清一些似是而非的概念,真正掌握一个计算机系统的内在运行机制,为后续课程打下坚实的基础。
“计算机组成原理专题实验”是为计算机专业大三学生开设的一门实验课程;从2007年开始,针对本校计算机系的学生,我们对该课程的内容进行了改革:让学生独立地完成一台计算机系统(模型机)的设计及电路的调试;把原来以“验证型”为主的实验改为以“设计型”为主的内容[1-2]。这样,使得相应的教学方式也发生了大的变化,对学生的思考方式和实验要求提出了新的要求。这种教学模式与当今高速发展的计算机技术相适应,能够培养学生的自主创新能力和实际的“动手”能力,满足他们不断提高的对知识和技术的需求。然而,在实践过程中,深感让学生独立完成一个系统的设计及电路实现有较大的困难和挑战,因此又结合多年的思考和实践,开发出了一个可行的“系统的设计方法”及相应的学习方法,以便学生按照此思路进行设计,达到事半功倍之效。经过多年的实践,收到了良好的教学效果。
1 课程设计的基本思路
为了让学生真正体会一台计算机系统的组成及其内在运行机制,需要让学生在一门专题实验课上完成一个计算机系统(模型机)的设计和调试,但是实现这一目标有一定的难度,主要受到课时(32学时)、相关知识技能的欠缺,以及学生基础水平、实践经验不足等的限制,另外,国外教科书上的教学方法和内容也有局限性,不能完全适合我们的教学计划[3-6]。为了开发一个有效的“设计方法”作为指导,来达到教学目的,思考了几个要点:
(1)以教科书上的基本概念为基础,反映国际上先进的设计理念和技术,参考其他信息来源及实际经验。
(2)根据学生以往实践过程中的情况来设计实验。
(3)以学习和掌握构建一台计算机主机(模型机)的方法为主 ,编程技巧为辅。
(4)以学习和掌握实现一台计算机主机系统(模型机)为主要内容,不强调技术上的复杂性。
(5)实验以体现“硬件”实验特征为主,以弥补学生这一方面的不足。
(6)强调设计过程的“完整性”、“简洁性”、“有效性”和“易读性”。
(7)概念和方法要从多个角度重复叙述。
2 系统设计的方法(方案)
对于一个计算机系统的设计,若采用“自顶向下设计”方法,它要求学生对底层部件非常熟悉,而用“自底向上设计”方法,学生难以对系统整体把握,所以,采取“自顶向下”和“自底向上”开发方法的结合:
(1)首先让学生熟悉底层模块的设计,如寄存器模块的设计、运算器模块的设计、时序电路的设计、控制器的设计等基本硬件底层模块的设计,这样,既掌握了基本硬件模块的设计,也熟悉了硬件描述语言的用法(因为学生在这门课前还未接触过硬件描述语言)。
(2)进行系统(硬件)的设计要熟悉总体结构,如,可以从不同的角度来看,计算机结构一般有3种类型:模块结构、控制结构和总线结构。这一步使学生对一个计算机系统有一个整体的概念,同时对构成系统的各模块进行分析,理解总线和数据通路的概念,从不同的角度来理解一个计算机系统,从而加深对计算机系统结构的认识。
(3)要求学生进行指令集的设计,包括指令格式设计规范、每一条指令及所涉及的功能部件的描述、理解CISC/RISC指令系统(汇编和机器码之间的对应关系)。
(4)算法状态机 (ASM)的利用。ASM图是描述数字系统控制算法的流程图,它是用一些特定符号按规定的连接方式来描述数字系统的功能。应用ASM图设计数字系统,可以很容易将语言描述的设计问题变成时序流程图的描述,只要描述逻辑设计问题的时序流程图一旦形成,状态函数和输出函数就容易获得,从而得出相应的硬件电路。ASM图表面上与通常的软件流程图非常相似,但ASM图表示事件的精确时间间隔序列,而一般软件流程图只表示事件序列,没有时间概念,这是两者的根本差别。为了用ASM图描述数字系统的工作过程,要首先研究ASM图示符号。ASM图有3种基本符号:状态框,判断框和条件输出框。利用状态图可以清楚地反映出系统中的各种时序等关系,也便于系统调试时的故障检测。
(5)系统方案设计。在系统的设计过程中,与以往的实验不同,增加了一个环节,即系统方案的设计,它是在对底层模块设计完成后安排的,这一个环节非常重要,它需要设计者对整个系统的设计和实现的各部分都要考虑到,所以,虽然花费较多的时间,但学生对系统的设计思路、结构和分工有了一个清晰的认识,对顶层实体与底层各模块的关系可以整体把握,也为后续调试提供依据。实践证明这一步很有必要[7]。
(6)开发平台和工具。开发平台选用当时流行的EDA软件,Altera公司的QUARTUSⅡ5.0,它操作简单、使用方便,适合学生进行课程设计。芯片选用性价比高的FPGA(现场可编程门阵列)的芯片:Cyclone系列的EP1C6Q240C8,然后设计工具选用硬件描述语言(VHDL)进行项目的描述,因为它功能非常强大,不仅适合仿真,也适合设计具体的硬件电路设计(行为/结构进行描述)。对于构建一个较大的系统,利用硬件描述语言(VHDL)加FPGA的方式进行系统的设计,大大提高了效率和可靠性[8-9]
3 系统的具体实现过程
3.1 制定一个计算机系统开发的整体规划
由于是第一次进行“系统性”的设计,所以在设计中学生的反应往往是不知如何下手。为解决“入手难”的问题,可以先从大的方面进行考虑,即 “自顶向下”的方法。因为学生已经过“底层的训练”,可以从总体任务分出几个方面来考虑:要实现的计算机系统的规模和功能、个人还是小组来完成、对开发工具的掌握程度、开发的方法和步骤等。这一步指引学生通过调研查找资料,要求学生对每一个框的任务进行调研和思考,使头脑中形成一个总体的概念和规划,从而解决如何“准备”设计的问题,即解决“入手”难的问题。系统开发的整体规划见图1。
图1 系统开发的整体规划图
3.2 系统硬件电路的设计和实现
(1)计算机的整机工作过程可以看成是信息流在寄存器和信号线的有序的流动,所以,要构建载体,即完成各种数据通路的设计和实现,包括取指令的数据通路、各种取操作数的数据通路(多用图表描述)。各种数据通路的设计可以依据每一条(类)指令的功能。最后,构建与优化整体数据通路。
(2)完成控制器(组合或微程序)的设计和实现(用状态图描述)。重点理解控制器的输入输出关系,微操作与各种信号之间的关系,画出控制器微命令表,对仿真波形图进行分析。最后,进行带CPU(控制信号)的数据通路图的优化。
(3)时序电路模块的设计和实现。一般采用教科书上的三级时序,但对于不太复杂的模型机可以直接采用单个连续脉冲作为时序信号,依据不同的指令类型分配不同的节拍数[9]。
(4)主存储器的设计和实现。一般可以利用VHDL语言来实现,而实验开发板上都配有存储器,需要注意的是控制器与存储器本身的读写时序关系的配合。
(5)算术逻辑运算单元的设计和实现。可以考虑把乘除法、浮点运算等复杂功能,甚至通用寄存器放入其中,可以将它设计成多层次结构模块。
(6)总线的设计。这一步为了突出总线的概念。
3.3 指令集的设计和实现
RISC是英文“Reduced Instruction Set Computing”的缩写,中文意思是“精简指令集”,它是在CISC指令系统基础上发展起来的,相对于CISC型CPU,RISC型CPU精简了指令系统,大大增加了并行处理能力。RISC的指令格式统一,种类比较少,寻址方式也比复杂指令集少,所以处理速度就提高很多。
MIPS指令集属于RISC结构,它的格式规整、被广泛使用。学生可以以此为参照,在它的基础上进行适当的修改和优化,快速地掌握它。具体包括操作指令格式设计、指令操作码的分配、各汇编符号、机器码与各控制信号的位置与功能对应关系表等。注意指令的描述与所涉及的功能部件的对应。
3.4 描述一个计算机主机系统软件硬件之间的关系及设计流程图
以上叙述了计算机主机系统的设计过程,在设计中涉及到计算机硬件的设计、指令集(底层软件)等内容,他们之间的关系比较复杂,要考虑的细节多,也容易引起混淆,为此,设计出一张关系表来帮助学生进行系统分析、把握整体的设计流程及软件和硬件之间的内在关系。在图中说明一个系统需要软件和硬件的支持,需要处理软件与硬件设计中的“协调”问题,并指出其中的“结合点”,见图2。
图2 “软件”与“硬件”之间的关系及设计流程图
3.5 系统实现(集成)方法的选择
系统的实现(集成)可以采用电路图连线的方法。系统的顶层由多个模块构成,模块内部由硬件描述语言构成。也可以采用完全软件编码(VHDL)方法实现[10-11]。
4 结束语
以上介绍的系统设计方法是一个循序渐进、逐步深入、不断完善的过程。通过使用它,让学生在有限的课时内实现一台完整的计算机模型机是完全可行的,它较好地解决了“难以下手”和“调试难”的问题,学生做完设计后,感觉设计一个计算机(模型机)系统并不是不可能的。也有的学生在学习了本设计方法后,受到启发,他们并没有严格地按照此方法,而是愿意参考更多的书籍的相关内容来形成自己的设计思路和方法(这也是我们提倡鼓励的),同样也取得了不错的效果。
本文中的设计方法与国外教材上介绍的设计方法比较,各有特色。国外的设计方法通常是建立在固定的硬件框架的基础上,学生通过单周期、多周期和固定的步骤(过程)进行系统设计,它的优点在于易于上手,思路、步骤也比较清楚,设计循序渐进,缺点是架构已基本固定,且偏向控制器的设计,学生的设计空间受到限制。本方法要求学生将项目看作一个完整系统来设计,优点是学生可以掌握一个系统的设计方法,整体性强,和教学内容相联系[12],可以发挥学生的想象空间,培养学生的自主创新能力,缺点是设计过程比较复杂(对于没有经过系统设计的学生而言),设计有一定的难度(通过小组的方式可以降低难度)。
(
)
[1]白明,张健.基于GER的计算机组成原理的仿真[J].实验技术与管理,2010,27(9):82-83.
[2]蒋本珊,王娟,洪杰.计算机组成原理改革初探[J].实验技术与管理,2007,26(12):270-271,272.
[3]Patterson D A,Hennessy J L.计算机组成和设计硬件/软件接口[M].郑纬民,译.北京:清华大学出版社,2003.
[4]Harris D M,Harris S L.数字设计和计算机体系结构[M].陈虎,译.北京:机械工业出版社,2009.
[5]Patt Y N .计算机系统概论[M].梁阿磊,译.北京:机械工业出版社,2009.
[6]汤志忠,扬春武.开放式实验CPU设计[M].北京:清华大学出版社,2007.
[7]Grout I.基于FPGA和CPLD的数字系统设计[M].黄以华,译.北京:电子工业出版社,2009.
[8]华清远见嵌入式培训中心.FPGA应用开发入门与典型实例[M].北京:人民邮电出版社,2008.
[9]王诚.计算机组成与设计实验指导书[M].北京:清华大学出版社,2008.
[10]Wolf W.基于FPGA的系统设计[M].闫敬文,译.北京:机械工业出版社,2006.
[11]曾繁泰,陈美金.VHDL程序设计[M].北京:机械工业出版社,2000.
[12]唐朔飞.计算机组成原理[M],北京:高等教育出版社,2008.