1、第 9 期2023 年 9 月 10 日计 算 机 教 育Computer Education中图分类号:G642192基于 DreamLogic 的 CPU 仿真设计与实践李珍香,王家亮(中国民航大学 计算机学院,天津 300300)摘 要:针对计算机组成原理课程中的重要实验内容“CPU 设计”中存在的一些难点问题,提出引入Dream Logic 仿真工具,通过 CPU 总体设计及 CPU 整机模型机中的运算器设计、指令系统设计与微指令设计示例,阐述基于 Dream Logic 的硬件基本部件仿真设计和软件设计方法,并结合 MOV、ADD等汇编指令及计算机组成原理实验中的寄存器和算术运算实验
2、,介绍对 CPU 模型机进行的实验测试,最后说明教学实践效果。关键词:CPU 设计;Dream Logic;CPU 仿真;计算机组成原理文章编号:1672-5913(2023)09-0192-090引 言CPU 设计是计算机组成原理课程中的重要实验内容,是计算机系统能力培养中的一个至关重要环节,目前国内外许多高校的组成原理课程中都安排有 CPU 设计1-2。由于 CPU 设计会涉及运算器、控制器、寄存器、存储器等众多基本核心部件与数据通路、中断等系统机制,以及 C 类的高级语言代码编写,需要综合掌握的知识点较多,而且这些知识点间的联系紧密又错综复杂,因此对于一般高校的入门级学生来说具有一定难度
3、,是学生较“怵”的内容。基于 Dream Logic的 CPU 仿真设计方法,结合计算机组成原理的实验内容与 MOV、ADD、JMP 等汇编指令进行仿真应用和实践;CPU 设计以部件模块系统的方式进行,涉及硬件原理图的绘制与软件代码编写,集数字电路与计算机组成原理实验内容为一体,是学生学习 CPU 设计、进行硬件仿真实验的好帮手。1DreamLogic仿真工具Dream Logic 是一款完全接入到 CodeC(计算机专业新工科建设平台)的高性能虚拟软件,具有强大的仿真开发与设计功能,主要体现在:提供了丰富的数字和模拟器件、数字芯片和逻辑门等多个元器件库,能满足不同规模的电路与系统设计需求,用
4、户也可以根据自己的需要方便、快速绘制自己的元器件或原理图;提供了寄存器、总线收发器、存储器、总线等部件模块,以及通过这些部件所设计好的处理器和流水线等子功能模块,各个模块可以直接单独使用和多次重复使用,用户可以仿真应用这些模块,也可以完全按照自己的需求设计所有的部件和模块;具有完全可视化的交互式仿真功能,通过交互式控制器件,用户可以随时修改、选择电路中的高低电平数字源及单步时钟,可以通过数字探针、数码管、逻辑分析仪等可视化手段随时掌握电路的工作情况及各种工作状态,对于有问题的可以迅速定位错误原因;为 8086、MIPS 处理器提供了 C 语言编写的开源的指令汇编器和微指令汇编器,用户通过修改源
5、代码就可以添加自己所设计的汇编指令和微指令,用户也可以编写新的汇编器和微指令;可以用于“数字逻辑”“计算机组成原理”等课程的仿真实验使用,也可以通过开发元器件或整合模块进行课程设计、毕业设计等创新设计与开发。基金项目:中国民航大学教育教学改革研究项目(CAUC-2021-B1-065);2023 年天津市教改立项项目“进阶式思维培养模式下的民航特色计算机类专业实践教学改革研究”(B231005915)。第一作者简介:李珍香,女,副教授,研究方向为嵌入式系统开发与计算机硬件教学,zx-。实验与实训第 9 期1932CPU仿真设计2.1总体设计CPU 设计的总体结构如图 1 所示,其中硬件部分采用
6、了自底向上的模块设计方法,包括运算器、控制器、寄存器组、程序计数器、存储器、硬中断控制器、输入/输出共七大模块,各个模块主要由逻辑门和功能芯片等模拟器件组成,各模块之间按照同步时序电路原则,通过 8 位数据总线和地址总线相连接。其中的寄存器组模块用于存放指令执行过程中临时用到的操作数或操作过程中产生的中间结果和最终结果;运算器模块用于完成指令的加减法、移位等核心的算术运算与逻辑运算操作;控制器模块通过多个控制信号完成协调和指挥整个模型机的操作;程序计数器模块用于确保程序的顺序执行或跳转执行;存储器模块由 1 块 RAM 芯片和 1 个总线收发器构成,用于存放程序执行过程中用到的指令、数据和测试
7、用例程序;硬中断控制器模块用于模拟中断处理的过程,由中断请求寄存器、优先级判别器和中断服务寄存器构成;输入输出模块模拟所连接的外部设备,实现输入/输出功能3-4。软件部分主要包括汇编指令系统、汇编器与微指令功能模块的设计。硬件设计运算器控制器寄存器组程序计数器存储器硬中断控制器输入/输出中断请求寄存器优先级判别器中断服务寄存器CPU 设计软件设计汇编器微指令图 1 CPU 仿真设计总体结构2.2运算器设计运算器 ALU 模块的主要功能是完成指令的算术、逻辑运算与移位操作,主要由 2 个数据寄存器 A 与 B、2 片 4 位的 74LS181 芯片、专用乘法器、标志寄存器以及部分逻辑门构成(如图
8、 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
9、与 CF 信号。2.3指令系统设计指令系统是 CPU 设计的起始点和基本依据,与硬件结构的复杂程度密切相关5。设计指令系统的核心问题是指令格式和功能的选定,涉及指令的寻址方式与指令的编码格式6。本设计中的指令寻址方式包括立即寻址、寄存器寻址、直接寻址和寄存器间接寻址;设计的指令包括算术运算指令、数据传送指令、位操作指令、转移指令等共 54 条。本指令系统的设计思路为大多数指令的机器码是单字节,也有的是双字节,但不管是单字节还是双字节指令,第一个机器码字节的高 6 位固定为操作码,低 2 位为地址码,用于表示选中的寄存器编号。6 位操作码可编码64 条指令,但本次只用到了其中的 59 个指令编码
10、。另外,因为 INT(软中断)、硬中断、LEA和 CALL 这 4 条指令的微指令太长,一条指令占用 2 个指令编码,因此实际共设计了 54 条指令。表 1 中为节选的部分指令的机器码及其指令功能的指令示例,剩余的 5 条操作码供以后增加新功能等创新设计时使用。2023194计 算 机 教 育Computer Education表 1 部分指令的机器码与指令功能示例指令示例机器码指令功能MOV A,RX000001XX将寄存器 RX 中的值传送给累加器 ALEA A,symbol001010XX将 PC 指向的存储单元的地址传送给累加器 AADD A,RX001100XX将寄存器 RX 中的值
11、与累加器 A 中的值相加,将结果传送累加器 AAND A,symbol011110XX将 PC 指向的存储单元中的值与累加器 A 中的值按位逻辑“与”运算,将结果传送给累加器 ASHL A100100XX将累加器 A 中的值逻辑左移 1 位,将结果送回累加器 AJMP symbol101001XX跳转到 PC 指向的地址JC symbol101010XX若进位标志为 1,则跳转到 pc 指向的地址IN101100XX将输入寄存器 RIN 中的值传送给累加器 AMUL A,RX110111XX将寄存器 RX 中的值与累加器 A 中的值相乘,结果传送给累加器 ACALL symbol110001X
12、X调用 PC 为首址的子程序RET110011XX子程序调用返回INT immediate101110XX软中断,中断号为立即数 immediate图 2 运算器设计相邻的这2个方块为累加器A和工作寄存器B相邻的2个小方块为74LS181芯片此方块为乘法器相邻的4个方块为8位总线收发器本设计中所用的微指令有数据转移微指令path、占位微指令 dup、空指令 null、目标操作数加 1 微指令 inc、复位微指令 reset,每条指令执行完毕后,查询是否有中断请求的微指令 ask_for_int、记录中断号的微指令 inta1、读取中断号写入中断向量寄存器 IA 中的微指令 inta2 以及实验
13、与实训第 9 期195清除中断服务寄存器 ISR 中的标志位微指令 eoi,其中 path 与 dup 微指令包含 2 个操作数,inc 与reset 微指令包含 1 个操作数,null、ask_for_int、inta1、inta2 和 eoi 微指令为无操作数。通过这些微指令,各组合器件就能够实现所有汇编指令的功能。在编写微指令程序时,注意需确保所有指令执行的第一步操作均为取指操作,可以理解为第 0 条指令为取值指令,另外要确保每一条指令对应的微指令入口地址必须是 8 的倍数,若存在一条指令对应的微指令条数少于 8 的倍数,则需要用占位微指令 dup 进行补充。2.4微指令设计微指令的功能
14、是对微指令代码进行处理,生成存放在只读存储器 ROM 中的控制信号编码文件以及仿真时显示的调试文件7-8。每条微指令占 4 个字节,对应的控制信号各不相同,每条指令的微指令入口地址需与指令机器码的高 6 位对应。本微指令设计中的微指令代码采用 2017 版C 语言编写,设计流程图如图 3 所示。所生成的目标文件 rom.rxm 中存放控制信号编码,列表文件 rom.lst 中存放每一条微指令及其行号、微指令所表示的控制信号编码以及该条微指令存放的地址;调试文件 rom.dbg 中存放模数、版本号、源代码和列表文件的路径以及代码行数据库中的所有内容。处理流程如图 4 所示。3CPU应用实践3.1
15、运算器实验运算器模块主要由 2 个 4 位的算术逻辑运算器 74LS181 构成9-10,74LS181 的功能见表 2。开始定义关键字、寄存器与操作码等建立单/双操作数微指令结构体数组包含关键字与控制信息编码建立关键字结构体数组包括关键字与解析函数处理用户输入的命令行参数汇编微指令源程序生成保存机器码的目标文件 rom.rox生成列表文件 rom.lst生成调试文件 rom.dbg结束图 3 微指令设计流程图表 2 74LS181 功能表方式M=1逻辑运算M=0 算术运算S3S2S1S0C=1(无进位)C=0(有进位)0 0 0 0F=AF=AF=A+10 0 0 1F=AB+F=AB+F=
16、()1AB+0 0 1 0F=ABF=AB+F=()1AB+0 0 1 1F=0F=负 1F=00 1 0 0F=ABF=A 加()A BF=1AAB+0 1 0 1F=BF=()AB+加 ABF=()1ABAB+0 1 1 0F=ABF=A 减 B 减 1F=AB0 1 1 1F=ABF=AB 减 1F=AB1 0 0 0F=AB+F=A 加 ABF=1AAB+1 0 0 1F=ABF=A 加 BF=1AB+2023196计 算 机 教 育Computer EducationYN结束Y源程序分析完毕?N输出错误信息N匹配关键字YY通过对应的解析函数处理信息有操作数?是立即数?开始NY读取一行
17、微指令,进行信息剥离能打开微指令源程序?为空行?Y输出缺失操作数的微指令的行号与关键字N输出操作数错误的微指令的行号与关键字对应指令的操作数有错误?NN查表得到对应指令的行号?获得微指令及其行号、对应的机器码、存放机器码的地址等信息,写入代码行数据库和机器码数组Y图 4 处理微指令源程序的流程图续表 2方式M=1逻辑运算M=0 算术运算S3S2S1S0C=1(无进位)C=0(有进位)1 0 1 0F=BF=()AB+加 ABF=()1ABAB+1 0 1 1F=ABF=AB 减 1F=AB1 1 0 0F=1F=A 加 AF=1AA+1 1 0 1F=AB+F=()AB+加 AF=()1ABA
18、+1 1 1 0F=AB+F=()AB+加 AF=()1ABA+1 1 1 1F=AF=A 减 1F=A实验与实训第 9 期197本实验以计算 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,然
19、后更改信号输入源,将数据输出三态门使能信号设置为0,使累加器 A 和标志寄存器的使能信号有效,其余三态门信号设置为 111,此时即可在数据输出端看到运算结果,如图 6 所示。图 5 写入数据后的寄存器图 6 加法运算测试结果2023198计 算 机 教 育Computer Education3.2CPU 模型机实验仿真设计完毕的整机 CPU 模型机如图 7 所示,基于此模型机进行计算机组成原理的应用实践,示例程序源代码如图 8 所示。图 7 CPU 整机模型机图 8 测试用汇编示例源程序本示例程序的功能是将立即数 16 与存储在指定存储单元中的数据-1 进行相加运算,并将结果 15(0FH 中
20、)存入累加器 A 中,操作码涉及 MOV 传送指令、ADD 算术运算指令与JMP 转移指令,操作数涉及寄存器 R0、立即数16、累加器 A 以及由 num 定义的存储单元。运行前,需先通过汇编器对源程序进行汇编,生成的目标代码就被写进了主存储器(如图 9 所示)。在 Dream Logic 的仿真工作界面显示有两个代码窗口,一个是“源代码 1”窗口(用于存放随机存储器 RAM1 中的测试程序),另一个是“源代码 2”窗口(用于存放只读存储器 ROM 中的微指令),并同时伴有 2 个箭头光标分别指向当前正在执行的指令代码和微指令 代码。操作运行过程:在没有给予高电平的初始状态下,汇编源代码处与微
21、指令源代码处的光标都停留在第一条指令(如图 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”微指令,将 01
22、H 中存放的数据 10H 传送给 R0 寄存器,继续按下键 C 直到执行完“reset uPC”微实验与实训第 9 期199指令,使得 uPC 复位,重新回到取指操作,此时 PC 变为 02H,对应的指令编码为 0CH。至此,第一条指令将数据 16 送入寄存器 R0 中的操作执行完毕,执行结果如图 11 所示。(a)存放 RAM 中的汇编源程序(b)存放 ROM 中的微指令程序图 9 经汇编器汇编后的汇编代码及其微指令代码图 10 找寻对应的微指令图 11 R0 寄存器中的数据按此原理,再顺序执行第二条、第三条,直到最后一条指令 jmp Endless_Loop。4实践体会与成效我校于 201
23、6 年引入了 Dream Logic 仿真工具并将其与实物实验箱相结合应用在了计算机组成原理的实验课程。CPU 设计作为计算机组成原理课程中的综合实验,其对理论与实验都起到了至关重要的作用。教学体会如下。(1)Dream Logic 提供的图形界面快捷、方便,为用户提供的 100 多种常用模拟和数字器件可被任意调用,操作调试简单、方便,实验结果一目了然,易学、易用,学生通过成功的实验,成就感倍增,能培养浓厚的实验兴趣。(2)Dream Logic 虚拟器件仿真效果逼真、准确,譬如发光二极管可以发出红、黄、绿光,逻辑探头可以像逻辑笔那样直接显示电路节点的高低电平,继电器和开关的触点可以分、合动作
24、,熔断器可以烧断,灯泡可以烧毁,蜂鸣器可以发出不同音调的声音,电位器的触点可以按比例移动改变电阻值,学生能更清楚硬件操作的执行流程和模块间的数据流动,实验透明度高,有触摸到真实元器件中的感觉。(3)使用 Dream Logic 有助于系统能力的培养,譬如指令系统的设计,其不仅仅只是单条指2023200计 算 机 教 育Computer Education令的功能实现,还关联到设计人员对整体结构的理解,对各个部件功能的调用和实现,对指令的执行流程和各个控制信号等的设计以及 C 代码的编程应用等,能将软硬件设计真正结合在一起,能实现数字逻辑与计算机组成原理的贯通 学习12。(4)“虚拟仿真+实物现
25、做”实验模式,克服了传统的单纯实物实验箱所固有的线路结构和空间时间固定、资源有限、高成本、高损耗、低寿命,学生很难参与到其中的细节设计和扩展设计等不足,有效发挥了仿真工具带来的能拓展实验空间、延长实验时间,能有效延伸课堂实验教学,能为学生进行创新型或研究性实验提供更灵活、便利的条件和手段13。到目前为止,我校已在 5 届计算机与信息安全专业开设的计算机组成原理课程中应用实践 Dream Logic,取得了令人满意的教学效果。主要体现在:计算机组成原理课程的结课成绩,优秀率由传统实验模式下的不足 5%提高到11%,不及格率由原来的近 20%下降到 4%。对于 CPU 设计综合实验,学生从查找资料
26、到设计方案论证,再到最终调试,都投入了极大的热情和精力,小组间经常为一个问题争得面红耳赤,也经常到了饭点时还依依不舍不愿离开实验室,学生设计的指令条数也逐年在增多。从参加大创、竞赛和毕业设计看,选择计算机硬件题目的人数由原来的只是凤毛麟角,变为了现在能占到题目总数的 35%。近 5 年来,获得由学校组织的“电子设计竞赛”一等奖名单中,每年都有计算机专业学生;学生在参加天津市启诚科技等单位组办的各种竞赛中,也都能获得一等奖或二等奖的不同奖项;从学生书写的实验报告也可以看出,学生做完 CPU 设计综合实验后,普遍充满了自豪感和成就感,不再惧怕硬件设计及底层的软件开发。5结 语本 CPU 仿真设计还
27、存有一些不足,譬如虚拟器件库存中设计好的仪器仅仅是逻辑分析仪,CPU 仿真只是实现了 8 位模型机的设计。在此基础上,我们仍将继续研究开发更多实用的器件,像数字电流表、数字电压表、数字万用表、数字存储示波器、数字函数发生器、数字信号发生器及可直接显示电路频率响应的波特图仪、数字信号等;继续研究实践 16/32 位的 CPU 乃至多周期多级流水线的 MIPS 处理器设计;在编写汇编器和微指令代码的基础上,结合操作系统和编译原理课程,鼓励学生自行设计编译器,将仿真平台用于“微机原理与接口技术”“计算机体系结构”等硬件课程,为真正实现计算机的多门核心课程数字逻辑+计算机组成原理+汇编语言+操作系统+
28、编译原理的有效贯通和综合奠定坚实基础。参考文献: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设计实践
29、教程:从数字电路到计算机组成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 educationC.Berlin:Springer,2019.12 屈泳,阮小军,王三华.计算机硬件虚拟仿真实验平台的建设与设计J.实验室研究与探索J.2018,37(12):116-119.13 齐歆瑜,陈章龙,涂时亮.一种指令特性可扩展的汇编器体系结构J.计算机应用与软件,2010,27(10):255-257.(实习编辑:欧 阳)