西安财经学院信息学院
《计算机组成原理》 实验报告
实验名称 微程序控制实验、基本模型机的设计与实现 实验室实验楼418
实验日期 2018.12.6; 12.11
第一部分 微控制器实验 一、实验目的 1、掌握时序信号发生电路组成原理。 2、掌握微程序控制器的设计思想和组成原理。 3、通过微程序的编制、写入,观察微程序的运行。 二、实验内容 1、实验原理 实验所用的时序电路原理如图1.1所示,可产生4个等间隔的时序信号TS1~TS4,其中SP为时钟信号,由实验机上时钟源提供,可产生频率及脉宽可调的方波信号。学生可根据实验要求自行选择方波信号的频率及脉宽。为了便于控制程序的运行,时序电路发生器设计了一个启停控制触发器UN1B,使TS1~TS4信号输出可控。图中“运行方式”、“运行控制”、“启动运行”三个信号分别是来自实验机上三个开关。当“运行控制”开关置为“运行”,“运行方式”开关置为“连续”时,一旦按下“启动运行”开关,运行触发器UN1B的输出QT一直处于“1”状态,因此时序信号TS1~TS4将周而复始地发送出去;当“运行控制”开关置为“运行”,“运行方式”开关置为“单步”时,一旦按下“启动运行”开关,机器便处于单步运行状态,即此时只发送一个CPU周期的时序信号就停机。利用单步方式,每次只运行一条微指令,停机后可以观察微指令的代码和当前微指令的执行结果。另外,当实验机连续运行时,如果“运行方式”开关置“单步”位置,也会使实验机停机。 2、微程序控制电路与微指令格式 (1)微程序控制电路 微程序控制器的组成如图1.2所示,其中控制存储器采用3片E2PROM 2816芯片,具有掉电保护功能,微命令寄存器18位,用两片8D触发器74LS273(U23、U24)和一片4D触发器74LS175(U27)组成。微地址寄存器6位,用三片正沿触发的双D触发器74LS74(U14~U16)组成,它们带有清“0”端和预置端。在不进行判别测试的情况下,T2时刻打入微地址寄存器的内容即为下一条微指令地址。当T4时刻进行测试判别时,转移逻辑满足条件后输出的负脉冲通过强置端将某一触发器置为“1”状态,完成地址修改。 在本实验电路中设有一个编程开关,它具有三种状态:写入、读出、运行。当处于“写”状态时,学生可根据微地址和微指令格式将微指令二进制代码写入到控制存储器2816中。当处于“读”时,可以对写入控制存储器中的二进制代码进行验证,从而可判断写入的二进制代码是否正确。当处于“运行”状态时,只要给出微程序的入口微地址,则可根据微程序流程图自动执行微程序。图中微地址寄存器输出端增加了一组三态门(U12),目的是隔离触发器的输出,增加抗干扰能力,并用来驱动微地址显示灯。 (2)微指令格式 微指令长共24位,其控制位顺序如表1.1所示。 表1.1 微指令控制位顺序
注意:A字段举例:LDIR:将总线数据写入指令寄存器;(100) B字段总线数据来源: ALU-B指总线数据来源于ALU的输出;(101) C字段举例:LDPC指将总线数据写入PC; P(1) 举例:P测试第一字节的高4位。实际有效地址为E=基地址∨第一字节的高4位 例:UA5~UA0为08,第一字节20H( 00010000),E=08∨01=09 。 其中UA5~UA0为6位的后续微地址,A、B、C 三个译码字段,分别由三组译码控制电路译码产生各控制信号。C字段中的P(1)~P(4)是四个测试字位。其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行,其原理如图1.3所示,图1.3中I7~I2为指令寄存器的第7~2位输出,SE5~SE1为微控器单元微地址锁存器的强置端输出。AR为算术运算是否影响进位及判零标志控制位,低电平有效。B字段中的RS-B、RD-B、RI-B分别为源寄存器选通信号、目的寄存器选通信号及变址寄存器选通信号,其功能是根据机器指令来进行三个工作寄存器R0、R1及R2的选通译码,其原理如图7.4所示,图1.4中I0-I4为指令寄存器的第0~4位,LDRI为 打入工作寄存器信号的译码器使能控制位。 (3)机器指令的微程序设计 设计如下五条机器指令:
根据机器指令画出对应的微程序流程图,如图1.5所示。
② 根据微程序流程图设计微指令,并按微指令格式转换成二进制代码,如表1.2所示。
进一步了解微程序控制器的工作原理 ①写微程序 A. "编程开关"置为" 写入 "状态。 B. "运行控制"开关置为" 运行 ","运行方式"开关置为" 单步 "状态。 C. 用二进制模拟开关UA0~UA5置6位微地址,UA0~UA5的电平由LK0~LK5显示,高电平亮,低电平灭。 D. 用二进制模拟开关MK1~MK24置24位微代码,24位微代码由LMD1~LMD24显示灯显示,高电平亮,低电平灭。 E. 按动" 启动运动 "开关,启动时序电路,即可将微代码写入到E2PROM 2816的相应地址单元中。 F. 重复C-E步骤,将微代码全部写入E2PROM2816中。 ②读微程序 A. 将"编程开关"设置为" 读 "状态。 B. "运行控制"开关置为" 运动 ","运行方式"开关置为" 单步 "状态。 C. 用二进制模拟开关UA0~UA5置6位微地址。 D. 按动" 启动运行 "开关,启动时序电路,读出微代码,观察显示灯LMD1~LMD24的状态,检查读出的微代码是否与写入的相同,如果不同,则将"编程开关"置为" 写入 "状态。重新执行①即可。 ③单步运行 A. "编程开关"置于" 运行 "状态。 B. "运行控制"开关置为" 运行 ","运行方式"开关置为" 单步 "状态。 C. 系统总清,即"总清"开关拨0→1。使微地址寄存器U14~U16清零,从而明确本机的运行入口微地址为000000(二进制)。 D. 按动" 启动运行 "开关,启动时序电路,则每按动一次,读出一条微指令后停机,此时实验机上的微地址显示灯和微程序显示灯将显示所读出的一条指令。 ④连续运行 A. 将"编程开关"置为" 运行 "状态。 B. "运行控制"开关置为" 运行 "状态,"运行方式"开关置为" 连续 "状态。 C. 系统总清,即"总清"开关拨0→1。使微地址寄存器U14~U16清零,从而明确本机的运行入口微地址为000000(二进制)。 D. 按动" 启动运行 "开关,启动时序电路,则可连续读出微指令。 4、实验步骤 ① 实验接线
② 仔细查线无误后接通电源 ③ 写微程序 A.“编程开关”置为“写入”状态。 B.“运行控制”开关置为“运行”,“运行方式”开关置为“单步”状态。 C.用二进制模拟开关UA0~UA5置6位微地址,UA0~UA5的电平由LK0~LK5显示,高电平点亮,低电平熄灭。 D.用二进制模拟开关MK1~MK24置24位微代码,24位微代码由LMD1~LMD24显示灯显示,高电平亮,低电平灭。 E.按动“启动运行” 开关,启动时序电路,即可将微代码写入到E2PROM 2816的相应地址单元中。 F.重复C-E步骤,将表7.2的微代码全部写入E2PROM 2816中。 ④ 读微程序 A. 将“编程开关”设置为“读”状态。 B. “运行控制”开关置为“运行”,“运行方式”开关置为“单步”状态。 C. 用二进制模拟开关UA0~UA5置6位微地址。 D. 按动“启动运行” 开关,启动时序电路,读出微代码,观察显示灯LMD1~LMD24的状态,检查读出的微代码是否与写入的相同,如果不同,则将“编程开关”置为“写入”状态。重新执行写微程序即可。 ⑤ 单步运行 A.“编程开关”置于“运行”状态。 B.“运行控制”开关置为“运行”,“运行方式”开关置为“单步”状态。 C. 系统总清,即“总清”开关拨0→1。使微地址寄存器U14~U16清零,从而明确本机的运行入口微地址为000000(二进制)。 D.按动“启动运行”开关,启动时序电路,则每按动一次,读出一条微指令后停机,此时实验机上的微地址显示灯和微程序显示灯将显示所读出的一条指令。 ⑥ 连续运行 A.将“编程开关”置为“运行”状态。 B.“运行控制”开关置为“运行”,“运行方式”开关置为“连续”状态。 C.系统总清,即“总清”开关拨0→1。使微地址寄存器U14~U16清零,从而明确本机的运行入口微地址为000000(二进制)。 D.按动“启动运行”开关,启动时序电路,则可连续读出微指令。 三、实验电路图
图1. 1 时序电路图
图1. 2 微程序控制器组成图
图1.3 逻辑译码电路
图1.4 逻辑译码电路 四、实验数据记录 根据微程序流程图设计微指令,并按微指令格式转换成二进制代码。将设计的微 |
令代码填入表1.3:
表1.3
微操作 |
区号 |
0区域 |
1区域 |
2区域 |
微指令代码十六进制 |
||||||||||||||||||||||||
控制信号 |
S3 |
S2 |
S1 |
S0 |
M |
Cn |
WE |
B1 |
B0 |
A |
B |
C |
uA5 |
uA4 |
uA3 |
uA2 |
uA1 |
uA0 |
|||||||||||
功能 |
运算器功能选择 |
运算器逻辑选择 |
运算器进位选择 |
存储器的写线 |
外设选择控制信号。00:SWB 01:RAM 10:LED |
各寄存器的写允许控制信号 100:LDIR 指令寄存器写允许 |
总线数据来源 101:ALU-B 总线数据来源于ALU的输出 |
测试位 |
下一条微指令的地址(后续微地址),要配合测试位来确定后续微地址 |
||||||||||||||||||||
地址 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0区 |
1区 |
2区 |
||
空指令 |
00 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
05 |
81 |
10 |
|
PC->AR PC+1 |
01 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
05 |
ED |
82 |
|
RAM->BUS BUS->IR |
02 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
04 |
C0 |
48 |
|
RAM->BUS BUS->AR |
03 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04 |
E0 |
04 |
|
RAM->BUS BUS->DR2 |
04 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
04 |
B0 |
05 |
|
R0->DR1 |
05 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
05 |
A2 |
06 |
|
(DR1)+(DR2)->R0 |
06 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
95 |
9A |
01 |
|
RAM->BUS BUS->AR |
07 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
04 |
E0 |
0D |
|
SW->R0 |
08 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
04 |
10 |
01 |
|
PC->AR PC+1 |
09 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
05 |
ED |
83 |
|
PC->AR PC+1 |
0A |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
05 |
ED |
87 |
|
PC->AR PC+1 |
0B |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
05 |
ED |
8E |
微操作 |
区号 |
0区域 |
1区域 |
2区域 |
微指令代码十六进制 |
||||||||||||||||||||||||
控制信号 |
S3 |
S2 |
S1 |
S0 |
M |
Cn |
WE |
B1 |
B0 |
A |
B |
C |
uA5 |
uA4 |
uA3 |
uA2 |
uA1 |
uA0 |
|||||||||||
功能 |
运算器功能选择 |
运算器逻辑选择 |
运算器进位选择 |
存储器的写线 |
外设选择控制信号。00:SWB 01:RAM 10:LED |
各寄存器的写允许控制信号 100:LDIR 指令寄存器写允许 |
总线数据来源 101:ALU-B 总线数据来源于ALU的输出 |
测试位 |
微指令后续地址(基地址),要配合测试位来确定后续微地址 |
||||||||||||||||||||
地址 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0区 |
1区 |
2区 |
||
PC->AR PC+1 |
0C |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
05 |
ED |
96 |
|
R0->BUS BUS->RAM |
0D |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
06 |
82 |
01 |
|
RAM->BUS BUS->AR |
0E |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
04 |
E0 |
0F |
|
RAM->BUS BUS->DR1 |
0F |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
04 |
A0 |
15 |
|
PC->AR PC+1 |
10 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
05 |
ED |
92 |
|
PC->AR PC+1 |
11 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
05 |
ED |
94 |
|
RAM->BUS BUS->DR1 |
12 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
04 |
A0 |
17 |
|
空指令 |
13 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
05 |
80 |
01 |
|
(SW)->BUS BUS->DR1 |
14 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
04 |
20 |
18 |
|
DR1->LED |
15 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
07 |
0A |
01 |
|
RAM->BUS BUS->PC |
16 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
04 |
D1 |
81 |
|
DR1->LED |
17 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
07 |
0A |
10 |
|
DR1->RAM |
18 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
06 |
8A |
11 |
五、根据图1.2的微程序控制器组成图,分析其工作原理。 微程序控制器的基本任务是完成当前指令的翻译个执行,即将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作。它的执行方法就是将控制各部件动作的微命令的集合进行编码,即将微命令的集合仿照机器指令一样,用数字代码的形式表示,这种表示成为微指令。这样就可以用一个微指令序列表示一条机器指令,这种微指令序列称为微程序。微程序存储在一种专用的存储器中,称为控制存储器。 六、给出读写微程序过程和验证结果。 首先验证微控制器的存储特性。将编程开关置为“写入”状态,写入如表微地址为00~18的微代码。每写入一条指令,按一下“启动运行”开关。再将微地址和总清开关置0,编程开关置为“读”状态,即可验证是否存储正确。若有错误,则需检查连线或者是重新输入。经实验,成功显示。最后,将编程开关置为“运行”状态,即可运行我们写入的微程序。经实验,结果显示正确。 七、实验总结 通过这几周实践,不仅让我对计算机的基本组成、简单运算器的数据传送通路组成、静态随机存取存储器RAM工作特性及数据的读写方法、时序信号发生电路组成原理、微程序控制器的设计思想和组成原理、微程序的编制、写入过程有了进一步的了解, 也让我觉得自己的动手能力有了很大的提高;自信心也增强了,在课程设计中自己动脑子解决遇到的问题,书本上的知识有了用武之地,这巩固和深化了自己的知识结构。 起初第一次讲解时,由于对计算机总体结构不怎么熟悉、没认真预习、思考不够认真、对书本的知识不够扎实以及以前没有接触过所以缺乏经验,所以不知道从哪里开始着手,第一天上午结束的时候还是一脸的茫然,不知道这次课程设计到底在做什么,整体上没有一点把握。但在第二次讲解前,我对以前做过的实验重新看了一遍,在设计时随着老师的一次次详细的讲解及同学的不断讨论,通过自己不断思考,我渐渐的才对这次课程设计有了初步了解,到第一部分实验完成后,自己的思路也慢慢清晰,自信心也增强了。接下来, 关于写程序、微程序时主要考验的是我的耐心,特别是最后对照二进制微代码表输入地址时,不仅要检查读出的微代码是否与写入的相同,在这些操作中考验的就是一个人的耐心,万一哪里疏忽了,就很容易出错,一旦出错就要从第一步重新开始,造成大量时间浪费,很多工作都将重做。所以我们在做这些小的步骤时一定要耐心。最后是验收,通过验收我们可以对许多知识能够重新和彻底理解,就象验收时虽然好几个问题刚开始都答不出来,但通过老师的讲解,感觉自己搞懂了很多. 通过这次实践,我相信,只要自己在每一次实践中都能仔细思考,实验其实都不会很难,关键在于自己能不能认真思考,能不能亲自动手做实验,而不是想着其他人的劳动果实,其次你还要多操作,只有多操作才能从中发现问题,才能及时向老师和同学请教,解决问题,从而更好的掌握书本中知识。还有通过这次实践也让我懂得了:学校安排实验目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。因此,我会认真地对待我的每一次实验。 八、思考题 1、根据实验中所设计的微指令格式,指出哪几位是操作控制字段和顺序控制字段?微指令采用的是什么编码方式和什么后继地址形成方法? 答:操作控制字段:s3,s2,s1,s0,m,Cn即19,20,21,22,23,24。顺序控制C字段,即7,8,9。 微指令采用的编码方式:直接编码。后继地址形成方法:指令的操作码和和位指令的下地址字段
答:IN(输入),ADD(二进制加法),STA(存数),OUT(输出),JMP(无条件转移)
答: Ad(IR)->MAR,1->R Ad(CMDR)->CMAR M(MAR)->MDR Ad(CMDR)->CMAR (AC)+(MDR)->AC Ad(CMDR)->CMAR 4、根据微指令格式设计一段减法指令SUB [ADDR] 的微程序,减法指令的功能是 R0 — [ADDR] → R0 答:减法微程序:019A65。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第二部分 基本模型机的设计与实现 一、 实验目的 1、在掌握部件单元电路实验的基础上,进一步将其组成系统以构造一台基本模型实验计算机。 2、设计五条机器指令,并编写相应的微程序,具体上机调试,掌握整机软硬件组成概念。
二、实验内容 1、实验原理 部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。这里,实验计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。 (1)有关微控制器部分在前一实验中已详细介绍。 (2)主存储器的读、写和运行 为了向主存储器RAM中装入程序或数据,并且检查写入是否正确以及能运行主存储器中的程序,必须设计三个控制操作微程序。 存储器读操作:拨动总清开关后,置控制开关SWC、SWA为"0 0"时,按要求连线后,连续按"启动运行"开关,可对主存储器RAM连续手动读操作。 存储器写操作:拨动总清开关后,置控制开关SWC、SWA为"0 1"时,按要求连线后,再按"启动运行"开关,可对主存储器RAM进行连续手动写入。 运行程序:拨动总清开关后,置控制开关SWC、SWA为"1 1"时,按要求连线后,再按"启动运行"开关,即可转入到第01号"取址"微指令,启动程序运行。 上述三条控制指令用两个开关SWC、SWA的状态来设置,其定义如表2.1所示。 表2.1
(3)指令寄存器介绍 指令寄存器用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到缓冲寄存器中,然后再传送到指令寄存器。指令划分为操作码和地址码字段,由二进制构成,为了执行任何一条给定的指令,必须对操作码进行测试P(1),通过节拍脉冲T4的控制以便识别所要求的操作。"指令译码器"根据指令中的操作码进行译码,强置微控器单元的微地址,使下一条微指令指向相应的微程序首地址。 (4)输入输出设备 本系统有两种外部I/O设备,一种是二进制代码开关KD0~KD7,它作为输入设备INPUT;另一种是数码显示块,它作为输出设备OUTPUT。例如:输入时,二进制开关数据直接经过三态门送到外部数据总线上,只要开关状态不变,输入的信息也不变。输出时,将输出数据送到外部数据总线上,当写信号(W/R)有效时,将数据打入输出锁存器,驱动数码块显示。 (5)设计指令 根据基本模型机的硬件设计五条机器指令:外设输入指令IN、二进制加法指令ADD、存数指令STA、输出到外设指令OUT、无条件转移指令JMP。指令格式如下: 助记符 机器指令码 说明 IN 0000 0000 ;"外部开关量输入"KD0~KD7的开关状态→R0 ADD addr 0001 0000 ×××× ××××; R0+[addr]→R0 STA addr 0010 0000 ×××× ××××; R0→[addr] OUT addr 0011 0000 ×××× ××××; [addr]→BUS JMP addr 0100 0000 ×××× ××××; [addr]→PC 说明: 指令IN为单字节指令,其余均为双字节指令,××××××××为addr对应的主存储器二进制地址码。 (6)基本模型机监控软件的设计 本模型机监控软件主要完成从输入设备读入数据,进行简单算术运算后,将结果存入内存的某个单元,最后通过输出设备输出结果。 监控软件详细如下: 地 址 内容 助记符 说 明 0000 0000 0000 0000 IN ;"INPUTDEVICE"→R0 0000 0001 0001 0000 ADD[0AH]; R0+[0AH]→R0 0000 0010 0000 1010 0000 0011 0010 0000 STA[0BH]; R0→[0BH] 0000 0100 0000 1011 0000 0101 0011 0000 OUT[0BH]; [0BH]→BUS 0000 0110 0000 1011 0000 0111 0100 0000 JMP[00H]; 00H→PC 0000 1000 0000 0000 0000 1001 0000 1010 0000 0001 ; 自定义参加运算的数 0000 1011 ; 求和结果存放单元 (7)监控程序的16进制文件格式(文件名C8JHE1): 程序: 机器指令格式说明 $ P00 00 $PXX XX $ P01 10 十六进制地址 机器指令 $ P02 0A $ P03 20 $ P04 0B $ P05 30 $ P06 0B $ P07 40 $ P08 00 $ P0A 01
微程序: $ M00 108105 微指令格式说明 $ M01 82ED05 $MXX XXXXXXXX $ M02 48C004 十六进制地址 微指令代码 $ M03 04E004 $ M04 05B004 $ M05 06A205 $ M06 019A95 $ M07 0DE004 $ M08 011004 $ M09 83ED05 $ M0A 87ED05 $ M0B 8EED05 $ M0C 96ED05 $ M0D 018206 $ M0E 0FE004 $ M0F 15A004 $ M10 92ED05 $ M11 94ED05 $ M12 17A004 $ M13 018005 $ M14 182004 $ M15 010A07 $ M16 81D104 $ M17 100A07 $ M18 118A06
2、实验接线 (1)J20,J21,J22接上短路片, (2)J23,J24,J25,J26接左边; (3)J27,J28 右边; (4)J29不接; (5)JA1,JA2,JA3置“接通”; (6)JA4置“高阻”; (7)JA5置“接通”; (8)JA8置“微程序” (9)JA6 置“微控” (10)EXJ1接BUS3 3、读写程序 ①手动方法写微程序参看微程序控制实验。 手动方法写代码程序(机器指令)步骤如下: 通过上一步将 机器指令对应的微代码正确地写入E2ROM 2816芯片后,再进行机器指令程序的装入和检查。 A. 将“编程开关”置“运行”位置,“运行控制”开关置“运行”位置,“运行方式”开关置“单步”位置。 B. 拨动总清开关(0→1),微地址寄存器清零,程序计数器清零。然后使控制开关SWC、SWA开关置为“0 1”,按动一次“启动运行”开关,微地址显示灯LUA0~LUA5显示“010001”,再按动一次“启动运行”开关,微地址显示灯LUA0~LUA5显示“010100”,此时数据开关的内容置为要写入的机器指令,再按动一次“启动运行”开关,即完成该条指令的写入。若仔细阅读微程序流程,就不难发现,机器指令的首地址只要第一次给出即可,PC会自动加1,所以,每次按动“启动运行”开关,只有在微地址灯显示“010100”时,才设置内容,直到所有机器指令写完。 C. 写完程序后须进行检验。拨动总清开关(0→1)后,微地址清零,PC程序计数器清零,然后使控制开关SWC、SWA为“0 0”,按动“启动运行”开关,微地址灯将显示“010000”,再按“启动运行”开关,微地址灯显示为“010010”,第三次按“启动运行”开关,微地址灯显示为“010111”,此时总线数据显示灯LZD0~LZD7显示为该首地址的内容,再按动一次“启动运行”开关,微地址灯显示为“010000”,2位数码管即显示RAM中的程序。不断按动“启动运行”开关,可检查后续单元内容。 注意:每次仅在微地址灯显示为“010000”时,2位数码管显示的内容才是相应地址中的机器指令内容。 ② 联机读/写微程序和机器指令 用联机软件的装载功能将16进制格式文件(文件名为C8JHE1)装入实验系统即可(详细操作见随机软件的README)。微指令代码是将表1.2的24位微代码从左到右分成三个8位,将此三个8位二进制代码化为相应的十六进制数,如表1.2第一行转化为108105。 4、运行程序 ① 单步运行程序 A. “编程开关”置“运行”状态,“运行方式”开关置为“单步”状态,“运行控制”开关置为“运行”状态。 B. 拨动总清开关(0→1),微地址清零,PC计数器清零,程序首地址为00H。 C. 按动“启动运行”开关,即单步运行一条微指令。对照微程序流程图,观察微地址显示灯是否和流程一致。 ② 连续运行程序 A. “编程开关”置“运行”状态,“运行方式”开关置为“连续”状态,“运行控制”开关置为“运行”状态。 B. 拨动总清开关,清微地址及PC计数器,按动“启动运行”开关,系统连续运行程序。如果要停止程序的运行,只需将“运行控制”开关置为“停止”状态,系统就停机。 C. 停机后,可检查数码管显示数值或存数单元0BH中的结果是否正确。 5、实验步骤 (1)根据实验原理设计数据通路框图,如图2.1所示。 当拟定"取指"微指令时,该微指令的判别测试字段为P(1)测试。由于"取指"微指令是所有微程序都使用的公用微指令,因此P(1)的测试结果出现多路分支。本机用指令寄存器的前4位I7~I4作为测试条件,出现5路分支,占用5个固定微地址单元。实验机控制操作为P(4)测试,它以控制开关SWC、SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。当分支微地址单元固定后,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填写。
图2.1 数据通路框图
(2)根据机器指令画出对应的微程序流程图
(3)根据微程序流程图设计微指令并转换成16进制代码文件。 当全部微程序设计完毕后,应将每条微指令代码化,即按微指令格式将微程序流程图转化成二进制微代码表,再转换成16进制代码文件。请根据微程序流程图设计微指令代码,并填入表2.2。 表2.2
(4)读写程序 手动方法写微程序参看实验三。 手动方法写代码程序(机器指令)步骤如下: 通过上一步将机器指令对应的微代码正确地写入E2ROM 2816芯片后,再进行机器指令程序的装入和检查。 A. 将"编程开关"置" 运行 "位置,"运行控制"开关置" 运行 "位置,"运行方式"开关置" 单步 "位置。 B. 拨动总清开关(0→1),微地址寄存器清零,程序计数器清零。然后使控制开关SWC、SWA开关置为" 0 1 ",按动一次" 启动运行 "开关,微地址显示灯LUA0~LUA5显示" 010001 ",再按动一次" 启动运行 "开关,微地址显示灯LUA0~LUA5显示" 010100 ",此时数据开关的内容置为要写入的机器指令,再按动一次" 启动运行 "开关,即完成该条指令的写入。若仔细阅读微程序流程,就不难发现,机器指令的首地址只要第一次给出即可,PC会自动加1,所以,每次按动" 启动运行 "开关,只有在微地址灯显示" 010100 "时,才设置内容,直到所有机器指令写完。 C. 写完程序后须进行检验。拨动总清开关(0→1)后,微地址清零,PC程序计数器清零,然后使控制开关SWC、SWA为" 0 0 ",按动"启动运行"开关,微地址灯将显示" 010000 ",再按" 启动运行 "开关,微地址灯显示为" 010010 ",第三次按" 启动运行 "开关,微地址灯显示为" 010111 ",此时总线数据显示灯LZD0~LZD7显示为 该首地址的内容 ,再按动一次" 启动运行 "开关,微地址灯显示为 " 010000 ",2位数码管即显示 RAM中的程序 。不断按动" 启动运行 "开关,可检查后续单元内容。 注意:每次仅在微地址灯显示为" 010000 "时,2位数码管显示的内容才是相应地址中的机器指令内容。 (5)运行程序 ①单步运行程序 A. "编程开关"置" 运行 "状态,"运行方式"开关置为" 单步 "状态,"运行控制"开关置为" 运行 "状态。 B. 拨动总清开关(0→1),微地址清零,PC计数器清零,程序首地址为00H。 C. 按动" 启动运行 "开关,即单步运行一条微指令。对照微程序流程图,观察微地址显示灯是否和流程一致。 ②连续运行程序 A. "编程开关"置" 运行 "状态,"运行方式"开关置为" 连续 "状态,"运行控制"开关置为" 运行 "状态。 B. 拨动总清开关,清微地址及PC计数器,按动" 启动运行 "开关,系统连续运行程序。如果要停止程序的运行,只需将"运行控制"开关置为" 停止 "状态,系统就停机。 C.停机后,可检查存数单元0BH中的结果是否正确。 问题:如何检查存数单元0BH中的结果?请写出详细步骤。 步骤如下:将SWC,SWA都置为1,运行控制开关置为“运行”,运行方式置为“单步”,编程开关置为“读”,再将微地址输入端uA5~ Ua0置为“001011”,按“启动运行”开关,即可观察结果。 三、根据图2.1基本机组成图,分析其工作原理。
IN ADD [0AH]
STA [0BH]
OUT [0BH]
JMP [00H]
通过本次实验,不但了解了基本模型机的原理而且很好的巩固了课本上的知识,同时还通过本次实验积累了计算机硬件实验的经验和方法,主要有:
通过这次实验,我懂得了模型机的组成原理 ,知道了模型机的构成,知道了计算机的指令是由很多微指令构成,没有这些微指令,计算机无法完成自动运算。这次实验比较难,但是最后通过老师和同学的帮助圆满地完成了本次实验。
|