丁红胜
摘要:面向计算机系统能力培养,分析计算机系统能力的培养与计算机组成原理教学的关系,提出以实现8位机为目标,采用EDA编程技术和模块化的设计思想,从设计运算器、存储器、控制器及综合实验框架等方面具体阐述实验过程,最后阐述该实验方法能够有效培养学生的计算机系统观,引导学生深层次理解计算机原理。
关键词:系统能力;实验模式;计算机组成原理
0.引言
计算机领域的发展壮大和多元化的发展趋势,给计算机教育带来巨大的挑战。CS2013(Computer Science Curricula 2013,ACM&IEEE)提出计算机科学本科毕业生应具备系统层次的视野,强调学生需从多层次的细节抽象思考问题,对计算机的理解应超越各种组件的实现细节,要从计算机系统结构和构建分析过程出发。在后PC时代,计算机资源多样化,各种类型的I/O设备千差万别,智能手机数量已经超过PC设备,计算机技术触及的应用领域更广更深,对软硬件的协同工作要求更高,从业人员所需的知识量急剧膨胀。在教学过程中,如何适应计算机技术发展的新趋势,培养适合社会发展需求的大学生,是高校面对的重大挑战。我国高校计算机科学与技术专业教指委从能力培养的角度强调对计算机学科学生的4项专业能力的培养,包括计算思维能力、程序分析与设计能力、算法分析与设计能力和计算机系统能力,其中尤以计算机系统能力的培养为主。
1.理解计算机系统能力培养与计算机组成原理关系
培养学生站在系统的高度分析和解决问题,提高其把握问题的全局能力,是提高学生能力培养的核心。具体而言,就是培养学生的计算机系统能力、计算思维能力,而不是灌输和堆砌知识。计算机系统能力是指计算机系统的分析、设计、开发、调优、检错能力,这种能力应该成为计算机专业学生的优势所在。计算机组成原理课程作为计算机专业研究生入学考试专业基础科目之一,是培养学生深入理解计算机基本工作原理、建立计算机系统概念的一门学科基础课程,是整个计算机学科专业和计算机系统的基础和核心。目前,国内一些高水平大学在如何提高学生的系统能力方面,做了很多卓有成效的工作。例如,南京大学袁春风教授以培养计算机系统设计能力为目标设计教学过程,优化课程群建设;清华大学刘卫东等人从课程体系方面进行了统一规划,建设了计算机系统综合实验平台,学生可以独立设计并完成一个完整、简单的计算机系统,以培养学生综合运用课程知识解决问题的能力;北航的高小鹏老师给出了以工程化方法培养学生计算机系统能力的方法。
计算机系统可以用分层模型描述,从低到高包含逻辑电路级、一般机器级、操作系统级、汇编语言级和高级语言级,一般机器级又可细分为微体系结构层和指令集体系结构层。面向计算机系统能力的教学,就是要求学生以程序员的视角理解计算机硬件设计,以硬件设计者的角度理解程序执行,彻底掌握计算机系统各个抽象层的实现及其相互转换机制、计算机软硬件之间的关联关系及相互影响。计算机组成原理课程针对微体系结构层和指令集体系结构层的知识体系,向上负责解释并执行来自操作系统的命令,向下将计算机操作转化为电平信号,驱动计算机部件执行。所以,如何让学生有效地掌握组成原理知识,是培养学生计算机系统能力的一个重要部分。
2.实验环境及过程
为了提高学生对计算机系统的理解能力,激发学生的学习兴趣,避免传统验证性实验导致学生被动学习,我们对计算机组成原理的实验内容和实验方式进行了改革。实验的目标是让每位学生当一回工程师,设计一套计算机系统。具体而言,计算机组成原理实验的最终目标是完成一个8位机系统的设计与实现,是一个包含运算器、控制器、存储器、输入输出功能的完整计算机系统,且多数功能部件采用EDA硬件编程方式实现。实验内容被分解成7次实验,包括8位运算器设计实验、运算器控制实验设计、存储器存取实验设计、指令系统实验设计、控制器实验设计等。运算器用两片4位的am2901运算器芯片级联构成8位运算器,存储器为SDRAM HM6116,输入用二进制开关模拟,输出部件主要为LED灯和PC终端。可编程器件选用Lattice iM4A5-128/64 10YC-12YI,硬件编程语言采用了ABEL语言,集成化的开发环境为isp LEVEL Project Navigator3.0,下载工具使用软件自带的LSC isp VMsysteml5.3。通过设计、编辑、编译、生成JEDEC文件、下载等步骤,将可编程CPLD芯片变成实验逻辑部件;然后,连接CPLD芯片和功能部件之间的连线,搭建起完整的数据通路;最后,编写测试程序测试本次实验结果的正确性。实验步骤如图1所示。
3.综合实验框架设计
7次实验内容由浅入深,针对构成计算机系统的不同逻辑功能部件进行实验,最后在已有基础上扩展、整合,构建一个完整的计算机系统。其中,运算器部件分2次实验进行:运算器实验一设计并实现一个8位的ALU,运算器功能包括两个8位的二进制数的加、减、取反、数据传输,属于线路一级的实验,目的是学会CPLD芯片的使用,熟悉基于EDA方式进行实验的流程;运算器实验二的目的是对已有运算器芯片进行控制,级联两片4位的运算器Am2901,构成8位的运算器,并手动控制开关输入数据和控制信号,控制Am2901工作,并将控制过程设计成控制指令,写入CPLD芯片,通过CPLD芯片完成对运算器AM2901的控制。第3次实验通过软件模拟系统练习16位机的汇编语言程序,目的是通过软件形式理解硬件的工作原理,提高学生的系统理解力,特别是对计算机指令系统的理解。第4次实验为存储器实验,实验分两步进行:第一步验证SDRAM HM6116的功能,通过手动开关控制和实现内存读写指令,实验第二步利用CPLD芯片进行编程,自动完成对连续存储单元内容的读和写。第5次实验为控制器实验,内容综合,实验工作量大,且控制器的复杂度和指令集数量有关,本次实验设计的控制器包含8条指令。第6次实验为8位机的输入输出实验,分为两个部分:第一部分通过手动开关控制串口实现输入输出指令;第二部分用CPLD芯片控制串行接口执行输入输出操作。第7次实验为包含14条指令集的8位机整机系统设计实验,该实验是对前几次实验的综合:指令集包含了算数运算类指令ADD、SUB,逻辑运算类指令AND、OR、NOT,移位指令SHR,输入输出指令IN、OUT,访内指令LDRR、STRR,程序控制指令JNCR、CALR、RET,数据传输指令MVRD,其中对指令的内存存取共享指令LDRR、STRR。
实验平台主要用到了5个主要芯片,1片iM4A5.128/64 10YC.12.YI(CPLD芯片),2片AM2901,1片HM6116,1片Intel8521,平台的核心为可编程逻辑阵列芯片iM4A5。图2给出了由这个主要芯片构成的综合实验框架,虚线框给出了各实验的逻辑框图。实验的过程基本上可分为如下步骤:确定目标、分析任务、设计方案、编程实现、程序硬件写入、连线排错、测试验证。将传统组成原理的验证型实验转变为设计型实验,实验结果与学生的设计相关,所见即所得。这种形式知识环环相扣,采用设计方式进行实验,有利于变被动学习为主动设计过程,学生的学习兴趣大大提升。
4.结语
本文通过EDA方式设计功能部件的思路,构建了一个完整的8位机计算机系统。这种方式变被动的验证性学习为主动的自主设计实验,极大地调动了学生的学习积极性,发挥其主观能动性和创造力。通过解决实验过程不同阶段遇见的问题,增强了学生对计算机系统的理解,特别提升了其硬件系统整体观的认知能力,提高了学生自主解决问题的能力。我们从2013年开始采用这种模式的实验教学,现已经过了多个轮次的教学实践和改进。从教学效果可以看出,改革后的教学模式对学生系统能力的培养起到了很好的效果,提升了大部分学生学习的主观能动性,有效地激发了学生学习的兴趣。但这种设计性的实验方式对学生的学习能力要求比较高,一旦前面的知识没有掌握好,后续的学习会更加困难。当然,计算机系统能力的培养,是一项系统工程,涉及内容繁多,本文仅从计算机组成原理这一门课程实践教学的角度给出了如何有效地培养学生的计算机系统能力。构建完备的计算机系统能力培养体系,还需从优化课程群教学内容、提升知识的系统性和完整性、采用多样化培养手段等多个方面综合进行。