0 引 言
CPU设计是计算机组成原理课程中的重要实验内容,是计算机系统能力培养中的一个至关重要环节,目前国内外许多高校的组成原理课程中都安排有CPU设计[1-2]。由于CPU设计会涉及运算器、控制器、寄存器、存储器等众多基本核心部件与数据通路、中断等系统机制,以及C类的高级语言代码编写,需要综合掌握的知识点较多,而且这些知识点间的联系紧密又错综复杂,因此对于一般高校的入门级学生来说具有一定难度,是学生较“怵”的内容。基于Dream Logic的CPU仿真设计方法,结合计算机组成原理的实验内容与MOV、ADD、JMP等汇编指令进行仿真应用和实践;CPU设计以部件—模块—系统的方式进行,涉及硬件原理图的绘制与软件代码编写,集数字电路与计算机组成原理实验内容为一体,是学生学习CPU设计、进行硬件仿真实验的好帮手。
1 Dream Logic仿真工具
Dream Logic是一款完全接入到CodeCode.net(计算机专业新工科建设平台)的高性能虚拟软件,具有强大的仿真开发与设计功能,主要体现在:①提供了丰富的数字和模拟器件、数字芯片和逻辑门等多个元器件库,能满足不同规模的电路与系统设计需求,用户也可以根据自己的需要方便、快速绘制自己的元器件或原理图;②提供了寄存器、总线收发器、存储器、总线等部件模块,以及通过这些部件所设计好的处理器和流水线等子功能模块,各个模块可以直接单独使用和多次重复使用,用户可以仿真应用这些模块,也可以完全按照自己的需求设计所有的部件和模块;③具有完全可视化的交互式仿真功能,通过交互式控制器件,用户可以随时修改、选择电路中的高低电平数字源及单步时钟,可以通过数字探针、数码管、逻辑分析仪等可视化手段随时掌握电路的工作情况及各种工作状态,对于有问题的可以迅速定位错误原因;④为8086、MIPS处理器提供了C语言编写的开源的指令汇编器和微指令汇编器,用户通过修改源代码就可以添加自己所设计的汇编指令和微指令,用户也可以编写新的汇编器和微指令;⑤可以用于“数字逻辑”“计算机组成原理”等课程的仿真实验使用,也可以通过开发元器件或整合模块进行课程设计、毕业设计等创新设计与开发。
2 CPU仿真设计
2.1 总体设计
CPU设计的总体结构如图1所示,其中硬件部分采用了自底向上的模块设计方法,包括运算器、控制器、寄存器组、程序计数器、存储器、硬中断控制器、输入/输出共七大模块,各个模块主要由逻辑门和功能芯片等模拟器件组成,各模块之间按照同步时序电路原则,通过8位数据总线和地址总线相连接。其中的寄存器组模块用于存放指令执行过程中临时用到的操作数或操作过程中产生的中间结果和最终结果;运算器模块用于完成指令的加减法、移位等核心的算术运算与逻辑运算操作;控制器模块通过多个控制信号完成协调和指挥整个模型机的操作;程序计数器模块用于确保程序的顺序执行或跳转执行;存储器模块由1块RAM芯片和1个总线收发器构成,用于存放程序执行过程中用到的指令、数据和测试用例程序;硬中断控制器模块用于模拟中断处理的过程,由中断请求寄存器、优先级判别器和中断服务寄存器构成;输入输出模块模拟所连接的外部设备,实现输入/输出功能[3-4]。
软件部分主要包括汇编指令系统、汇编器与微指令功能模块的设计。
2.2 运算器设计
运算器ALU模块的主要功能是完成指令的算术、逻辑运算与移位操作,主要由2个数据寄存器A与B、2片4位的74LS181芯片、专用乘法器、标志寄存器以及部分逻辑门构成(如图2所示)。A与B寄存器存放运算需要的操作数,它们的输入端连接数据总线,使能端分别连接A_REG_EN和B_REG_EN信号,输出端的低4位作为第一片74LS181的输入端,高4位作为第二片74LS181的输入端;2片74LS181芯片通过级联可以完成8位运算操作,它们的输出端经过总线收发器D_GATE连接到数据总线。标志寄存器Flag中设置了2个标志位CF(进位标志位)和ZF(零标志位),其清零端与RESET信号相连,使能端与Flag_REG_EN信号相连,输入端的低2位连接最终计算出的ZF与CF值,输出端的低2位连接ZF与CF信号。
2.3 指令系统设计
指令系统是CPU设计的起始点和基本依据,与硬件结构的复杂程度密切相关[5]。设计指令系统的核心问题是指令格式和功能的选定,涉及指令的寻址方式与指令的编码格式[6]。本设计中的指令寻址方式包括立即寻址、寄存器寻址、直接寻址和寄存器间接寻址;设计的指令包括算术运算指令、数据传送指令、位操作指令、转移指令等共54条。本指令系统的设计思路为大多数指令的机器码是单字节,也有的是双字节,但不管是单字节还是双字节指令,第一个机器码字节的高6位固定为操作码,低2位为地址码,用于表示选中的寄存器编号。6位操作码可编码64条指令,但本次只用到了其中的59个指令编码。另外,因为INT(软中断)、硬中断、LEA和CALL这4条指令的微指令太长,一条指令占用2个指令编码,因此实际共设计了54条指令。表1中为节选的部分指令的机器码及其指令功能的指令示例,剩余的5条操作码供以后增加新功能等创新设计时使用。
本设计中所用的微指令有数据转移微指令path、占位微指令dup、空指令null、目标操作数加1微指令inc、复位微指令reset,每条指令执行完毕后,查询是否有中断请求的微指令ask_for_int、记录中断号的微指令inta1、读取中断号写入中断向量寄存器IA中的微指令inta2以及清除中断服务寄存器ISR中的标志位微指令eoi,其中path与dup微指令包含2个操作数,inc与reset微指令包含1个操作数,null、ask_for_int、inta1、inta2和eoi微指令为无操作数。通过这些微指令,各组合器件就能够实现所有汇编指令的功能。在编写微指令程序时,注意需确保所有指令执行的第一步操作均为取指操作,可以理解为第0条指令为取值指令,另外要确保每一条指令对应的微指令入口地址必须是8的倍数,若存在一条指令对应的微指令条数少于8的倍数,则需要用占位微指令dup进行补充。
2.4 微指令设计
微指令的功能是对微指令代码进行处理,生成存放在只读存储器ROM中的控制信号编码文件以及仿真时显示的调试文件[7-8]。每条微指令占4个字节,对应的控制信号各不相同,每条指令的微指令入口地址需与指令机器码的高6位对应。本微指令设计中的微指令代码采用2017版C语言编写,设计流程图如图3所示。所生成的目标文件rom.rxm中存放控制信号编码,列表文件rom.lst中存放每一条微指令及其行号、微指令所表示的控制信号编码以及该条微指令存放的地址;调试文件rom.dbg中存放模数、版本号、源代码和列表文件的路径以及代码行数据库中的所有内容。处理流程如图4所示。
3 CPU应用实践
3.1 运算器实验
运算器模块主要由2个4位的算术逻辑运算器74LS181构成[9-10],74LS181的功能见表2。
本实验以计算3+2之和的无进位加法算术运算为示例进行。在8位数据输入源中输入3,置A_REG_EN为0、B_REG_EN为1,给予1个时钟的上升沿,将数据3写入累加器A中;再置A_REG_EN为1、B_REG_EN为0,写数据2给工作寄存器B中,写入数据后的寄存器原理图如图5所示。
进行无进位的加法运算,据表2中的规则,需先将S3~S0信号设置为1001,M信号设置为低电平0、C信号设置为高电平1,然后更改信号输入源,将数据输出三态门使能信号设置为0,使累加器A和标志寄存器的使能信号有效,其余三态门信号设置为1[11],此时即可在数据输出端看到运算结果,如图6所示。
3.2 CPU模型机实验
仿真设计完毕的整机CPU模型机如图7所示,基于此模型机进行计算机组成原理的应用实践,示例程序源代码如图8所示。
本示例程序的功能是将立即数16与存储在指定存储单元中的数据-1进行相加运算,并将结果15(0FH中)存入累加器A中,操作码涉及MOV传送指令、ADD算术运算指令与JMP转移指令,操作数涉及寄存器R0、立即数16、累加器A以及由num定义的存储单元。运行前,需先通过汇编器对源程序进行汇编,生成的目标代码就被写进了主存储器(如图9所示)。在Dream Logic的仿真工作界面显示有两个代码窗口,一个是“源代码1”窗口(用于存放随机存储器RAM1中的测试程序),另一个是“源代码2”窗口(用于存放只读存储器ROM中的微指令),并同时伴有2个箭头光标分别指向当前正在执行的指令代码和微指令代码。
操作运行过程:在没有给予高电平的初始状态下,汇编源代码处与微指令源代码处的光标都停留在第一条指令(如图9(a)和9(b)所示);将按键1置高电平(表示当前为单步运行),按键2置低电平(不允许中断),当前PC为00H,对应取址微指令操作,若给予一个时钟上升沿(按键C),指向指令编码20H,控制器得到指令编码,找到对应微指令mov rx,immediate的入口地址100H(如图10所示),完成对应的微指令操作;当再次按键C给予时钟上升沿后,uPC+1(执行inc pc微指令)指向下一条微指令,此时PC为01H,对应操作数编码为立即数16(10H),再次按下键C,执行“path rx,[pc]”微指令,将01H中存放的数据10H传送给R0寄存器,继续按下键C直到执行完“reset uPC”微指令,使得uPC复位,重新回到取指操作,此时PC变为02H,对应的指令编码为0CH。至此,第一条指令将数据16送入寄存器R0中的操作执行完毕,执行结果如图11所示。
按此原理,再顺序执行第二条、第三条,直到最后一条指令jmp Endless_Loop。
4 实践体会与成效
我校于2016年引入了Dream Logic仿真工具并将其与实物实验箱相结合应用在了计算机组成原理的实验课程。CPU设计作为计算机组成原理课程中的综合实验,其对理论与实验都起到了至关重要的作用。教学体会如下。
(1)Dream Logic提供的图形界面快捷、方便,为用户提供的100多种常用模拟和数字器件可被任意调用,操作调试简单、方便,实验结果一目了然,易学、易用,学生通过成功的实验,成就感倍增,能培养浓厚的实验兴趣。
(2)Dream Logic虚拟器件仿真效果逼真、准确,譬如发光二极管可以发出红、黄、绿光,逻辑探头可以像逻辑笔那样直接显示电路节点的高低电平,继电器和开关的触点可以分、合动作,熔断器可以烧断,灯泡可以烧毁,蜂鸣器可以发出不同音调的声音,电位器的触点可以按比例移动改变电阻值,学生能更清楚硬件操作的执行流程和模块间的数据流动,实验透明度高,有触摸到真实元器件中的感觉。
(3)使用Dream Logic有助于系统能力的培养,譬如指令系统的设计,其不仅仅只是单条指令的功能实现,还关联到设计人员对整体结构的理解,对各个部件功能的调用和实现,对指令的执行流程和各个控制信号等的设计以及C代码的编程应用等,能将软硬件设计真正结合在一起,能实现数字逻辑与计算机组成原理的贯通学习[12]。
(4)“虚拟仿真+实物现做”实验模式,克服了传统的单纯实物实验箱所固有的线路结构和空间时间固定、资源有限、高成本、高损耗、低寿命,学生很难参与到其中的细节设计和扩展设计等不足,有效发挥了仿真工具带来的能拓展实验空间、延长实验时间,能有效延伸课堂实验教学,能为学生进行创新型或研究性实验提供更灵活、便利的条件和手段[13]。
到目前为止,我校已在5届计算机与信息安全专业开设的计算机组成原理课程中应用实践Dream Logic,取得了令人满意的教学效果。主要体现在:①计算机组成原理课程的结课成绩,优秀率由传统实验模式下的不足5%提高到11%,不及格率由原来的近20%下降到4%。②对于CPU设计综合实验,学生从查找资料到设计方案论证,再到最终调试,都投入了极大的热情和精力,小组间经常为一个问题争得面红耳赤,也经常到了饭点时还依依不舍不愿离开实验室,学生设计的指令条数也逐年在增多。③从参加大创、竞赛和毕业设计看,选择计算机硬件题目的人数由原来的只是凤毛麟角,变为了现在能占到题目总数的35%。近5年来,获得由学校组织的“电子设计竞赛”一等奖名单中,每年都有计算机专业学生;学生在参加天津市启诚科技等单位组办的各种竞赛中,也都能获得一等奖或二等奖的不同奖项;④从学生书写的实验报告也可以看出,学生做完CPU设计综合实验后,普遍充满了自豪感和成就感,不再惧怕硬件设计及底层的软件开发。
本CPU仿真设计还存有一些不足,譬如虚拟器件库存中设计好的仪器仅仅是逻辑分析仪,CPU仿真只是实现了8位模型机的设计。在此基础上,我们仍将继续研究开发更多实用的器件,像数字电流表、数字电压表、数字万用表、数字存储示波器、数字函数发生器、数字信号发生器及可直接显示电路频率响应的波特图仪、数字信号等;继续研究实践16/32位的CPU乃至多周期多级流水线的MIPS处理器设计;在编写汇编器和微指令代码的基础上,结合操作系统和编译原理课程,鼓励学生自行设计编译器,将仿真平台用于“微机原理与接口技术”“计算机体系结构”等硬件课程,为真正实现计算机的多门核心课程——数字逻辑+计算机组成原理+汇编语言+操作系统+编译原理的有效贯通和综合奠定坚实基础。
参考文献:
[1] 王力生, 余智铭, 张冬冬.“计算机组成原理”实验CPU设计方法研究[J]. 实验技术与管理2018, 35(5): 1-5, 9.
[2] 吴继明, 曾碧卿. 一种高效的CPU设计方法及其在计算机组成原理课程中应用[J]. 实验室研究与探索, 2018, 37(9): 147-153.
[3] 徐爱萍, 张玉萍, 涂国庆. 基于VHDL之CPU设计与实践[J]. 实验室研究与探索, 2014, 33(5): 120-124.
[4] 王玉见, 朱宝松, 刘渝妍, 等. 基于VHDL的16位CPU的设计与实现探究[J]. 昆明学院学报, 2019, 41(3): 99-103, 107.
[5] 杨全胜, 钱瑛, 任国林, 等. CPU设计实践教程: 从数字电路到计算机组成[M]. 北京: 清华大学出版社, 2020.
[6] 张磊, 王建萍, 郑榕, 等. 基于VerilogHDL智能评测平台的“计算机组成原理”课程贯通式实验模式[J]. 实验技术与管理, 2021, 38(3): 236-241.
[7] 高建荣. 基于微程序控制器的在线指令系统的设计[J]. 计算机工程与设计, 2004(12): 2366-2368.
[8] 陆明洲, 何菊. 基于Multisim的计算机组成原理实验仿真[J]. 实验技术与管理, 2007(12): 94-98.
[9] 谭志虎, 胡迪青, 秦磊华.“计算机组成原理”课程设计的改革[J]. 电气电子教学学报, 2016, 38(6): 110-112, 134.
[10] 曹宇轩, 李波, 孔金祥, 等. 硬件实验虚拟实验平台的建设[J]. 现代信息科技, 2020, 4(1): 84-85, 87.
[11] Haag J, Vranken H, Eekelen M. A virtual classroom for cybersecurity education[C]. Berlin: Springer, 2019.
[12] 屈泳, 阮小军, 王三华. 计算机硬件虚拟仿真实验平台的建设与设计[J]. 实验室研究与探索[J]. 2018, 37(12): 116-119.
[13] 齐歆瑜, 陈章龙, 涂时亮. 一种指令特性可扩展的汇编器体系结构[J]. 计算机应用与软件, 2010, 27(10): 255-257.
基金项目:中国民航大学教育教学改革研究项目(CAUC-2021-B1-065);2023年天津市教改立项项目“进阶式思维培养模式下的民航特色计算机类专业实践教学改革研究”(B231005915)。
第一作者简介:李珍香,女,中国民航大学副教授,研究方向为嵌入式系统开发与计算机硬件教学,zx-li@cauc.edu.cn。
引文格式:李珍香,王家亮. 基于Dream Logic的CPU仿真设计与实践[J]. 计算机教育, 2023(9):192-200.
转自:“计算机教育”微信公众号
如有侵权,请联系本站删除!