许海杰,刘 升
计算机组成原理是计算机学科的专业课程,也是全国研究生招生的统考课程.该课程的教学目的是使学生理解计算机各个部件的工作原理,建立计算机的整机概念,从而具备计算机系统整机和部件的分析和设计能力.该课程不仅涉及软件和硬件方面的大量知识,而且内容比较抽象,因此实验教学环节十分重要.
计算机组成原理实验教学主要是使用配套的实验教学平台.国内有多家科教仪器厂研制了计算机组成原理课程配套的实验平台.尽管这些实验平台由不同厂家生产,但工作原理和实现方法却基本相同,都是由单片机结合FPGA或者CPLD作为核心控制单元,实现计算机组成部分功能的模拟.目前实验平台存在的主要问题是不能真实反映实际计算机的工作原理,使得很多重要的实验无法开展.
近年来,计算机组成原理实验教学的研究现状主要集中在以下三个方面.
一是关于应用FPGA和EDA技术进行计算机组成实验教学的探讨.例如应用FPGA和EDA技术设计运算器和微控制器[1]、简单ALU设计[2]、组合逻辑控制器的设计[3]、教学平台的开发[4],以及FPGA结合外围接口芯片,实现了一个基于MIPS处理器的计数器设计[5]等.
二是关于应用虚拟仿真技术仿真计算机组成原理的探讨.例如算术/逻辑运算实验的仿真[6],基于客户端技术的计算机组成原理虚拟实验系统设计[7],研发指令级、微体系级仿真系统以及三大部件实验的仿真软件,并将该仿真软件移植到智能手机平台,更加方便学生随时随地做实验[8].
三是关于教学方法改革方面的探讨,其主要特点是结合了现代教学手段和通讯技术.例如提出了以问题为导向,兼顾自顶向下和自底向上优点的计算机组成原理实验教学改革方案[9];依托新技术,在智能手机上建设移动辅助教学一体化平台,建设计算机组成原理实验微信公众平台,实现实验箱配套的虚拟仿真系统[10-11].
本文在分析计算机组成原理实验平台在实验教学中存在的不足的基础上,讨论了EDA技术和虚拟实验系统应用于计算机组成原理实验的不足,提出了通过结合程序设计技术、当前流行计算机的系统架构、工作原理来弥补目前计算机组成原理实验平台的不足,从而满足计算机组成原理实验教学的需要.
高校使用计算机组成原理实验平台开设的主要实验项目有:运算器实验、存储器实验、数据通路实验、总线控制实验、微程序控制器实验、CPU组成、IO接口实验等.这些实验平台都有配套的实验指导书,实验指导书提供了详细的实验步骤.这些实验平台的使用不仅减轻了教师备课和准备实验的工作量,也简化了学生做实验的流程,提高了学生做实验的效率.
尽管不同的厂家的实验平台完成的实验项目大致相同,但每个厂家的实验仪的设计原理和结构却存在一定的差异性.例如运算器的设计,部分实验平台使用多片74LS181芯片组成ALU,部分实验平台使用FPGA、CPLD或者单片机来模拟ALU运算单元.控制器都是由单片机或者CPLD等模拟实现,再结合存储器、寄存器、输入(开关或者按键)、输出(LED和液晶屏)和时序电路,通过总线互连实现一台简易计算机的设计.有的实验平台还配备了上位机软件,上位机软件通过串口和实验箱传输数据和指令,上位机软件界面上可以看到数据通路图,以及指令总线、ALU总线、IO总线和控制器内部的微总线上的数据传输过程.例如图1所示的简单模型机数据通路图,实验中每个寄存器的数据、数据通路、控制信号和机器指令对应的微操作等都能够清晰地看到.通过实验,帮助学生理解指令的执行过程,提高了计算机的感性认识.但计算机组成原理实验平台只是简单的对计算机的工作原理进行模拟,在基本满足实验教学的同时,存在着部分课程内容的实验不能开设、不能体现计算机组成原理方面的先进技术和不能扩展等不足.
图1 STAR COP2018实验箱的简单模型机实验提供的数据通路图
(1)部分实验不能开设,不能体现最新的计算机组成技术,满足不了整个计算机组成原理教学需要.对照计算机组成原理课程内容和开设的主要实验项目后发现,“定点数和浮点数在计算机内的表示”这一章的内容没有安排实验,高速缓存Cache、动态存储器DRAM、虚拟存储等知识点的实验也不能开设.但这些知识在计算机组成中是非常重要的,在考研和计算机应用时都经常会涉及.因为实验平台只是用单片机和FPGA模拟简单的计算机功能,因而无法开展这些实验.另外由于计算机技术更新步伐的加快,实际使用的计算机系统比实验平台的模型机要复杂很多,一些计算机领域的关键技术,如复杂的总线结构、多核多线程的CPU设计、智能高速的多级Cache系统、动态睿频技术和复杂的架构及多种外围总线,这些在实验平台上都没有得到体现.总体来说,存在着实验模式单一、实验项目固定、实验平台和课本及实际的计算机技术脱节等问题.这些不足之处严重影响了预设的教学效果和学生创新能力的发展.
(2)和相关课程的实验环节割裂,实验平台结构固定,接线多,原理不透明,功能不能扩充.为了使学生了解计算机的基本工作原理和整机工作流程,建立整机工作的概念,传统的实验平台是通过单片机和FPGA等来模拟计算机的基本组成,这对计算机组成原理课程的教学很重要.但模拟的计算机系统架构和实际情况差别较大,影响了学生对计算机工作原理的正确认识.更突出的问题是传统的实验平台不能体现最新的计算机组成原理方面的技术.所有这些缺陷都需要在教学中进行弥补.
传统的实验平台在实验教学中还有另外一些弊端:首先是硬件架构固定,学生不能够扩充实验内容;其次是结构不透明,学生无法观察到实验平台的硬件结构、工作原理和实验过程中的硬件动作等.在学生做实验时,由于实验的过程、指令的执行流程和数据通路等透明度不高,造成了学生无法自主实现实验的扩展;实验平台各个模块之间的连接线较多,学生实验前要花费大量时间用于连线.这样的实验模式,主要侧重于实验结果对理论知识的简单验证,而忽略了实验原理和实验方法,实验对教学的促进效果有限.
EDA技术在计算机组成原理实验中的应用,就是应用FPGA或者CPLD的在线可编程特性实现所需要的逻辑功能,如ALU、控制器、指令系统等的设计.EDA技术的应用,使学生既熟悉了计算机的基本组成和工作原理,也提高了可编程逻辑器件的设计能力,而且设计的实验系统具有可重用性,从而方便学生开展综合性的设计实验.但对于那些没有开设EDA相关课程的学生而言,他们是没有能力应用EDA技术开展计算机组成原理实验的.所以把EDA技术应用于计算机组成原理课程的实验,实际上是侧重于FPGA技术的学习,设计的计算机的部件功能都比较简单[1-5],满足不了实际计算机组成原理的教学.
将虚拟技术应用于计算机组成原理实验教学,就是利用虚拟仿真技术模拟计算机各个组件的工作过程,帮助学生理解计算机的工作原理.目前虚拟实验教学中存在的不足之处主要体现在两个方面:一是虚拟仿真的软件设计不完善,不能真实地反映计算机的组成原理[6-8],达不到预期的教学效果;二是在教学过程中没有和实际的计算机系统相结合,没有做到虚实互补,教学效果较差.
针对国内计算机组成原理实验教学平台存在的不足,以及应用EDA技术和虚拟现实技术补充实验教学的局限性,结合多年教学探索的经验,探讨应用关联性课程的知识弥补实验平台结构固定、部分实验内容不能开设的不足;应用当前流行的微机架构来帮助学生建立完整的计算机组成整机概念,弥补实验平台不能真实反映计算机工作原理的不足.
计算机组成原理的课程内容可以认为介于软件和底层硬件之间,该课程和其他课程内容的关联性较强,可以用这些相关联的课程知识实现那些原来不能开设的实验.另外,我们教学中使用的微机,就是一个非常完善和先进的计算机系统.下文是几种有效的弥补实验平台不足的教学方法.
数在计算机中的表示和运算是计算机组成原理课程的基本内容,如定点数和浮点数的编码表示、字符的编码等.该课程后面的指令系统、处理机系统等都涉及到这方面的内容,在软件设计、计算机通信等方面都要用到.实验平台由于结构简单,不能处理复杂的数据类型,导致这些实验无法开展.实际上,教材中讨论的数值在计算机的表示方法,体现在使用的操作系统中数值的表示方法.在Window系统下,定点数值用补码表示,浮点数用IEEE格式表示,字符有ASCII码和Unicode两种方式表示,汉字采用汉字内码存储等.定点数的运算基于补码方式,浮点数的运算基于IEEE方式,和教材中的内容是一致的.
这部分课程的实验就是查看不同数据类型在计算机内存中的表示方式,验证教材中关于定点数和浮点数的有关理论知识.在计算机中只有读取不同的数在计算机内存中的存储形式,才能得到不同数据在计算机中的表示方法.而程序设计语言中,C或者C++中的指针给我们提供了访问数值在内存中的存储地址的途径.指针是一个特殊的变量,当它指向某一数值变量时,指针里面存储的数值就被解释为内存里的一个地址.而这个地址所指向的连续的几个单元就是这个数值变量在计算机内存储形式,就是这些数据在计算机中的表示方式.计算机组成原理课程中讨论的数在计算机中表示,就是高级语言中的定义的数据类型.
图2 “数据和文字在计算机内表示”实验界面
“数据与文字在计算机内的表示”实验界面如图2所示,实验通过C++的指针变量读取浮点数、整数和字符在内存中存储后的数据,验证了整数的补码表示方式、浮点数的IEEE754标准格式和字符的ASCII码的表示形式.通过实验,学生掌握了定点数、字符和浮点数的表示和存储方式和存储顺序,同时进一步加深了C++指针的使用.更重要的是通过实验使学生切身体会到课本上的知识在计算机中的实际应用.
高速缓存(Cache)技术和虚拟存储技术是计算机组成原理课程中重要的内容.Cache技术是用于解决CPU与内存之间的速度不匹配问题.虚拟存储技术把内存与外存有机地结合起来,得到一个容量很大的虚拟内存.这两个方面的实验,普通实验平台都不能实现.但我们教学用的微机都使用了Cache技术和虚拟存储技术,通过软件就可以看到CPU内部的多级Cache和虚拟内存的分页情况.另外如计算机的外围设备的工作方式、资源占用等,都可以在使用的计算机的属性中查看.图3中,通过查看网卡的资源,讲解端口地址、中断方式和内存地址来说明I/O管理方式和内存地址的分配.这样就能够加深学生关于计算机组成的感性认识,提高学生学习计算机组成原理课程的兴趣.
图3 查看外围设备(无线网卡)占用的资源
图4 实验室配备的微机主板架构图(Intel G41芯片组)
图4是计算机组成原理实验室配置的微机主机的架构图,利用该微机的架构和配置,结合计算机组成原理课程内容,讲解实际计算机的架构和工作原理,包括多核CPU、Cache、多级总线、总线桥、内存储器、外储存器、显示方式和外围设备等工作原理,使学生切身体会计算机组成原理的应用,再结合计算机的主板结构、内存条和硬盘的结构,建立计算机的整机概念,树立为发展我国计算机事业奋斗的信念.
图4的微机使用的芯片组,是典型的南北桥架构,而现在最新的芯片组已经将北桥集成到CPU内.如果实验室使用的是当前最新的芯片组,可以按照使用的微机架构进行讲解,使学生感受日新月异的计算机技术的更新.
目前高校配置的计算机组成原理实验系统,满足了计算机组成原理课程的基本实验教学要求.但目前实验平台存在一些不足之处,如部分课程内容的实验不能开设,实验平台结构固定,接线多,原理不透明,功能不能扩充等.
EDA技术应用于计算机组成原理实验教学,既提高了学生的FPGA设计能力,又帮助学生理解计算机组成原理的知识,但只适合那些开设了FPGA相关课程的学生.目前虚拟仿真技术只是简单模拟计算机的部分功能,同样不能满足实验教学的需要.但随着虚拟仿真技术的进步,未来将能够完整再现计算机的工作过程,真实反映计算机的工作原理,从而使计算机组成原理的实验教学获得更好的发展.
通过计算机组成课程和其他课程的关联性,结合目前使用的微机系统,完善计算机组成原理课程的实验.如应用C++的指针和编程环境,实现定点数、浮点数、字符等在计算机内的表示方式的实验课程,以及应用教学中的计算机的架构和配置讲解计算机的总线、Cache、外围设备和虚拟存储等内容,既能帮助学生建立整机概念,同时也让学生感受到计算机组成原理课程的内容在计算机系统的应用,进一步培养学生学习计算机组成原理的积极性和主动性,提高教学效果.