简单模型机地微程序设计.docx
《简单模型机地微程序设计.docx》由会员分享,可在线阅读,更多相关《简单模型机地微程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
简单模型机地微程序设计
课程设计报告
课程设计名称:
简单模型机的微程序设计
系:
三系
学生姓名:
班级:
软件二班
学号:
成绩:
指导教师:
开课时间:
2012学年2学期
一、设计题目
计算机组成原理课程设计——简单模型机的微程序设计
二、主要内容
1.通过使用作者开发的微程序分析和设计仿真软件,熟悉本文介绍的为基本模型机而设计的微程序的执行过程。
必须充分理解并正确解释下列问题:
⑴微程序中的微指令的各个字段的作用。
哪些字段是不译码的,哪些字段是直接译码的,哪些字段又可以看成是字段间接编码的。
⑵微程序中的微指令是否是顺序执行的,如果不是,那么次地址是如何产生的。
什么情况下,次地址字段才是将要执行的微指令的地址。
⑶在微程序中如何根据机器指令中的相关位实现分支,据此,在设计机器指令时应如何避免和解释其它指令的微指令的微地址冲突。
⑷哪些微指令是执行所有指令都要用到的。
⑸解释一条机器指令的微程序的各条微指令的微地址是否连续?
这些微指令的微地址的安排的严重原则是什么?
⑹为什么读写一次内存总要用两条微指令完成?
⑺机器程序中的用到的寄存器是R0,是由机器指令中哪些位决定的?
如果要用R1或R2,是否要改写微程序或改写机器指令?
如果要,应如何改写?
2.在原有5条机器指令的基础上增加实现下述各功能的机器指令,试设计相应的机器指令的格式并改写原来的微程序使其可以运行所有的机器指令。
新增加的机器指令的功能是:
或指令ORRD,RS:
(RS)或(RD)→(RD)
减法指令SUBRD,(addr):
(RD)减(addr)→(RD)
异或指令XOR(addr1),(addr2):
(addr1)异或(addr2)→(RD)
与指令ANDRD,RS:
(RS)与(RD)→(RD)
求反指令NOTRD:
/(RD)→(RD)
其中的RS、RD可以是R0、R1、R2中的任何一个。
三、具体要求
写出课程设计报告,解释你的设计思想,比如,如何实现各指令的分支,如何重新安排各指令对应的微程序中的微指令的微地址,如何设计各微指令的编码。
要求画出用微命令表示的微流程图并适当加以解释。
四、进度安排
共1.5周11天的时间,具体安排如下:
1~2天:
对整个课程设计的内容做详细的讲解,并辅导学生完成课程设计指导书的学习,使其掌握和理解课程设计的核心内容;
3~5天:
学生在机房学习熟悉课程设计所使用的仿真软件,并深入了解该仿真软件所实现的模型机的指令系统(原有的5条指令)和微程序设计方法;
6~9天:
在原有5条机器指令的基础上增加实现下述各功能的机器指令,试设计相应的机器指令的格式并改写原来的微程序使其可以运行所有的机器指令。
10~11天:
根据自己设计的微程序系统写出相应的课程设计实验报告
五、成绩评定
六、正文
(1)模型机的CPU及系统硬件
基本模型机的CPU及系统硬件组成如图1所示:
图1模型机的CPU及系统硬件组成
各部件的功能及控制信号如下:
运算器由算逻部件ALU(8位)、暂存器DR1、DR2及通用寄存器等组成。
ALU的功能控制信号为S3、S2、S1、S0、M、CN,可以实现48种算术和逻辑运算功能,如图2所示。
图274LS181功能表
运算器为单总线结构,其输入端分别连接到暂存器DR1和DR2,其装入数据的微命令分别为LDDR1和LDDR2,当它们为1电平时由节拍脉冲T4将数据总线上的数据装入相应的暂存器。
R0、R1、R2为通用寄存器。
R0的装入数据的微命令为LDR0,R1的装入数据的微命令为LDR1,R2的装入数据的微命令为LDR2。
299为实现移位运算的装置,当299B微命令有效时,其数据端和数据总线连接。
控制器由程序计数器PC、指令寄存器IR、地址寄存器AR、时序电路、控制存储器及相应的译码电路组成。
程序计数器PC的功能是存放下一条指令的地址,其输出是向地址寄存器提供要将执行的指令在存储器中的地址。
在提供地址后立即加1,指向指令的下一个字节或下一条指令的地址。
其控制微命令有三个。
当LOAD=0而LDPC=1时,由T4的正跳变将数据总线上的数据装入PC;当当LOAD=1而LDPC=1时PC的内容加1;当PCB=1时,PC中的地址信息送到数据总线上。
指令寄存器IR用于存放当前执行的指令。
当微命令LDIR=1时,由节拍脉冲T3将数据总线上的数据装入。
地址寄存器AR存放要从存储器中读出的数据或指令的地址或要向存储器写入数据或指令的地址。
当微命令LDAR=1时,由节拍脉冲T3将数据总线上的数据装入。
存储器RAM用于存放程序和数据。
当片选信号CE=0时,如果W/R为0,则根据AR中的地址,从存储器中读出数据并送到数据总线上;如果W/R为1,则根据AR中的地址,向存储器中写入数据总线上的数据。
片选信号CE是由微指令中的有关字段(B1B0)译码产生的。
模型机有两个外部设备:
输入设备是置数开关SW,用于设置数据或地址,当微命令SWB=0时,设置的数据送到数据总线上;SWB也是由微指令中的有关字段(B1B0)译码产生的。
输出设备是两位LED数码管,当微命令LEDB=1时,数据总线上的数据送到数码管显示。
(2)基本模型机的指令设计
根据基本模型机的硬件设计五条机器指令:
外设输入指令IN、二进制加法指令ADD、存数指令STA、输出到外设指令OUT、无条件转移指令JMP。
指令格式如下:
助记符机器指令码说 明
IN01010000;置数开关SW(KD0~KD7)的状态→R0
ADDaddr01100000××××××××;(R0)+(addr)→(R0)
STAaddr01110000××××××××;(R0)→(addr)
OUTaddr10000000××××××××;(addr)→输出设备"LED"
JMPaddr10010000××××××××;addr→PC
OR10100100;(RS)or(RD)→(RD)
SUBaddr10111100××××××××;(RD)-(addr)→(RD)
XOR11001100;(addr1)xor(addr2)→(RD)
AND11010100;(RS)and(RD)→(RD)
NOT11101100;/(RD)→(RD)
(3)指令微流程分析
原有的五条指令的微流程如下图所示:
总微流程如图所示:
该图是运行微程序的数据流图,实际上并没有分解到微命令一级。
为了设计微程序,还应该根据此图进一步细化到微命令(微操作)一级。
例如PC→AR,实际上应该同时发出PCB、LDAR两个微命令;PC+1应该发出LDPC微命令;SW→R0应该发出SWB、LDRi(与指令码中的相应位共同译码产生LDR0微命令)两个微命令;RAM→BUS应该发出CE有效和读存储器两个微命令;BUS→RAM应该发出
CE有效和写存储器两个微命令;R0→××是指R0B微命令有效等等。
据此可将该图改画成下图:
(4)基本模型机的微指令格式
本模型机的微指令长共24位,基本采用水平型微指令字段直接编码方式,其控制位顺序如下:
其中,S3、S2、S1、S0、M、CN(μA24~μA19位)为ALU运算类型的控制字段,其输出不需译码直接连接到ALU的对应控制信号即可。
需要指出的是,该字段无论如何编码,ALU都要进行某种运算,但是只要不发出ALUB微命令,ALU的运算结果都不会送到数据总线上,也就是不会对其它部件的操作产生任何影响。
在设计微程序时,只要不发ALUB微命令,该字段的编码可以任意设置。
μA18位为输出设备(LED)和主存(RAM)的读写控制字段,该位为0,表示读;该位为1,表示写。
μA17~μA16位(B1B0)字段用于选择外设和主存。
B1B0=01选择主存(CE有效),B1B0=00选择输入数据开关(SWB有效),B1B0=10选择输出LED(LEDB有效)。
B1B0=11对本模型机无效,即没有选中任何外设或主存。
对本模型机而言,上述三位可以看成一个字段,其编码的含义如下:
uA18uA17uA16=000或100从输入开关SW读数据
uA18uA17uA16=001从贮存读数据
uA18uA17uA16=101向主存写数据
uA18uA17uA16=110向LED写数据
其他组合无意义。
编写次微程序时采用011表示无效。
μA6~μA1位为6位的预置后续微地址,“预置”的含义是该字段与微地址控制字段以及指令寄存器等部件的内容共同产生下一条微指令在控存中的微地址。
A、B、C三个译码字段,分别由三组译码控制电路译码产生各种微命令。
A字段用于产生各寄存器的数据装入微命令,各种编码的含义如上表所示。
由于模型机有三个通用寄存器(R0、R1、R2),它们都有相应的数据装入微命令,为了不增加微指令的宽度,该字段只设计了一个LDRi命令。
为了区分究竟是哪个寄存器装入数据,要根据指令寄存器的最低两位(I1I0)的状态而定:
当I1I0=00时,发LDR0微命令;I1I0=01时,发LDR1微命令;I1I0=10时,发LDR2微命令;I1I0=11时,对本模型机无效;
B字段中的RSB、RDB、RIB分别为源寄存器的内容送数据总线、目的寄存器送数据总线及变址寄存器送数据总线的微命令,其功能是根据机器指令来选通三个工作寄存器R0、R1及R2之一,将其内容送数据总线。
具体规则如下:
如果RDB有效,根据指令寄存器的最低两位(I1I0)的状态决定哪个寄存器的内容送数据总线:
当I1I0=00时,发R0B微命令;I1I0=01时,发R1B微命令;I1I0=10时,发R2B微命令;I1I0=11时,对本模型机无效;
如果RSB有效,根据指令寄存器(I3I2)两位的状态决定哪个寄存器的内容送数据总线:
当I3I2=00时,发R0B微命令;I3I2=01时,发R1B微命令;I3I2=10时,发R2B微命令;I3I2=11时,对本模型机无效;
本模型机的变址寄存器固定为R2,故RIB有效就是R2B有效。
基于上述字段的设计规则,在设计机器指令格式时,必须将目的寄存器的编码放在指令的第一个字节的I1I0位置,将源寄存器的编码放在指令的第一个字节的I3I2位置,且编码必须符合上述规则,即00代表寄存器R0,01代表寄存器R1,10代表寄存器R2。
B字段中的299B是移位运算装置的数据端与数据总线相连的微命令。
该装置在图中没有画出。
C字段中的P
(1)~P(4)是四个测试字段。
其功能是根据机器指令、μA5~μA0字段及其它有关部件的内容,产生下一条微指令在控存中的微地址,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行等。
AR为算术运算是否影响进位及判零标志控制位,低电平有效。
LDPC为使PC+1的微命令。
P
(1)~P(4)的意义如下:
P
(1)测试的作用是次地址字段NA(4~1位)或指令寄存器IR(8~5位)产生下一条微指令在控存中的微地址的4~1位,下一条微指令在控存中的微地址的6~5位仍为NA字段的6~5位。
P
(2)测试的作用是次地址字段NA(2~1位)或指令寄存器IR(4~3位)产生下一条微指令在控存中的微地址的2~1位,下一条微指令在控存中的微地址的6~3位仍为NA字段的6~3位。
P(3)测试的作用是次地址字段NA(4位)或进位或零标志产生下一条微指令在控存中的微地址的4位,下一条微指令在控存中的微地址的其它位仍为NA字段的相应位。
P(4)测试的作用是次地址字段NA(2~1位)或(SWC,SWA)产生下一条微指令在控存中的微地址的2~1位,下一条微指令在控存中的微地址的6~3位仍为NA字段的6~3位。
(5)微程序设计
01:
000001001110110110000010
02:
000001011000000001010000
03:
000001001110000000000100
04:
000001001011000000000101
05:
000001011010000000000110
06:
100101011001101000000001
07:
000001001110000000001000
08:
000001101000001000000001
09:
000001001110000000001010
0A:
000001001010000000001011
0B:
000001110000101000000001
0C:
000001001101000110000001
0D:
000001001110000000001110
0E:
000001001001000000001111
0F:
011000011001000000000001
10:
000001000001100000000001
11:
000001011110110110000011
12:
000001011110110110000111
13:
000001011110110110001001
14:
000001011110110110001100
15:
000001011001010000000001
16:
011000011110110110001101
17:
011010011110110110011010
18:
101110011001010000000001
19:
000010011001010000000001
1A:
000001001110000000011011
1B:
000001001001000000011111
1C:
000001001110000000011101
1D:
000001001001000000011110
1E:
011010011001010000000001
1F:
000001001110000000011100
(6)机器指令测试程序的编写
00H:
00000000;IN
01H:
00010000;ADD(R0)+(addr)→(R0)
02H:
00010011
03H:
00100000;STA(R0)→(addr)
04H:
00010100
05H:
00110000;OUT(addr)→输出设备"LED"
06H:
00010100
07H:
01010100;OR(RS)or(RD)→(RD)
08H:
01101100;SUB(RD)-(addr)→(RD)
09H:
00010011
0AH:
01111100;XOR(addr1)xor(addr2)→(RD)
0BH:
00010010
OCH:
00010011
0DH:
10001000;AND(RS)and(RD)→(RD)
0EH:
10011100;NOT/(RD)→(RD)
0FH:
01000000;JMP(addr)→PC
10H:
00000000
11H:
00000001
12H:
00001110
13H:
01110000
(7)运行测试程序对编写的机器指令格式以及微程序进行检验
微指令000001011110110110000010
执行的操作是:
PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02
微指令000001011000000001010000
执行的操作是:
P
(1)测试:
NA(3~0)或(IR7~IR4),转微地址:
10
微指令000001000001100000000001
执行的操作是:
299保持数据,输入开关SWB有效,299→B,LDR0,转微地址:
01
微指令000001001110110110000010
执行的操作是:
存储器CE有效,存储器读,PC→B,LDAR,允许PC加1(LDPC=1),转微地址:
02