APP下载

一种高效的CPU设计方法及其在计算机组成原理课程中应用

2018-10-30吴继明曾碧卿

实验室研究与探索 2018年9期
关键词:器件指令界面

吴继明, 曾碧卿

(华南师范大学 计算机学院,广州 501631)

0 引 言

CS2013及国家教育部高等学校计算机科学与技术指导委员会均要求进行计算机专业学生的系统能力培养,2017年国家教指委提出的新工科思维中也特别注重计算机系统能力、创新能力的培养,当前国内外高校都在开展这方面的工作。计算机系统能力包括计算机系统分析能力、系统设计能力和系统验证能力,3个方面相辅相成,共同构成计算机专业本科学生的基本能力和专业素养。计算机系统能力的培养从根本上依赖于计算机系统类核心课程——计算机组成原理、操作系统和编译原理这 3 门课程,其中计算机组成原理课程在整个计算机系统类核心课程链中处于中心位置[1-3]。

CPU设计是实现计算机系统能力培养中的一个至关重要的环节,通过CPU 的设计可以把对计算机原理的理解上升到计算机的设计与实现层面,对计算机的原理有一个全面的理论认识和切身的设计体会。目前许多国内外高校都在计算机组成原理课程中安排了CPU设计方面的课程和实验,基本上都是在Quartus II仿真平台应用硬件描述语言VHDL或者Verilog完成开放式CPU的逻辑设计与仿真,然后下载到FPGA开发板上进行工程验证[4-9]。这种CPU设计方式存在如下问题:① 学生学习成本高,学习周期长,普通高校的学生难以在短时间内掌握硬件开发语言和硬件开发平台的调试与使用;② 学生实践开发过程中,依赖于实验室的硬件环境,回到宿舍无法继续开发或者调试,即使只在Quartus II平台上做仿真,也涉及到不同处理器电脑上安装仿真软件出现bug的问题;③ 分析仿真数据时一头雾水,不知如何下手去看懂各个器件之间的数据关系,程序、指令、微程序、微指令之间的关系不能在仿真界面清晰直观展现,编译时出现错误或者仿真时数据不对难以快速找到错误源。④ 《数字逻辑》《计算机组成原理》《计算机体系结构》等课程使用不同的硬件实验环境,导致学生在不同课程实验中完成的设计成果不能延续复用。

1 高效直观的CPU设计方法

为了更好地培养学生的计算机思维能力和逻辑设计能力,经过多年的CPU设计实践教学积累,我们在教学过程中提出了“CPU仿真设计与工程实现”两步走的理念。先通过仿真平台完成CPU的仿真设计,在设计与仿真分析过程中引领学生深入理解计算机的工作原理;对于有盈余学习能力的学生,再指导他们在FPGA开发板上完成设计的工程实现。考虑到很多普通高校计算机组成原理的实践教学中以CPU仿真设计为主[10-15],本文着重探讨CPU仿真设计的问题。

1.1 仿真平台LogiSim

LogiSim是一款开源的数字电路仿真软件,勿需安装,是一种符号图设计语言[16]。它提供了硬件设计所需的各种基本器件,器件都是参数化设定的。逻辑设计过程中,对于连接错误或者器件之间的逻辑不匹配时,连接的总线或者器件会出现红色、橙色的信息提示出错,工作时连线上有有效电平出现时呈现绿色状态。没有逻辑错误即可进行仿真,设定好输入数据/信号,就可立即进行仿真,不需要再度编译。仿真上输出界面可按需定制,每个器件或者每根连线上的数据都可以用数值、指示灯等方式显式输出,非常直观。每个设计项目就是一个文件,在按照自顶向底或者自底向上的方式设计大系统时,只需要调用该器件的一个电路文*.circ件即可。大系统中某个子模块修改设计后,通过简单的重载(reload)操作即可进行仿真输出。这种基于Logisim仿真平台的设计,可以把不同硬件课程中完成的设计作品系统化地融为一体,以部件-模块-系统的方式进行设计,培养学生的逻辑设计和计算机系统能力。

1.2 多功能ALU的设计与仿真

在定义好了ALU的9种功能类型和运算数据长度后,在LogiSim仿真平台先后设计4位并行的无符号全加器FA/全减器FS,再根据先行进位电路的逻辑关系设计CLA,完成8位并行的无符号FA/FS和补码FA/FS。整个ALU设计项目中只需要包含4个子器件的电路设计文件*.circ,最终的ALU逻辑电路如图1所示,ALU功能选择操作码有4位,可扩展实现共16种运算。ALU功能仿真截图如图2所示,对于2个输入数据,可以同时查看到不同运算类型的结果和特征位。

1.3 微程序控制器uC的设计与仿真

CPU控制器是模型机中的核心部件,负责产生所有的微命令,并在时序信号的同步下完成指令的取出与执行。设计CPU控制器的方法主要有微程序思想和硬布线思想,前者是存储器型控制器,后者是逻辑电路(布尔)型。限于篇幅,本文给出一个8位字长经典指令的CPU控制器微程序设计,指令类型及数量如表1所示。首先根据指令系统和数据通路绘制出指令的周期流程图和微程序流程图,然后定义好微指令格式并进行微程序编码。接下来,在LogiSim仿真平台着手控制器uC设计:调用参数化ROM存储微程序,根据微地址修改逻辑表达式调用基本门器件设计微地址转移逻辑电路,最后添加辅助器件完成控制器的设计。uC设计电路和仿真界面如图3所示。

图1 9种运算功能ALU的逻辑电路

图2 ALU功能仿真界面

表1 8位字长的机器指令格式

(a)微程序控制器uC逻辑电路

图3 uC设计电路与仿真界面

由图3可见,设计和仿真过程非常简单。可以根据需要用二进制、十六进制形式显示需要观察的数据,P位是微程序发生分支转移的重要标志,可以同时辅以LED指示该条件是否有效。对照微程序编码表格,逐步改变指令OP和需要的ZF、CF等标志信息,就可以快速完成微程序控制器逻辑功能的验证。

1.4 多周期CPU模型机的设计与仿真

应用前面基于微程序思想设计好的微程序控制器uC和多功能ALU,辅以寄存器和存储器,在单总线连接方式下完成模型机的电路设计,如图4所示。图5为功能仿真过程中取指微指令阶段的各种信息。

图5表达的是取指微指令在一个CPU周期内的数据信息,当前ROM中地址0处取出的指令IR是54H,下一顺序指令地址是1,当前取指微指令的地址是00H,后继微地址是20H,P1有效,当T4上升沿到达后,下一关联微指令地址被修改为25H。图6表达的是LAD指令执行期间的数据信息,uA值为26H表示处于LAD第二条微指令工作期间,访存地址是06H,RAM输出数据是08H,输入数据无效表明是读访存,T4上升沿到达后R2寄存器值由0变为8H。

图4 多周期CPU模型机逻辑电路

1.5 流水线CPU模型机的设计与仿真

基于RISC指令系统MIPS 32,选取算术逻辑运算指令(R类型)、访存指令/条件分支转移指令(I类型)和无条件转移指令(J类型),在LogiSim仿真平台完成硬布线控制器、通用寄存器堆、流水线缓冲器(IF/ID,ID/EX,EX/MEM,MEM/WB)、数据真相关前推电路和数据真相关冒泡电路等器件,最后连接成一个基于经典五段流水线IF、ID、EXE、MEM、WB的流水线模型机,图7是逻辑设计电路,图8是功能仿真界面。

2 不同开发平台下CPU仿真设计对比研究

CPU的仿真设计可以帮助学生理解计算机的工作原理,提高他们的计算机思维能力和系统设计能力。当前主流的做法是在Quartus II平台中完成设计,Quartus II或者ModelSim中完成仿真[4-6]。本文介绍的CPU设计方法,融设计与功能仿真于一体,学习效率高,无实验环境需求,教师可以在理论课堂上随用随讲辅助教学,可以在机房带领学生从事实践开发,课后学生回到宿舍可在自己电脑上继续开发。和Quartus II平台的仿真设计过程相比具有如下分一些优点。

图7 MIPS指令五段经典流水线CPU模型机

图8 MIPS指令五段流水线CPU模型机功能仿真界面

2.1 设计和仿真过程的比较

在Quartus II设计和仿真,当调用子器件完成当前项目设计时,需包含子项目符号图文件和源文件,及子项目设计中调用的系统参数化器件的源文件和符号图文件,缺少任意一个文件都会无法通过编译。编译成功后,生成功能仿真列表,才可以在新建的波形文件中逐一添加输入、输出信号节点,设置好end time、grid time,预置输入信号值,进行仿真。仿真过程不能修改输入信号值,如果修改了设计中的源文件,必须重新进行编译和生成功能仿真列表。

LogiSim中设计和仿真,当前项目只需要装载子项目的源文件*.circ,对调用系统的参数化器件不用考虑文件问题。设计过程就隐含着编译过程,设计过程有逻辑上的错误立刻会以红色的线或者橙色的线/数字提示错误。没有错误提示后,就可以设定输入信号值立即开始仿真,仿真过程可以随意改变源文件设计和输入信号值。

2.2 完成相同逻辑功能器件设计包含子器件文件的比较

LogiSim和Quartus II仿真平台都支持纯符号图语言的设计方法,但是在基于自顶向底的大系统大项目设计过程中,2个平台上顶层设计实体对下层支撑模块和子器件的需求是不同的,以设计8位并行FA_8bits为例分析,主要体现在以下几个方面:(1)顶层调用子器件1位FA、超前进位电路CLA和4位并行FA,LogiSim中只需要在顶层项目中包含3个子器件文件FA_1bits.circ、CLA.circ、FA_4bits.circ;而在Quartus II中需要包含6个子器件文件FA_1bits.bdf、FA_1bits.bsf、CLA.bdf、CLA.bsf、FA_4bits.bdf、FA_4bits.bsf;(2)顶层调用系统中参数化的数据选择器、触发器、寄存器或者存储器时,Quartus II平台都会在项目文件夹FA_8bits中生成每个器件的lpm_*.vhd和lpm_*.bsf文件,而LogiSim平台不会产生任何文件。如果在后续更高层级的项目设计中,例如ALU_8bits或者模型机的设计中,若漏了添加这些系统自动产生的lpm_*.vhd和lpm_*.bsf文件,编译将会出错,这也是学生在从事大系统设计时最容易出现遗漏导致编译不成功的地方。表2给出了2种仿真平台下纯符号图语言设计器件及模型机时所需下层器件的子文件情况。

表2 两种不同仿真平台设计相同目标所包含子器件文件数量比较

2.3 仿真界面的比较

Quartus II或者ModelSim仿真界面是固定的,不能根据用户需要进行改变,显示的是波形文件或者数字,Quartus II中多周期CPU构成的模型机仿真界面如图9所示。当要观察某个器件的输出数据时,需要在原设计图增加输出引脚output,重新编译、生成功能仿真列表,并在仿真的波形文件中添加这个output后,运行功能仿真才可以输出该仿真数据,但是该数据与其它器件之间的数据关系、时间关系却难以直观体现。

而在LogiSim中仿真界面可以根据需要灵活设置,便于设计者跟踪数据的流动和器件的工作状态。如图5或者6所示,在本文的CPU设计仿真界面中给出了4类信息。第一列是对应于时序信号发生器的输入控制信号,连续仿真过程中,如果想停止下来看某个器件或某条总线上的数据,可以用鼠标点击设置EN=0,仿真程序暂停。同样,如果某条机器指令工作不正确,可以在任意时钟周期T内停下来,在设计电路中查看相关数据通路上的数据及相关工作器件的控制信号是否正确。第二列跟踪微程序工作时的信息,便于学生输入理解微程序控制器的原理,同时可以随时检查自己的微程序控制器是否按照微程序流程图定义的顺序工作。第三列显示的是机器指令构成的测试程序运行情况,红色的LED亮表示对应的指令正在工作,LED前面的数字是该机器指令的存储地址。第四列显示的是数据通路上通用寄存器和数据存储器的信息,尤其是在执行访存指令时,访存的地址和数据会直接展现在眼前。

图9 Quartus II中多周期CPU模型机运行1~15累加测试程序仿真界面

2.4 仿真时数据分析过程的比较

Quartus II平台中,图9的仿真数据显示时钟信号clk周期为20ns时,经过93us后完成了1~15的累加运算,输出结果ALU_out为78H。但是仿真波形中,什么时候是指令的取值阶段,什么时候是指令的执行阶段,执行指令时哪些器件在工作,器件之间流动的数据是多少等信息难以直观看清楚,尤其是对于刚学会使用Quartus II从事硬件设计的学生来讲,通过这个仿真数据分析逻辑功能的正确性,理解CPU的指令控制、操作控制、时序控制原理非常困难。

LogiSim平台中,图5截图表达的是取值微指令在一个CPU周期内的数据信息,当前ROM中地址0处取出的指令IR是54H,下一顺序指令地址是1,当前取指微指令的地址是00H,后继微地址是20H,P1有效,当T4上升沿到达后,下一关联微指令地址被修改为25H。图6截图表达的是LAD指令执行期间的数据信息,uA值为26H表示处于LAD第二条微指令工作期间,访存地址是06H,RAM输出数据是08H,输入数据无效表明是读访存,T4上升沿到达后R2寄存器值由0变为8H。可以在仿真过程的每个T周期停止下来查看器件工作状态和数据的变化,轻松理解CPU的操作控制功能。

3 本文CPU设计方法在计算机组成原理课程实践教学中的应用

LogiSim仿真界面的多样可视化效果,可以在计算机组成原理实践教学中提供许多帮助。例如在讲授机器码及补码的加法/减法运算时,直接在FA的数据仿真过程建立溢出的概念和真值与补码之间的关系,讲授存储器容量扩展与连接时可以在仿真过程中,形象描述出不同访存地址选中不同芯片中的单元进行访问。

计算机组成原理的实践教学过程中,给学生布置了多功能ALU、通用寄存器阵列等模块的设计任务后,教师可以在仿真平台设计一个自动检测并给予评分的仿真测试工具,极大提高工作效率,减少教师审阅学生设计项目的工作量。图10给出了ALU模块的自动检测仿真界面,要求学生提交的ALU输入输出引脚按规范的要求设置,检测时只需要把ALU载入就可以自动完成连接,运行仿真就可以在图(b)的评分界面看到该器件设计的错误之处和按权值设定给出的评分[17]。

(a)ALU设计模块检测界面

(b)ALU设计模块评分界面

4 结 语

CPU设计在《计算机组成原理》课程的学习过程中具有非常重要的意义,基于LogiSim仿真平台的CPU设计方法,能够帮助学生快速完成设计过程。仿真时能够以一种直观、易懂的形式给出输出,可以按需设计输出的仿真界面,学生分析仿真数据更简单明了,有助于理解CPU的工作过程与模型机中的数据驱动。同时也方便教师在理论教学中应用仿真过程描述抽象的概念,设计检测和评分工具实现对学生设计项目的自动校验。和其它硬件设计语言的仿真平台相比,在培养以逻辑设计能力为主的计算机系统思维能力方面,本文给出的设计方法具有突出的优势。《计算机组成原理》课程中,还存在许多内容重要、概念抽象、晦涩难懂的知识点,例如IEEE754浮点数的四则运算过程及流水线工作方式,Cache、主存、辅存三级存储体系之间的地址转换,及多级中断嵌套工作模式等。后续我们将应用LogiSim仿真平台完成这些知识点的设计,给学生提供更多易懂的仿真界面,帮助学生深入掌握相应知识,提高他们的计算机系统思维能力和设计能力。

猜你喜欢

器件指令界面
国企党委前置研究的“四个界面”
ARINC661显控指令快速验证方法
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
人机交互界面发展趋势研究
杀毒软件中指令虚拟机的脆弱性分析
旋涂-蒸镀工艺制备红光量子点器件
手机界面中图形符号的发展趋向
面向高速应用的GaN基HEMT器件
中断与跳转操作对指令串的影响
一种加载集总器件的可调三维周期结构