微程序控制实验、基本模型机的设计与实现——基本模型机的设计与实现

该文详述了一次实验,旨在通过设计与实现基本模型机,掌握部件单元电路组成系统,设计五条机器指令并编写微程序。实验内容包括微控制器、主存储器的读写、指令寄存器、输入输出设备的操作,并提供了监控软件和微程序的16进制文件格式。实验步骤涉及微程序的编写、读写程序和运行程序,强调了微程序在指令执行中的作用,即替代手工操作,保证计算机按预设逻辑运行。
摘要由CSDN通过智能技术生成

第二部分    基本模型机的设计与实现

一、 实验目的

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

SWC

SWA

控制台指令

0

0

读内存

0

1

写内存

1

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”时,才设置内容,直到所有机器指令写完。

微动方式写机器指令

“编程开关”→“运行”,“运行控制”→“运行”,“运行方式”→“单步”,总清开关“0→1”μA5 ~ μA0 = 000000 = LμA5 ~ LμA0     PC = 0000 0000     SWC SWA  =  0 1

按“启动运行”

 

每当LμA5 ~ LμA0 = 010100时,输入机器指令代码(用KD7 ~ KD0)

注意AR灯(LAD7 ~ LAD0)显示的内存单元地址

写内存 SWC SWA=0 1

 

C. 写完程序后须进行检验。拨动总清开关(0→1)后,微地址清零,PC程序计数器清零,然后使控制开关SWC、SWA为“0 0”,按动“启动运行”开关,微地址灯将显示“010000”,再按“启动运行”开关,微地址灯显示为“010010”,第三次按“启动运行”开关,微地址灯显示为“010111”,此时总线数据显示灯LZD0~LZD7显示为该首地址的内容,再按动一次“启动运行”开关,微地址灯显示为“010000”,2位数码管即显示RAM中的程序。不断按动“启动运行”开关,可检查后续单元内容。

注意:每次仅在微地址灯显示为“010000”时,2位数码管显示的内容才是相应地址中的机器指令内容。

读内存  SWC SWA=0 0

4、运行程序

①  单步运行程序

A.  “编程开关”置“运行”状态,“运行方式”开关置为“单步”状态,“运行控制”开关置为“运行”状态。

B. 拨动总清开关(0→1),微地址清零,PC计数器清零,程序首地址为00H。

C. 按动“启动运行”开关,即单步运行一条微指令。对照微程序流程图,观察微地址显示灯是否和流程一致。

启动运行机器指令(因为机器指令不同,所以 01H 单元的下一条微指令不定)

SWC SWA=1 1

 

 

② 连续运行程序

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)根据机器指令画出对应的微程序流程图

1)运行微程序流程图                                                                               2)控制器流程图

 

(3)根据微程序流程图设计微指令并转换成16进制代码文件。

当全部微程序设计完毕后,应将每条微指令代码化,即按微指令格式将微程序流程图转化成二进制微代码表,再转换成16进制代码文件。请根据微程序流程图设计微指令代码,并填入表2.2。

表2.2

微地址

S3 S2 S1 S0 M CN WE B1 B0

A

B

C

uA5----uA0

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

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

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

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

0 0 0 0 0 1 0 0 1

0 1 1

0 0 0

0 0 0

0 0 0 1 0 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(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基本机组成图,分析其工作原理。

机器指令

存放数据

内存RAM

机器指令功能

地址

内容

十六进制

地址

内容

IN

0000 0000

0000 0000

00H

00H

输入指令:SWB-BUS

ADD  [0AH]

0000 0001

0001 0000

01H

10H

加法:R0+[0AH]—R0

0000 0010

0000 1010

02H

0AH

STA   [0BH]

0000 0011

0010 0000

03H

20H

存数:R0—[0BH]

0000 0100

0000 1011

04H

0BH

OUT   [0BH]

0000 0101

0011 0000

05H

30H

输出:[0BH]—BUS

0000 0110

0000 1011

06H

0BH

JMP   [00H]

0000 0111

0100 0000

07H

40H

跳转:00H—PC

0000 1000

0000 0000

08H

00H

自定义单元

0000 1001

09H

操作数存放单元

0000 1010

0AH

01H

运算结果存放单元

0000 1011

0BH

 四、给出读写五条机器指令过程和验证结果。

机器指令

微程序入口地址

微地址

微操作

微代码

微指令功能说明

0

1

2

IN

01H

01H

PC—AR PC+1

05

ED

82

取指微操作

02H

RAM—BUS  BUS—IR

04

C0

48

08H

SWB—R0

04

10

01

执行指令微操作

外部数据开关给R0输入数据

机器指令

微程序入口地址

微地址

微操作

微代码

微指令功能说明

0

1

2

ADD

09H

01H

PC-AR PC+1

05

ED

82

取指令,译码

02H

RAM-BUS  BUS-IR

04

C0

48

09H

PC-AR PC+1

05

ED

83

加法

03H

RAM-BUS  BUS-AR

04

E0

04

04H

RAM-BUS  BUS-DR2

04

B0

05

05H

R0-DR1

05

A2

06

06H

(DR1)+(DR2)-R0

95

9A

01

机器指令

微程序入口地址

微地址

微操作

微代码

微指令功能说明

0

1

2

STA

0AH

01H

PC-AR PC+1

05

ED

82

取指令,译码

02H

RAM-BUS  BUS-IR

04

C0

48

0AH

PC-AR PC+1

05

ED

87

存数

07H

RAM-BUS  BUS-AR

04

E0

0D

0DH

R0-BUS BUS-RAM

06

82

01

机器指令

微程序入口地址

微地址

微操作

微代码

微指令功能说明

0

1

2

OUT

0BH

01H

PC-AR PC+1

05

ED

82

取指令译码

02H

RAM-BUS  BUS-IR

04

C0

48

0BH

PC-AR PC+1

05

ED

8E

输出

0EH

RAM-BUS  BUS-AR

04

E0

0F

0EH

RAM-BUS  BUS-DR1

04

A0

15

15H

DR1-LED

07

0A

01

机器指令

微程序入口地址

微地址

微操作

微代码

微指令功能说明

0

1

2

JMP

0CH

01H

PC-AR PC+1

05

ED

82

取指令,译码

02H

RAM-BUS  BUS-IR

04

C0

48

0CH

PC-AR PC+1

05

ED

96

JMP

16H

RAM-BUS  BUS-PC

04

D1

81

 

五、实验总结

     手动操作时,系统按照程序编写方式,逐一执行代码:提取机器指令、放入指令寄存器、测试、执行所需操作…执行上述操作的同时,也需要手动的操作IN单元、开关单元、WR、RD等,从而完成一系列的指令操作。最后程序正确的执行,并得出最后正确结果。联机操作时,通过写入需要执行的程序、微程序命令,在CMA软件中进行仿真实验,在实验模型中,可以看到执行每一条指令所进行的一系列操作,同时观察出数据的流向、各个门的开闭。运行到最后,得出正确结果。

    无论是手动操作还是联机操作,都可以正确的执行写入的程序指令,得出正确的结果。通过两次不同实验的对比,我们可以发现,其实微程序起的作用就是将所有指令需要执行的操作编写成一条条的微操作,形成一个微程序库。当执行不同的指令时,同时调出对应的微操作,完成指令操作。

    通过这次的微程序控制实验,自己深有体会。原来计算机处理程序指令是通过先提取指令、送往指令寄存器,然后利用判断电路对指令类型进行测试,再进行相应的指令操作。在判断数据的流向、存储器的打开等选择上,这时就靠微程序起作用了。在手动操作运行程序时,我们通过逐步手动的控制输入输出流、WR、RD等控制信号,从而进行一系列的指令操作,完成所需运算。而微程序起的作用就是人为的把需要执行指令所需的“人为动作”,全部以微指令的方式存储起来,当需要执行相应的微指令时,直接从微存中调出微程序即可。所以,微程序起的作用简而言之就是替代手工的操作,使得计算机可以按照一定的逻辑关系运行,这同样也是计算机可以在没有人的操作下独立运行人们所编写的原因,同时也保持了绝对的准确性。通过手动操作运行程序和联机运行程序的对比,明白了原来微程序是以程序命令的方式模拟手动操作。这样计算机的准确性也就同时上了一个新的台阶。

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值