计算机组成原理课程设计 实验报告

一、 实验目的
(1) 掌握一个简单 CPU 的组成原理。
(2) 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。
(3) 为其定义自己设计的机器指令,编写相应的微程序,并上机调试掌握整机概念。

二、 实验设备
PC 机一台,TD-CMA 实验系统一套。

三、 实验原理
本实验要实现一个简单的 CPU,并且在此 CPU 的基础上,继续构建一个简单的模型计算机。CPU由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计 数器(PC)和地址寄存器(AR)组成,如图 1-1 所示。这个 CPU 在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU 必须和主存挂接后,才有实际的意义,所以还需要在该 CPU 的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。
这里写图片描述
运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存 于暂存器 A 和暂存器 B,三个部件同时接受来自 A 和 B 的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如 ARM),各部件对操作数进行何种运算由控制信号 S3…S0 和 CN 来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为 ALU 的输出。如 果是影响进位的运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。ALU中所有 模块集成在一片CPLD中,如图 1-2 所示。
这里写图片描述
暂存器A和暂存器B的数据能在LED灯上实时显示,原理如图 1-3 所示(以 A0 为例,其它相同)。进位标志FC、零标志FZ和数据总线D7…D0的显示原理也是如此。
这里写图片描述
微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令的功能转换成可以 控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作。它的执行方法就是将 控制各部件动作的微命令的集合进行编码,即将微命令的集合仿照机器指令一样,用数字代码 的形式表示,这种表示称为微指令。这样就可以用一个微指令序列表示一条机器指令,这种微 指令序列称为微程序。微程序存储在一种专用的存储器中,称为控制存储器,微程序控制器原理 框图如图1-4所示。
这里写图片描述
微程序控制器的组成见图 1-5,其中控制存储器采用 3 片 2816 的 E2PROM,具有掉电保 护功能,微命令寄存器 18 位,用两片 8D 触发器(273)和一片 4D(175)触发器组成。微地址 寄存器 6 位,用三片正沿触发的双 D 触发器(74)组成,它们带有清“0”端和预置端。在不判 别测试的情况下,T2 时刻打入微地址寄存器的内容即为下一条微指令地址。当 T4 时刻进行测 试判别时,转移逻辑满足条件后输出的负脉冲通过强置端将某一触发器置为“1”状态,完成地址修改。
这里写图片描述
通用寄存器(R0)和指令寄存器(IR)原理图见图1-6和1-7.
这里写图片描述
系统的程序计数器(PC)和地址寄存器(AR)集成在一片 CPLD 芯片中 。CLR 连接至 CON 单元的总清端CLR,按下 CLR 按钮,将使 PC 清零,LDPC 和 T3 相与后作为计数器的计数时钟,当 LOAD为低时,计数时钟到来后将 CPU 内总线上的数据打入 PC。原理图见图1-8.
这里写图片描述
微程序P判别条件原理图如图1-9。P1 P2 P3 P4都是低有效,138译码器出来直接就是P1 P2 P3 P4,138输出的是低有效信号。
这里写图片描述
微指令结构、功能表见表1-1
这里写图片描述
运算器功能表见表1-2
这里写图片描述
四、 实验过程
在如图1-10所示的设备上完成如图1-11所示的接线
这里写图片描述
这里写图片描述
在TD-CMA 实验系统上,先进行实验5.1 CPU与简单模型机设计实验,如图1-12,熟悉试验系统和实验过程。
这里写图片描述
熟悉微指令构建成功后,构建自制的功能,我们组实现的功能为求补功能,分解为R0->A,!A->R0,R0->A,INC R0->A,这四步,通过微指令结构功能表,写出这四条微指令
0000 0000 0001 0100 0000 1001(001402),
0000 0010 0011 0010 0000 0110(023206),
0000 0000 0001 0100 0000 0111(001407),
0000 0110 1011 0010 0000 0001(06B201)。
这四条微指令构建成NEG指令,完成求补功能,机器码结构为1000 0000(80)。将微代码写入芯片后进行测试,经验证成功实现求补功能。

五、 实验结果
1、程序流程图如图1-13
这里写图片描述
2、支持的指令集(指令格式、功能、机器码结构等)
指令格式/功能/机器码结构
ADD指令/实现加法/0000 0000
IN指令/将IN单元的内容放入R0/0010 0000
OUT指令/将OUT单元的内容输出/0011 0000
HLT指令/停机 /0101 0000
NEG指令/实现求补/1000 0000
JMP指令/跳转/1100 0000

3、各指令的微程序实现

; //** Start Of MicroController Data **//
  $M 00 000001    ; NOP
  $M 01 006D43    ; PC->AR,PC加1
  $M 03 107070    ; MEM->IR, P<1>
  $M 04 002405    ; R0->B
  $M 05 04B201    ; A加B->R0
  $M 1D 105141    ; MEM->PC
  $M 30 001404    ; R0->A 
  $M 32 183001    ; IN->R0 
  $M 33 280401    ; R0->OUT
  $M 3C 006D5D    ; PC->AR,PC加1
  $M 38 001402    ; R0->A      0000 0000 0001 0100 0000 1001
  $M 02 023206    ; !A->R0     0000 0010 0011 0010 0000 0110
  $M 06 001407    ; R0->A      0000 0000 0001 0100 0000 0111
  $M 07 06B201    ; inc A->R0  0000 0110 1011 0010 0000 0001     
; //** End Of MicroController Data **//

微程序流程图如图1-14
这里写图片描述
4、源代码(汇编语言形式)

START:
IN R0
NEG R0
OUT R0
JMP START
HLT

5、机器语言目标代码
这里写图片描述
6、模型计算机实物,见图1-15
这里写图片描述

六、 实验总结
(1) 对实验涉及概念的理解
微程序写入CPU中的控制器,程序写入内存,没有写入微程序的不能称为计算机,而写入了微程序,没写入程序的也能称为计算机。

(2) 简述通用计算机的基本工作原理
从内存中读取指令,CPU执行控制器中该指令相对应的微指令组。

(3) 碰到了什么问题,如何解决的
问题一:
在接线完成后的验证过程中,我们发现OUT单元输出内容与预计不符。更改几次输入的数据,寻找规律,有时候结果正确,有时候结果错误。我们发现有一位显示的数字,将其拆分为四位二进制数字来看,总是第三位和第二位数字相反,我们怀疑接线有问题。检查输入OUT单元的输入,发现接线出现了下图(图1-16)所示的问题。
这里写图片描述
可以看到从左往右数的第二根(粉色)和第三根(红色)电线接反了,换正常接线后问题消除,结果显示正常。

问题二:
我们进一步实现更复杂功能时(找出一个数字的最低有效位)微指令如下:

  $M 38 001409    ; R0->A      0000 0000 0001 0100 0000 1001
  $M 09 002402    ; R0->B      0000 0000 0010 0100 0000 0010
  $M 02 023206    ; !A->R0     0000 0010 0011 0010 0000 0110
  $M 06 001407    ; R0->A      0000 0000 0001 0100 0000 0111
  $M 07 06B21A    ; inc A->R0  0000 0110 1011 0010 0001 1010
  $M 1A 001408    ; R0->A      0000 0000 0001 0100 0000 1000
  $M 08 013201    ; A&B->R0    0000 0001 0011 0010 0000 0001

将微指令写入时提示出错,反复检查后未找出问题,请教老师,得出出错原因:编写微指令时使用了tab键,TD-CMA软件无法识别。修改后成功写入,并成功实现功能。
(4) 有什么不足之处或待提高的方面
实现的功能较少,实现的功能也较为简单。

(5) 通过在工程实验过程中发现和排除问题的训练,在方法学方面有什么体会
要深入研究出问题的地方,准确找出问题点,才能快速解决问题。当自己无法解决问题时,要及时向老师求助。

猜你喜欢

转载自blog.csdn.net/qq_41579622/article/details/81668300