APP下载

基于龙芯开源CPU的计算机组成原理实验课程改革

2018-06-27王俊昌成韶锦李德国

计算机教育 2018年6期
关键词:龙芯寄存器开源

王俊昌,成韶锦 ,杨 昆,李德国

(1.南京邮电大学 计算机科学与技术学院,江苏 南京 210023;2.龙芯中科技术有限公司,北京 100089)

0 引 言

计算机组成原理是一门偏硬件的计算机基础核心课程,该课程对学生了解计算机各组成部件及其内部运行机制具有重要意义。目前,国内高校普遍采用的教材介绍了计算机指令集、CPU设计、存储器层次结构、I/O系统、总线系统等计算机核心组成部件[1-2]。该课程涉及计算机的多个部件,概念较为抽象,因此其实验环节尤为重要。只有通过动手充分了解计算机各部件的内部运行机制,才能加深学生对计算机组成知识的理解,提升学生的实践动手能力,并为其今后的学习和深造打好坚实的基础。

目前高校开设计算机组成原理实验课的主要方式如下。

(1)基于硬件的实验方式[3-4]:给定实验步骤,学生通过插拔线和拨动开关进行实验,该类实验方式在国内较为常见。这种实验方式的优点是让学生接触真实的硬件电路,增进学生对电路走线的理解,缺点是学生只能按照预设步骤,机械地完成连线,难以突破实验箱的限制,无法了解硬件内部的运行机制。

(2)基于软件的实验方式:采用某类硬件平台模拟器,学生通过在模拟器中运行代码,达到间接观察硬件平台的效果。这种方式的优点是简单易上手,缺点是学生无法动手操作,很难形成对计算机硬件的直观理解。

随着计算机硬件的飞速发展,特别是以人工智能和大数据处理为代表的新兴方向对学生的计算机硬件知识水平和动手能力提出了更高的要求。传统的计算机组成原理实验方式已不能满足学生对计算机组成原理的认知需要。近年来有不少高校开始探索使用现场可编程门阵列(FPGA)作为计算机组成原理课程的实验平台[5-6]。与传统实验设备相比,基于FPGA的组成原理实验平台具有可编程、直观、学生动手程度高等优点。然而,基于FPGA的实验平台存在对学生的软硬件预备知识要求高、设备调试复杂、技术支持不到位等问题,高校对是否采用基于FPGA的实验平台存在争议。

硬件实验平台对于计算机组成原理课程的教学效果具有重要意义,因此,如何选定合适的实验平台是计算机组成原理课程教学改革的重点和难点问题。为此,笔者基于龙芯开源CPU的教学实验平台[7],就计算机组成原理课程开展了一系列教学改革尝试,并取得了较好的效果。

1 基于龙芯开源CPU的计算机组成原理实验平台

1.1 硬件平台

实验用到的龙芯实验箱型号为LS-CPU-EXB-002,主要由以下部件组成:Spartan6-XC6SLX150-FGG676 FPGA芯片、双色LED灯、单色LED灯、LED点阵、数码管、下载JTAG接口、UART接口、VGA接口、LAN接口、USB接口、PS2接口、电源开关、拨码开关、脉冲开关、4×4键盘、复位键、LCD显示屏。实验箱LS-CPU-EXB-002见图1。

图1 实验箱LS-CPU-EXB-002

1.2 软件平台

实验使用的EDA软件为ISE Design Suite[8]。ISE Design Suite14.7涉及FPGA设计的各个应用领域,包括逻辑开发、数字信号处理及嵌入式系统开发等,主要包括ISE Foundation、嵌入式开发套件、System Generator DSP开发工具、ChipScope Pro分析仪、PlanAhead设计和分析工具等组成部分。该软件平台的使用流程包括:①代码编辑;②用PlanAhead配置管脚,生成bit流文件;③用ChipScope烧写FPGA板,验证功能是否正确;④根据结果对逻辑进行优化修改。

2 实验设计

基于龙芯开源CPU的计算机组成原理实验包含8个难度依次增加的实验:①定点加法;②定点乘法;③寄存器堆实验;④ALU模块实现;⑤存储器实现;⑥单周期CPU;⑦多周期CPU;⑧静态五级流水CPU实现。实验①及实验②的目的在于让学生熟悉软件与硬件平台,掌握利用龙芯实验箱各项功能开发组成原理实验的方法,并熟悉开发语言verilog。实验③、④、⑤旨在让学生熟悉CPU内部构造的设计,巩固理论知识,为后续设计完整CPU打下基础。最后3个实验由浅入深,逐步引导学生编写五级流水CPU。通过层层深入的教学模式,引导学生积极动手,从零开始设计并实现一个支持五级CPU流水线的真实处理器。

2.1 定点加法实验

本实验的主要目的是让学生熟悉使用ISE软件开发FPGA的流程,帮助学生巩固电路设计方面的知识,引导学生学习verilog语言。实验流程为:①逻辑设计,编写代码;②仿真验证;③综合布局布线;④用Chipscope下载到试验板上进行功能验证。

2.2 定点乘法实验

定点乘法实验的目的为让学生理解定点乘法中算法的工作原理,掌握实现较复杂算法的技巧。该实验最终实现一个基本的迭代乘法算法,理解并正确实现该算法对后续实验有极大的帮助。算法基本原理为:乘数每次右移一位,根据最低位,判断是加被乘数移位后的值还是加零,不停地累加,直到得到最终乘积。原理图如图2所示。

图2 迭代乘法算法原理图

2.3 寄存器堆的实现

从实验3开始,学生开始转入CPU内部基本结构的实现。寄存器堆的实现旨在建立一个能存放32个32位寄存器的存储设备。学生最终实现的存储设备设置有2个读端口、2个输出端口、1个写地址端口、1个写数据端口;控制信号方面,存在1个写使能信号,控制寄存器堆的输入。在寄存器堆进行工作时输出标志的寄存器中的值。

2.4 ALU模块的实现

本实验设计的ALU是一个简单的能够处理两个32位操作数的算数模块,具体支持加法、减法、有符号比较、无符号比较、按位与、按位或、按位或非、按位异或、逻辑左移、逻辑右移、算术右移和高位加载。该实验能够帮助学生对CPU核心部件ALU的工作原理有较深入的理解。

2.5 存储器实现

存储器实验的主要目的是让学生了解只读存储器ROM和随机存取存储器RAM的基本原理,理解同步RAM和异步RAM的区别。存储器实验的一种方式是调用Xilinx库IP直接输入参数使用,也可以自行设计存储器,使用设计寄存器堆的设计方法,直接定义需要的32位寄存器,并且设计好端口。在教学实践中,笔者鼓励学生尝试自行设计,从而加深学生对存储器工作原理的认识。

2.6 单周期CPU的实现

单周期CPU实验中,一个CPU周期实现一条指令,故时钟的设定应为执行时间最长的指令。该实验要求学生设计一个支持16条MIPS指令的CPU。CPU具体流程为:在一个周期内,根据PC值从指令ROM中读出相应的指令,将指令译码后从寄存器堆中读出需要的操作数,送往ALU模块,ALU模块运算得到结果。但若是跳转指令,则不需要存储器设备,此时需要修改PC值。单周期CPU的大致框图如图3所示。

2.7 多周期CPU的实现

该实验是对单周期CPU实验的拔高,也为流水线CPU实验打下基础。该实验要求学生实现30多条指令。该实验的难点在于CPU需要支持多周期执行,即一条指令被分为多个步骤,在每个周期内只做一部分,如取指、译码、执行、访存、写回。与单周期CPU相比,多周期CPU中每个部分使用单独的模块编写,通过设计外围模块调用,而且只有前一个状态结束时,才能进行下一步操作,以此实现多周期操作。该实验对学生的理论知识和实际动手能力有较高要求,且程序调试较复杂。为此,在教学实践中,笔者将该实验设置为可选,鼓励学有余力的学生完成。

图3 单周期CPU的大致框图

2.8 静态五级流水CPU的实现

最后一个实验要求学生设计一个五级流水CPU。该CPU的主体部分使用2.7节完成的多周期CPU,但此处要求将指令拓展到40条以上,并在此前基础上加入延时槽技术。此外,该实验在每个模块中加入allow_in信号和over信号,以此使该模块不断运作,从而实现流水线效果。该实验使用了大量的控制信号来维持流水线的秩序,要求学生对CPU功能结构有深入的了解,并能把各模块联系起来,最后还要通过仿真器分析设计结果,做出改进。在教学实践中,笔者将该实验设置为可选,鼓励学有余力的学生完成。

3 基于龙芯开源CPU的计算机组成原理实验教改效果

近年来,龙芯公司通过硬件开源,以教学生“造”计算机为理念,通过将龙芯CPU面向合作院校进行开源,力图使学生能够动手实现“设计真实处理器”,提升计算机组成原理教学水平。笔者所在南京邮电大学通过引入基于龙芯开源CPU的教学实验平台,就计算机组成原理开展一系列教学改革尝试。在实验过程中,通过指导学生动手实践,从零开始逐步完成一个可真实运行的CPU核心,激发了学生的学习主动性,巩固了学生的课堂知识,使学生对所学知识融会贯通,取得了较好的教学成果。基于龙芯开源CPU的计算机组成原理实验平台已在南京邮电大学的2014、2015级计算机专业本科生中试用,在教学过程中取得了较好的教学效果。

3.1 教改成效

教学过程中采用的教材为白中英编写的《计算机组成原理》。在课堂教学过程中,笔者发现学生对ALU、流水线技术、总线系统等知识缺乏直观认识,例如:①对小于置位运算的原理不清晰,不熟悉ALU的内部构造;②对CPU控制部件工作原理难以理解;③对总线的内部结构不明确。通过在龙芯实验平台上进行相关实验,学生逐渐熟悉了ALU的内部结构,掌握了32位无符号比较小于置位运算,对指令译码和流水线停顿等概念有了更深入的理解。经过一个学期的实践,学生对新实验平台的反映较好。

此外,龙芯具有较好的社会影响力,配套培训较多,学生学习热情高。例如,2017年6月,龙芯公司在南京航空航天大学进行了全国大学生计算机系统能力培养大赛的相关培训[8],在培训过程中,龙芯开发人员介绍了龙芯开源CPU的设计流程,对实验箱进行了演示,详细介绍了所用的MIPS指令集,极大地提高了学生对于计算机整体系统的认识。

3.2 存在的问题和思考

在采用龙芯实验平台的过程中,笔者也发现了一些问题,例如:

(1)该实验平台采用了FPGA,但FPGA对于本科学生来说门槛较高,要求学生具有一定的基础知识,例如:计算机组成原理、数字电路与系统设计、操作系统等。此外,学生此前并未接触过编程语言verilog。针对该问题,笔者有选择地给学生介绍了《Xilinx FPGA开发实用教程》等书籍中的部分内容,较好地解决了该问题。因此,笔者认为在采用该平台的过程中,应有计划地安排学生提前选修数字电路、FPGA开发等先导课程。

(2)使用龙芯实验平台调试代码的过程中涉及逻辑和语法两方面的内容,过程复杂,而学校的实验课通常安排得较短、较分散,学生难以在课上解决所有问题。例如部分学生在完成五级流水CPU实验的过程中,由于缺乏对延迟槽的理解,导致MIPS二进制执行文件不能在CPU中正确运行,而这一问题的解决往往需要较长时间。因此,在采用该平台的过程中,应考虑协调教务部门,将课程的实验课集中安排,以实践周的方式进行更有利于学生集中时间完成实验。

4 结 语

基于龙芯开源CPU的计算机组成原理实验平台在南京邮电大学计算机科学与技术专业2014级、2015级进行了推广,极大地调动了学生的学习积极性,取得了较好的教学效果。在实验过程中,通过动手实践,学生往往能够发现一些新的问题和意想不到的困难,通过克服困难寻求解决方案,学生的动手能力得到较明显的提升。此外,在今后的教学实践中笔者还会进行一些优化和调整,例如结合操作系统、数字电路等课设的实验课程,形成更全面、更系统的实验组合,以便更加全面地覆盖计算机系统学科的理论知识。

[1]Patterson D A, Hennessy J L. Computer organization and design: The hardware/software interface[M]. 北京: 机械工业出版社,2014: 1-23.

[2]白中英, 戴志涛. 计算机组成原理[M]. 5版. 北京: 科学出版社, 2013: 1-30.

[3]丁红胜. 面向计算机系统能力培养的计算机组成原理实验教学[J]. 计算机教育, 2016(7): 20-24.

[4]李丽萍, 盛琳阳. 基于EDA技术的计算机组成原理实验课开放性教学模式研究[J]. 计算机教育, 2010(10): 55-57.

[5]周宁宁, 程春玲. 基于FPGA技术的计算机组成原理实验系统[J]. 现代电子技术, 2005(1): 23-25.

[6]吴迪, 谢雪炎, 吴贺俊. 基于FPGA的计算机组成原理实验教学探索[J]. 计算机教育, 2014(18): 30-34.

[7]中科龙芯. 龙芯开源CPU项目[EB/OL]. [2017-11-15]. http://www.loongnix.org/index.php.

[8]中科龙芯. 全国并行应用挑战赛[EB/OL]. [2017-11-15]. http://www.pac-hpc.com/.

猜你喜欢

龙芯寄存器开源
基于国产化龙芯的动环数据采集系统
Lite寄存器模型的设计与实现
五毛钱能买多少头牛
2019开源杰出贡献奖
常用电子测速法在某数字信号处理器中的应用*
移位寄存器及算术运算应用
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
“龙芯之父”胡伟武
“龙芯1号”:电脑中国“芯”