计算机组织与体系结构课程设计 - 实验报告
一. 实验目的
- 深入理解基本模型计算机的功能、组成知识。
- 深入学习计算机各类典型指令的执行流程。
- 学习微程序控制器的设计过程和相关技术,掌握 LPM_ROM 的配置方法。
- 自己设计 5~8 条机器指令,并编写相应的微程序,上机调试,掌握计算机整机概念。掌握微程序的设计方法,学会编写二进制微指令代码表,全面了解并掌握微程序控制方式计算机的设计方法。
二. 实验原理
实验中,计算机数据通路的控制将由微过程控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
为了向 RAM 中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序。
- 存储器读操作(KRD):下载实验程序后按总清除按键(CLR)后,控制台 SWA、SWB 为 “0 0” 时,可对 RAM 连续手动读操作。
- 存储器写操作(KWE):下载实验程序后按总清除按键(CLR)后,控制台 SWA、SWB 为 “0 1” 时,可对 RAM 连续手动写操作。
- 启动程序(RP):下载实验程序后按总清除按键(CLR)后,控制台 SWA、SWB 为 “1 1” 时,即可转入到微地址 “01” 号 “取指令” 微指令,启动程序运行。
设计指令说明
其中 IN 为单字长(8 位二进制),其余为双字长指令,XX H
为 addr 对应的十六进制地址码。
当全部微程序设计完毕后,应将每条微指令代码化,设计出二进制微代码表(前提是去弄懂每一位的含义)。笔者在设计的时候为了方便查看,在下表中将每个在相同模块里的微指令用相同的颜色进行了标识。
微程序流程图
三. 实验步骤
(1)微程序的输入
根据设计出来的二进制微代码表,将微指令按顺序放入 LPM_ROM 配置文件 ROM_5.mif 里。
(2)编辑RAM中的内容
(3)指令功能的验证
编译工程文件,将 .sof 文件上传至实验箱内。
按 1 次系统复位键 8 ,并置键 8 为高电平,使 CPU 允许正常工作。
控制开关(键 4 、键 3 )设置为
SWB,SWA = 1,1
,处于程序执行方式。通过键 2 、键 1 输入运算数据,如
34H
,按 4 次单步键 7,产生 2 个脉冲,执行 2 条微指令,微程序流程进入到控制台的RP(11)
,此时的微指令地址是23
,微指令码MC = 008001
,IN = 34H
。再用键 7 产生 1 个脉冲,执行 1 条微指令,微程序流程进入到
运行微程序
的最上块: 此时PC = 00
送地址寄存器AR = 00
,PC
自动加 1 ,PC = 01
,MC = 01ED82
,IN = 34H
。键 7 产生 1 个脉冲,执行微指令
MC = 00C048
,RAM 中的第一条指令码00
进入
BUS
,再由BUS
进入指令寄存器IR = 00
。键 7 再进 1 个脉冲,进入MC = 001001
,执行指令IN
,送数IN -> R0 = 34H
。键 7 产生 1 个脉冲,执行完
IN
指令后,返回到初始端,执行微指令MC = 01ED82
。键 7 产生 2 个脉冲后,执行微指令
MC = 01ED83
,即执行SUB
指令的第 1 步:PC
送AR = 02
,PC + 1 = 03
,这时RAM
中在02
地址的0AH
进入BUS = 0A
。键 7 产生 1 个脉冲,执行微指令
MC = 00E004
,即执行SUB
指令的第 2 步:BUS
数据送AR = 0A
,由于0A
是SUB
指令的加数的间接地址,而在地址0A
中放有01H
,最后完成的减法是34H - 01H = 33H
。键 7 产生 1 个脉冲,
MC = 00B005
,执行SUB
的第 3 步:将RAM
中0A
地址的数据01H
送BUS
,再送DR2 = 01H
。注意,此时指令寄存器IR
中仍放有SUB
的操作码10H
,PC = 03
指向下一条指令AND
。键 7 产生 1 个脉冲,
MC = 01A206
,执行SUB
的第 4 步(微地址是05
),R0
送DR1 = 34H
。键 7 产生 1 个脉冲,
MC = 619A01
,执行SUB
的最后一步,DR1 - DR2 = 33H
,通过总线BUS
送R0 = 33H
。 键 7 再产生 1 个脉冲,返回到初始端,执行微指令MC = 01ED82
。键 7 产生 2 个脉冲,
MC = 01ED95
,执行AND
指令;键 7 再 4 个脉冲后,位运算与的结果33H & 12H = 10H
被写入R0
,即R0 = 10H
。键 7 产生 1 个脉冲后返回到初始端,执行微指令MC = 01ED82
。键 7 产生 2 个脉冲,
MC = 01ED99
,执行MOV
指令;键 7 再 2 个脉冲后,RAM
中地址为0C
的数字00H
被写入DR2
,即DR2 = 00H
。键 7 产生 1 个脉冲后返回到初始端,执行微指令MC = 01ED82
。键 7 产生 2 个脉冲,
MC = 01A21B
,执行INC
指令;键 7 再 1 个脉冲后,R0
中的值加 1,即R0 = 11H
。键 7 产生 1 个脉冲后返回到初始端,执行微指令MC = 01ED82
。
附:实验过程中的图片
四. 实验感想
由于「计算机组织与体系结构」是上学期的课程,时隔将近 4 个月后再接触到相关的知识,有一种熟悉又陌生的感觉,当时学到的一些知识已经有所遗忘。所以笔者在设计指令之前,又对 CPU 、数据通路、总线等相关知识进行了回顾与复习。在这次漫长的设计实验以后,我对这方面的知识理解得以更加深刻。
设计指令并构造 24 位微代码是十分辛苦的,在设计第一条指令时花费了很长时间。随着自己对每一位的含义的越来越熟悉,同时也发现了不同指令在某些地方的相似之处,我明白了老师课前所提到的“开头设计指令很慢,之后会越来越快”的含义:有些指令有许多部分是很相似的,在代码上的不同很少,主要是会因为执行下一条指令的位置不同而不同。
同时当时自己为了设计方便,构建微代码表时基本把相同的指令用到的微操作都放在了一起,不断向微地址大的地方累加,这也造成了本人微代码表中会有空行的出现(详见下图),这也是我在实验中意识到自己不足的一个地方。
总的来说这次实验虽然辛苦,但是我收获颇丰。当理论与实际结合起来,并通过自己的努力验证了理论的正确性的时候,心中的激动和成就感是很足的。
最后感谢老师在实验中耐心的答疑与同伴在我出现问题时的“拔刀相助”。
计算机组织与体系结构课程设计 - 实验报告