一、实验目的
1.掌握微程序控制器的组成原理。
2.掌握微程序的编制、写入,观察微程序的运行过程。
二、实验设备
计算机组成原理实验系统一套,PC机一台。
三、预习要求
1.复习微程序控制器工作原理;
2.复习计算机微程序的有关知识。
四、实验原理
微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作。它的执行方法就是将控制各部件动作的微命令的集合进行编码,即将微命令的集合仿照机器指令一样,用数字代码的形式表示,这种表示称为微指令。这样就可以用一个微指令序列表示一条机器指令,这种微指令序列称为微程序。微程序存储在一种专用的存储器中,称为控制存储器,微程序控制器原理框图如图3-1所示。

图3-1 微程序控制器组成原理框图
控制器是严格按照系统时序来工作的,本实验所用的时序由时序单元来提供,分为四拍TS1、TS2、TS3、TS4。
微指令字长共24位,控制位顺序如表3-1所示。其中MA5…MA0为6位的后续微地址,A、B、C为三个译码字段,分别由三个控制位译码出多位。C字段中的P<1>为测试字位。其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的微地址入口,从而实现完成对指令的识别,并实现微程序的分支。
表3-1 微指令格式

本实验安排了四条机器指令,分别为ADD(0000 0000)、IN(00100000)、OUT(00110000)和HLT(01010000),括号中为各指令的二进制代码,指令格式如下:

实验中机器指令由CON单元的二进制开关手动给出,其余单元的控制信号均由微程序控制器自动产生,为此可以设计出相应的数据通路图,见图3-2所示。
几条机器指令对应的参考微程序流程图如图3-3所示。图中一个矩形方框表示一条微指令,方框中的内容为该指令执行的微操作,右上角的数字是该条指令的微地址,右下角的数字是该条指令的后续微地址,所有微地址均用16进制表示。向下的箭头指出了下一条要执行的指令。P<1>为测试字,根据条件使微程序产生分支。

图3-2 数据通路图

图3-3 微程序流程图
将全部微程序按微指令格式变成二进制微代码,可得到表3-2的二进制代码表。
表3-2 二进制微代码表
地址 | 十六进制 | 高五位 | S3-S0 | A字段 | B字段 | C字段 | MA5-MA0 |
00 | 00 00 01 | 00000 | 0000 | 000 | 000 | 000 | 000001 |
01 | 00 70 70 | 00000 | 0000 | 111 | 000 | 001 | 110000 |
04 | 00 24 05 | 00000 | 0000 | 010 | 010 | 000 | 000101 |
05 | 04 B2 01 | 00000 | 1001 | 011 | 001 | 000 | 000001 |
30 | 00 14 04 | 00000 | 0000 | 001 | 010 | 000 | 000100 |
32 | 18 30 01 | 00011 | 0000 | 011 | 000 | 000 | 000001 |
33 | 28 04 01 | 00101 | 0000 | 000 | 010 | 000 | 000001 |
35 | 00 00 35 | 00000 | 0000 | 000 | 000 | 000 | 110101 |
五、实验步骤
1.按图3-4所示连接实验线路,仔细查线无误后接通电源。如果有‘滴’报警声,说明总线有竞争现象,应关闭电源,检查接线,直到错误排除。
2.对微控器进行联机读写操作。
(1)将微程序写入文件
联机软件提供了微程序下载功能,以代替手动读写微控器,但微程序得以指定的格式写入到以TXT为后缀的文件中,微程序的格式如下:

如$M1F 112233,表示微指令的地址为1FH,微指令值为11H(高)、22H(中)、33H(低)。本次实验的微程序如下,其中分号‘;’为注释符,分号后面的内容在下载时将被忽略掉。

图3-4 实验接线图
$M 00 000001 ; NOP
$M 01 007070 ; CON(INS)->IR, P<1>
$M 04 002405 ; R0->B
$M 05 04B201 ; A加B->R0
$M 30 001404 ; R0->A
$M 32 183001 ; IN->R0
$M 33 280401 ; R0->OUT
$M 35 000035 ; NOP
(2)写入微程序
用联机软件的“【转储】—【装载】”功能将该格式(*.TXT)文件装载入实验系统。装入过程中,在软件的输出区的‘结果’栏会显示装载信息,如当前正在装载的是机器指令还是微指令,还剩多少条指令等。
(3)校验微程序
选择联机软件的“【转储】—【刷新指令区】”可以读出下位机所有的机器指令和微指令,并在指令区显示。检查微控器相应地址单元的数据是否和表3-2中的十六进制数据相同,如果不同,则说明写入操作失败,应重新写入,可以通过联机软件单独修改某个单元的微指令,先用鼠标左键单击指令区的‘微存’TAB按钮,然后再单击需修改单元的数据,此时该单元变为编辑框,输入6位数据并回车,编辑框消失,并以红色显示写入的数据。
3.运行微程序
运行时也分两种情况:本机运行和联机运行。
1)本机运行
①将时序与操作台单元的开关KK1、KK3置为‘运行’档,按动CON单元的CLR按钮,将微地址寄存器(MAR)清零,同时也将指令寄存器(IR)、ALU单元的暂存器A和暂存器B清零。
②将时序与操作台单元的开关KK2置为‘单拍’档,然后按动ST按钮,体会系统在T1、T2、T3、T4节拍中各做的工作。T2节拍微控器将后续微地址(下条执行的微指令的地址)打入微地址寄存器,当前微指令打入微指令寄存器,并产生执行部件相应的控制信号;T3、T4节拍根据T2节拍产生的控制信号做出相应的执行动作,如果测试位有效,还要根据机器指令及当前微地址寄存器中的内容进行译码,使微程序转入相应的微地址入口,实现微程序的分支。
③按动CON单元的CLR按钮,清微地址寄存器(MAR)等,并将时序与单元的开关KK2置为‘单步’档。
④置IN单元数据为00100011,按动ST按钮,当MC单元后续微地址显示为000001时,在CON单元的SD27…SD20模拟给出IN指令00100000并继续单步执行,当MC单元后续微地址显示为000001时,说明当前指令已执行完;在CON单元的SD27…SD20给出ADD指令00000000,该指令将会在下个T3被打入指令寄存器(IR),它将R0中的数据和其自身相加后送R0;接下来在CON单元的SD27…SD20给出OUT指令00110000并继续单步执行,在MC单元后续微地址显示为000001时,观查OUT单元的显示值是否为01000110。
2)联机运行
联机运行时,进入软件界面,在菜单上选择【实验】-【微控器实验】,打开本实验的数据通路图,也可以通过工具栏上的下拉框打开数据通路图,数据通路图如图3-2所示。
将时序与操作台单元的开关KK1、KK3置为‘运行’档,按动CON单元的总清开关后,按动软件中单节拍按钮,当后续微地址(通路图中的MAR)为000001时,置CON单元SD27…SD20,产生相应的机器指令,该指令将会在下个T3被打入指令寄存器(IR),在后面的节拍中将执行这条机器指令。仔细观察每条机器指令的执行过程,体会后续微地址被强置转换的过程,这是计算机识别和执行指令的根基。也可以打开微程序流程图,跟踪显示每条机器指令的执行过程。
按本机运行的顺序给出数据和指令,观察最后的运算结果是否正确。