计算机组织与体系结构课程设计 - 实验报告

一. 实验目的

  1. 深入理解基本模型计算机的功能、组成知识。
  2. 深入学习计算机各类典型指令的执行流程。
  3. 学习微程序控制器的设计过程和相关技术,掌握 LPM_ROM 的配置方法。
  4. 自己设计 5~8 条机器指令,并编写相应的微程序,上机调试,掌握计算机整机概念。掌握微程序的设计方法,学会编写二进制微指令代码表,全面了解并掌握微程序控制方式计算机的设计方法。

二. 实验原理

实验中,计算机数据通路的控制将由微过程控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

5232aee77d89ec20759eb25c49af21cb.png

为了向 RAM 中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序。

  1. 存储器读操作(KRD):下载实验程序后按总清除按键(CLR)后,控制台 SWA、SWB 为 “0 0” 时,可对 RAM 连续手动读操作。
  2. 存储器写操作(KWE):下载实验程序后按总清除按键(CLR)后,控制台 SWA、SWB 为 “0 1” 时,可对 RAM 连续手动写操作。
  3. 启动程序(RP):下载实验程序后按总清除按键(CLR)后,控制台 SWA、SWB 为 “1 1” 时,即可转入到微地址 “01” 号 “取指令” 微指令,启动程序运行。
设计指令说明

498d8665329b3d4948cb6d48c936cb1f.png

其中 IN 为单字长(8 位二进制),其余为双字长指令,XX H 为 addr 对应的十六进制地址码。

当全部微程序设计完毕后,应将每条微指令代码化,设计出二进制微代码表(前提是去弄懂每一位的含义)。笔者在设计的时候为了方便查看,在下表中将每个在相同模块里的微指令用相同的颜色进行了标识。

53d4b91cfa94e88a67455b96263b9e8f.png

微程序流程图

bba39b2379e62586a8061c7ae1ebed7f.png

三. 实验步骤

(1)微程序的输入

根据设计出来的二进制微代码表,将微指令按顺序放入 LPM_ROM 配置文件 ROM_5.mif 里。

c91eb49d3a92600a73f8f4a67f096efd.jpeg

(2)编辑RAM中的内容

d439bd242100b3e6d33cf99174f57862.jpeg

(3)指令功能的验证
  1. 编译工程文件,将 .sof 文件上传至实验箱内。

  2. 按 1 次系统复位键 8 ,并置键 8 为高电平,使 CPU 允许正常工作。

  3. 控制开关(键 4 、键 3 )设置为 SWB,SWA = 1,1 ,处于程序执行方式。

  4. 通过键 2 、键 1 输入运算数据,如 34H ,按 4 次单步键 7,产生 2 个脉冲,执行 2 条微指令,微程序流程进入到控制台的 RP(11) ,此时的微指令地址是 23,微指令码 MC = 008001IN = 34H

  5. 再用键 7 产生 1 个脉冲,执行 1 条微指令,微程序流程进入到 运行微程序 的最上块: 此时 PC = 00 送地址寄存器 AR = 00PC 自动加 1 ,PC = 01MC = 01ED82IN = 34H

  6. 键 7 产生 1 个脉冲,执行微指令 MC = 00C048,RAM 中的第一条指令码 00 进入
    BUS,再由 BUS 进入指令寄存器 IR = 00。键 7 再进 1 个脉冲,进入 MC = 001001,执行指令 IN,送数 IN -> R0 = 34H

  7. 键 7 产生 1 个脉冲,执行完 IN 指令后,返回到初始端,执行微指令 MC = 01ED82

  8. 键 7 产生 2 个脉冲后,执行微指令 MC = 01ED83,即执行 SUB 指令的第 1 步:PCAR = 02PC + 1 = 03 ,这时 RAM 中在 02 地址的 0AH 进入 BUS = 0A

  9. 键 7 产生 1 个脉冲,执行微指令 MC = 00E004 ,即执行 SUB 指令的第 2 步: BUS 数据送 AR = 0A,由于 0ASUB 指令的加数的间接地址,而在地址 0A 中放有 01H,最后完成的减法是 34H - 01H = 33H

  10. 键 7 产生 1 个脉冲,MC = 00B005 ,执行 SUB 的第 3 步:将 RAM0A 地址的数据 01HBUS ,再送 DR2 = 01H。注意,此时指令寄存器 IR 中仍放有 SUB 的操作码 10HPC = 03 指向下一条指令 AND

  11. 键 7 产生 1 个脉冲,MC = 01A206,执行 SUB 的第 4 步(微地址是 05), R0DR1 = 34H

  12. 键 7 产生 1 个脉冲,MC = 619A01 ,执行 SUB 的最后一步,DR1 - DR2 = 33H,通过总线 BUSR0 = 33H。 键 7 再产生 1 个脉冲,返回到初始端,执行微指令 MC = 01ED82

  13. 键 7 产生 2 个脉冲,MC = 01ED95,执行 AND 指令;键 7 再 4 个脉冲后,位运算与的结果 33H & 12H = 10H 被写入 R0 ,即 R0 = 10H 。键 7 产生 1 个脉冲后返回到初始端,执行微指令 MC = 01ED82

  14. 键 7 产生 2 个脉冲,MC = 01ED99,执行 MOV 指令;键 7 再 2 个脉冲后, RAM 中地址为 0C 的数字 00H 被写入 DR2,即 DR2 = 00H 。键 7 产生 1 个脉冲后返回到初始端,执行微指令 MC = 01ED82

  15. 键 7 产生 2 个脉冲,MC = 01A21B,执行 INC 指令;键 7 再 1 个脉冲后,R0 中的值加 1,即 R0 = 11H 。键 7 产生 1 个脉冲后返回到初始端,执行微指令 MC = 01ED82

附:实验过程中的图片

cf4325c503c64498f792db5244cede3e.jpeg

四. 实验感想

由于「计算机组织与体系结构」是上学期的课程,时隔将近 4 个月后再接触到相关的知识,有一种熟悉又陌生的感觉,当时学到的一些知识已经有所遗忘。所以笔者在设计指令之前,又对 CPU 、数据通路、总线等相关知识进行了回顾与复习。在这次漫长的设计实验以后,我对这方面的知识理解得以更加深刻。

设计指令并构造 24 位微代码是十分辛苦的,在设计第一条指令时花费了很长时间。随着自己对每一位的含义的越来越熟悉,同时也发现了不同指令在某些地方的相似之处,我明白了老师课前所提到的“开头设计指令很慢,之后会越来越快”的含义:有些指令有许多部分是很相似的,在代码上的不同很少,主要是会因为执行下一条指令的位置不同而不同。

同时当时自己为了设计方便,构建微代码表时基本把相同的指令用到的微操作都放在了一起,不断向微地址大的地方累加,这也造成了本人微代码表中会有空行的出现(详见下图),这也是我在实验中意识到自己不足的一个地方。

53d4b91cfa94e88a67455b96263b9e8f.png

总的来说这次实验虽然辛苦,但是我收获颇丰。当理论与实际结合起来,并通过自己的努力验证了理论的正确性的时候,心中的激动和成就感是很足的。

最后感谢老师在实验中耐心的答疑与同伴在我出现问题时的“拔刀相助”。

作者

Zylll

发布于

2023-10-30

更新于

2023-10-30

许可协议