计算机组成原理实验改革方法探讨
2018-06-01袁景凌饶文碧邹承明熊盛武
柳 星,袁景凌,饶文碧,邹承明,熊盛武
(1.武汉理工大学 计算机湖北省重点实验教学示范中心,湖北 武汉 430070;2. 武汉理工大学 计算机科学与技术学院,湖北 武汉 430070)
0 引 言
当前,计算技术已从初期的科学计算与信息处理进入到以移动互联、物联网、云计算与大数据为主要特征的新时代,培养具备系统能力的计算机专业人才已成为国内外教育专家的共识[1]。早在2006年,教育部高等学校计算机科学与技术专业教学指导委员会便对计算机专业学生能力培养进行了研究,并出版了文献[2—3]。书中明确指出,计算机专业学生应培养4种重要专业能力:程序设计与实现能力、计算思维能力、算法设计与分析能力以及系统能力,其中系统能力占总能力点的75%,对于计算机专业能力培养具有重要作用。2013年,ACM/IEEE起草了计算机学科课程设置报告CS2013[4],也将计算机系统能力培养作为重点内容进行阐述,认为计算机教学应树立系统观,指导学生从多层次的细节抽象思考问题,培养学生的软、硬件协同设计思维,使学生具备设计并实现具有一定规模的复杂计算机系统能力。
系统能力培养实现的重要技术途径是对计算机组成原理、操作系统、编译原理等核心课程群进行贯通,学生具备自主开发“1个CPU、1个操作系统、1个编译器”的能力[5-7]。学生通过计算机组成原理等课程的学习,能基于FPGA实现一个CPU;通过操作系统等课程的学习,能开发出针对此CPU的操作系统;通过编译原理等课程的学习,将开发的操作系统编译到CPU上运行。上述课程群的贯通教学将使学生全面掌握计算机系统知识点,并具备开发足够规模复杂计算机系统的能力。在上述课程群中,计算机组成原理又具有承上启下的关键作用[8],既以数字逻辑为先导,又为计算机系统结构、操作系统、编译原理等后续课程提供重要支撑,是计算机学科的核心专业基础课程。
1 实验内容改革及改革推广中的问题
在改革计算机组成原理实验内容之前,我们同国内多数高校一样,采用公司集成开发好的模型实验箱进行实验。实验箱将控制器、运算器、存储器等部件固化好,学生在实验时只需参照指导书通过手工连线、开关控制、上传微程序等方式与实验系统交互。经过多年的教学,我们发现此实验模式存在一些问题:首先,实验设计大多以验证型为主,学生缺乏思考过程。实验过程也仅能观看到系统运行演示效果,学生无法深入理解系统内部工作原理。其次,平台上各部件功能固化,不能进行扩展与重编程,学生缺少自主创新开发的空间。此外,实验设计侧重对局部原理的简单验证,缺乏对复杂系统的综合设计与实现。最后,不同课程采用不同的实验箱,实验课程相互独立,不能对软硬件核心课程进行贯通。
上述实验模式不利于计算机专业学生系统能力的培养。为此,我们在考察浙江大学、清华大学、北京航空航天大学等兄弟院校后,对我校计算机组成原理课程教学进行了改革,提出以可编程FPGA为实验开发平台,以Xilinx ISE为硬件设计及仿真工具,以学生自主开发CPU为实验目标的组成原理实验体系。FPGA开发平台选用Digilent公司的SWORD(simple while organic aRc design)教学实验系统。SWORD面向计算机系统能力培养课程贯通体系而设计,内容涵盖从数字逻辑硬件设计,到指令集架构设计与扩展,并延伸到编译器设计,甚至涵盖操作系统设计与实现,以及基于上述一切内容的计算机系统集成设计与应用,可较好地满足计算机专业系统能力教学改革所涉及的各层次实验设计需求。实验内容以开发多流水线MIPS指令集CPU为主体,要求学生实现能支持常规定点指令及操作系统运行所需基本系统级指令的CPU,培养学生具备开发一定规模复杂系统的能力,并为后续操作系统等课程的改革打下基础。
改革新内容的实验教学推广中,出现了以下问题:①CPU体系结构比较复杂,如何深入浅出地向学生讲授一个复杂计算机系统的设计与实现过程;②许多学生缺乏FPGA开发基础,如何帮助他们快速理解且灵活掌握FPGA开发技术;③如何让学生在实验课堂外,也能随时随地进行远程实验;④面对数十甚至上百名学生,指导教师如何在有限的教学时间内高效地指导众多学生。
2 教学方法改革探讨
2.1 模块化分解与逐级验证法
CPU体系结构具有一定复杂性,为帮助学生更好地掌握CPU设计与实现方法,可采用模块化分解及逐级验证的实验方法。首先,将CPU分解为一系列功能简单的模块,先直接提供各模块IP核,通过IP核集成实现一个CPU系统,让学生从整体上认识CPU系统结构;然后,逐个去掉各模块IP核,要求学生自主编程实现各模块功能,并对实现的模块功能进行逐个验证;最后,对所有验证正确的模块进行综合,达到自主设计并实现复杂CPU系统的目标。
实验内容设计如图1所示。实验1通过使用IP核集成一个SOC系统,以构建一个CPU运行与调试环境,为后续CPU开发打好基础。从实验2开始,实验内容将集中在SOC系统中CPU开发上。由于CPU体系结构的复杂性,实验2首先将CPU分解为控制器与数据通路两大子系统,子系统仍通过提供IP核集成实现,但是学生需对子系统之间的电路连接关系进行设计。实验2完成CPU的第一次模块化分解,是后续进一步细分的基础。从实验3开始,不再向学生提供IP核,学生需采用顶层原理图及Verilog编程方式自主实现CPU各模块功能。实验3完成CPU控制器的设计与实现工作,实验4则完成CPU数据通路开发工作。由于数据通路部分系统结构较复杂,实验4进一步采用模块化分解方法,将数据通路划分为ALU单元、寄存器组、跳转电路等子模块,通过各子模块的开发与集成实现数据通路系统。完成上述4个实验后,学生可基本掌握CPU工作原理及设计与实现方法。在此基础上,实验5进一步要求学生对CPU控制器与数据通路电路进行扩展,以达到扩展CPU指令集的目标。
图1 实验内容设计
在实验体系设计上,应首先向学生提供CPU所有模块的标准IP核,集成一个CPU系统;然后,引导学生自主实现CPU各模块功能,每开发一个模块后,替换掉此模块对应的IP核,再检验整个CPU是否运行正常。若测试无误,则判定自主开发的模块功能正确。如公式(1)所示,信号I为测试输入信号,ƒI k(x)表示提供的标准IP核实现的模块k功能,ƒV k(x)表示学生自主开发的模块k功能,信号O表示输出。如果O1与O2相同,则证明自主开发的模块2功能正确。每次开发一个CPU子模块并替换掉其对应的IP核,依此类推,最终达到自主实现整个CPU的目标。
2.2 类比教学法
大多数学生缺乏FPGA开发基础,部分学生知道FPGA系统开发操作流程,但不理解为何进行这些操作。采用ISE工具基于FPGA平台开发一个系统模块的通用步骤如下:首先,装载系统各组件符号表(symbol),并绘制顶层原理图;然后,装载对应于每个符号表的IP核或进行Verilog编程;最后,对系统进行综合与实现。学生经过多数训练后,容易掌握这种开发流程。然而,对于为什么要装载符号表并绘制顶层原理图,符号表、顶层原理图、IP核、Verilog程序之间的关系如何,大多数学生仍未能理解这些问题,导致难以对FPGA系统开发技术进行灵活变通。为了帮助学生快速掌握FPGA开发技术并理解其本质意义,可尝试类比教学法,以学生熟悉的C程序开发为实例,FPGA技术开发原理如下。
FPGA系统设计图实例及对应的C语言程序如图2所示。采用类比后,每个系统模块可类比于C程序中一个子函数,模块符号表可类比于函数名,模块输入信号类比于函数参数值,输出信号类比于函数返回值,符号表各引脚间的连线类比于确定各函数间参数与返回值的传递,符号表连线后形成的顶层原理图类比于一个主函数,键盘输入类比于scanf变量赋值,七段数码管输出类比于printf打印显示,模块IO引脚定义类比于函数申明,IP核对应于函数库,各模块的Verilog编程则类比于各函数体的C语言编程。
理解上述类比机制后,则可采用C程序的开发流程类比推导FPGA技术的开发方法,从而达到灵活变通且创造性地使用FPGA技术的目的。例如,在C程序中,函数体可通过C编程或调用C库实现;相对应地,FPGA系统中每个模块功能也可以通过Verilog编程或直接调用IP核实现。在C程序中,一个主函数可调用一系列子函数,每个子函数又可继续调用子函数;相对应地,在FPGA开发中,CPU可用顶层原理图实现,而CPU顶层图中每一个子模块也可继续采用类似于CPU顶层图的方法进一步实现。
2.3 云实验平台建设
教学过程中,我们发现学生实验操作存在两方面约束:①上位机软件环境约束。为了进行实验,学生需在个人PC等终端上安装ISE开发工具,安装过程及安装后的环境配置操作复杂。若能省去在所有用户终端上构建软件开发环境的过程,将大大提高实验操作的便利性。②下位机硬件设备约束。由于实验室管理等各种原因,许多实验设备不允许带出实验室,学生只能在指定时间来实验室进行实验,限制了实验操作的空间性。因此,如何能让学生随时随地方便地进行实验是实验管理需面对的重要问题之一。
图2 FPGA系统设计图及类比的C语言程序
针对上述问题,我们采用云计算技术及虚拟化技术开发了一套共享云实验平台。实验平台包含两大部分:后台实验设备集群和云实验服务平台。云平台包含一系列虚拟服务器,每个服务器均已搭建FPGA软件开发环境,且可与后台任意一个实验设备绑定。学生可采用任意PC终端在任意时间远程登录云服务平台。云平台将为每位登录学生分配一台虚拟服务器,学生可直接在虚拟服务器上进行实验操作。由于服务器已搭建软件开发环境,学生不再需要在用户终端上安装及配置软件开发环境。每个服务器会关联一台空闲的实验设备,用户远程操作实现对设备的控制,并将设备的运行状态通过远程视频传输显示在用户终端上。此共享云实验平台不仅提高了实验资源的利用率,还解决了上位机与下位机实验条件对学生实验操作的约束,使得学生能随时(不局限在课堂时间)随地(任选一台PC终端即可直接开发)进行实验。
2.4 学生助教模式
实验改革工作前期推广中出现了两大问题:①指导教师需在有限课堂时间内指导并验收数十位甚至上百位学生,平均分配到每名学生的时间极少,那么如何在有限课堂时间内让每位学生得到充分指导。②指导教师对改革新内容不熟悉,且无法及时得到充分的帮助,指导教师又该如何学习以尽快掌握改革新内容。
针对上述问题,我们在教学过程中尝试了培养学生助教的方法,从所带班级中选出一定比例的学生助教,让他们与指导教师一起参与改革新内容的学习与探讨中。通过不定期组织研讨会,提出各个实验中所需研究的问题,针对每个问题分析出几种可能答案,再针对每种答案列出数种验证方法,然后分配任务,对每种验证方法进行实测验证,最终寻找到问题的答案。上述方法的使用可以有效解决前期推广中的两大问题:①加快改革新内容的学习进程。指导教师独自研究改革新内容时容易陷入困境,通过与多名优秀学生共同讨论及分工实践,则可以更快解决问题,保证改革新内容的教学顺利推进。②每位学生可得到更充分的实验指导。假设有90名学生,一堂实验课90 min。若不培养学生助教,指导教师平均分到每位学生的指导时间仅为1 min。采用助教培养机制后,可从每9名学生中选出1名助教,并由此助教协助辅导8名学生的实验操作与调试工作,较好地延长每位学生平均接受指导的时间。
3 教学改革效果
我们从理论知识掌握情况、复杂计算机系统开发实践技能、软硬件课程群贯通能力培养、应用案例创新开发等方面对改革效果进行评估。
(1)理论知识的全面与深入理解。传统计算机组成原理实验以验证型为主,学生主要观看系统各部分运行演示效果,难以深入理解系统各部件内部结构及工作原理。实验改革后,学生需学习甚至自主设计各计算机部件内部电路,并掌握其工作原理,这对于计算机组成与系统结构课程的理论学习具有重要的促进作用。
(2)复杂计算机系统综合开发能力的提升。传统组成原理实验箱各部件硬件功能固化,不支持自主开发,学生以验证系统各部件功能为主。实验改革后,要求学生基于FPGA可重编程硬件平台,采用整体到局部逐层模块化分解思维、FPGA计算机系统开发技术、硬件测试及软件仿真等系统验证方法,自主开发一个复杂的计算机系统,增强学生对复杂计算机系统的综合开发能力。
(3)软硬件课程群贯通能力的培养。实施改革前,各核心基础课程采用不同的实验箱,实验环节相互独立。实施课程改革后,我们将计算机组成原理实验与编译原理及操作系统实验在同一个SWORD开发板上进行了贯通。在大二上学期,我们通过数字逻辑课程改革,要求学生在SWORD开发板上开发基本的数字逻辑部件;大二下学期,我们通过计算机组成与系统结构课程的改革,要求学生对之前开发的数字逻辑部件进行综合,从而开发出一个CPU系统;在大三学年的编译原理及操作系统教学中,我们进一步要求学生开发出对应于此前CPU的编译器及操作系统,并通过此编译器将操作系统编译到此前开发的CPU上运行。通过上述课程群的贯通,学生具备了在同一个实验平台上开发出一个CPU、1个编译器及1个操作系统的系统能力。
(4)应用案例创新开发。我们鼓励学生在所开发的CPU硬件平台上通过汇编指令编程进行上层应用程序开发。目前,已有部分学生基于SWORD开发板所构建的CPU成功开发了一些小游戏程序,如贪吃蛇、俄罗斯方块、LED乒乓球等。这些应用程序的开发证明学生具备了对数字逻辑、计算机组成原理、编译原理、汇编语言等课程进行贯通的能力,对于提高学生的计算机系统能力具有重要意义。
此外,我们还收集了有关教学改革效果的调查反馈数据。在实验内容难易程度方面,认为实验1难、中等及容易的学生分别占14%、44%、42%,实验2分别为8%、70%、22%,实验3分别为18%、72%、10%,实验4分别为16%、66%、18%,实验5则为50%、36%、14%。从结果可看出,采用模块化分解、逐级验证等教学方法可有效降低复杂计算机系统的设计与实现复杂度,除了50%的学生感觉实验5指令集扩展较难外,多数学生均认为可较好地理解与掌握其余4个CPU开发的基础实验,证明多数学生已具备开发CPU系统的能力。对类比教学、云实验平台建设、学生助教等方法的调查结果表明,92%的学生认为类比教学法具有深入浅出的教学效果,帮助他们快速且深入地掌握基于FPGA的CPU设计与实现技术;82%的学生认为共享云实验平台建设提高了实验资源的利用效率,且为他们的实验提供了较大的便捷性;96%的学生认为采用学生助教提高了实验教学质量,且活跃了实验课堂气氛,担任助教的学生则普遍认为在与教师进行集体研讨的过程中,培养了团队合作能力,学会了发现问题及分析问题的思维方式并加深了对理论知识的理解,提高了他们在就业及升学上的竞争力。
4 结 语
为培养学生的计算机系统能力,笔者对计算机组成原理课程进行改革,提出基于FPGA开发平台设计并实现多流水线MIPS指令集CPU的实验体系;针对教学改革推广中所遇到的系统实现复杂度高、学生FPGA开发基础薄弱、实验场地与实验时间受限、有限课堂时间内难以得到充分实验辅导等问题,探索了模块化分解与逐级验证、类比教学、实验云平台建设、学生助教模式等教学方法。实践效果证实,上述教学方法的推广可加深学生对理论知识的理解,增强学生开发复杂计算机系统的实践技能,并可使学生具备对多门核心专业课程进行贯通的能力,对于计算机专业人才的系统能力培养具有重要作用。
[1] 王志英, 周兴社, 袁春风, 等. 计算机专业学生系统能力培养和系统课程体系设置研究[J]. 计算机教育, 2013(9): 1-6.
[2] 教育部高等学校计算机科学与技术专业教学指导委员会. 高等学校计算机科学与技术专业人才发展战略研究报告暨专业规范[M]. 北京: 清华大学出版社, 2006: 220-227.
[3] 教育部高等学校计算机科学与技术专业教学指导委员会. 高等学校计算机科学与技术专业人才专业能力构成与培养[M]. 北京: 机械工业出版社, 2010: 72-78.
[4] ACM/IEEE–CS Joint Task Force on Computing Curricula. Computer science curricula 2013[EB/OL]. (2013-12-20) [2017-09-15].http://ai.stanford.edu/users/sahami/CS2013/.
[5] 高小鹏. 计算机专业系统能力培养的技术途径[J]. 中国大学教学, 2014(8): 53-57.
[6] 施青松, 陈文智. 强化计算机课程贯通教学 深入面向系统能力培养[J]. 中国大学教学, 2014(12): 61-65.
[7] 刘卫东, 张悠慧, 向勇, 等. 面向系统能力培养的计算机专业课程体系建设实践[J]. 中国大学教学, 2014(8): 48-52.
[8] 袁春风, 杨若瑜, 王帅, 等. 计算机组成与其他课程之间的关联内容分析[J]. 计算机教育, 2015(17): 35-38.