简单模型机的微程序设计

更新时间:2024-03-16 14:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一.设计题目

计算机组成原理课程设计——简单模型机的微程序设计

二.主要内容

一般地讲,编写微程序可以分成以下几步: 1、设计机器的指令格式。

2、对所设计的指令进行分析,画出各指令的用微命令表示的微流程图。不仅要画出每个对应一条微指令的功能框内的微命令,而且要初步确定该条微指令在控存中的微地址,以便于在设计微程序时确定前一条指令的次地址NA字段和C字段的编码。在这个过程中,一定要注意P(1)测试的规则以及指令高四位的编码。

3、根据微流程图的顺序,一个功能框一个功能框地确定各字段的编码,将这些字段组合即可形成一条条的微指令编码。这些微指令的集合就是可以完成所设计的指令功能的微程序。当然这样设计的微程序有可能不完全正确,还需要进一步检查修改。

以上几步可以用脑、手、纸、笔即可完成。

4、对设计的微程序进行检查修改。本模型机可以手动地用开关将微程序输入机器的控存。为了能将要执行的指令输入主存,在微程序中必须安排一端相应的微程序;为了能检查输入的指令是否正确,也要设计一段微程序。

三. 具体要求

1.通过使用作者开发的微程序分析和设计仿真软件,熟悉介绍的为基本模型机而设计的微程序的执行过程。必须充分理解并正确解释下些问题:

(1)微程序中的微指令的各个字段的作用。哪些字段是不译码的,哪些字段是直接译码的,哪些字段又可以看成是字段间接编码的。 答:不译码的是S3~B0字段;直接译码的是A、B、C字段;间接编码的是uA6~uA1。

(2)微程序中的微指令是否是顺序执行的,如果不是,那么次地址是如何产生的。什么情况下,次地址字段才是将要执行的微指令的地址。

答:微程序中的微指令不是顺序执行的。如果遇到P(1)测试时,则在每一条功能指令执行完后,进行一次P(1)测试,根据P(1)测试跳到下一条机器指令的微地址。P(1)测试就是根据测试程序的机器指令中的8~5位和微程序的后六位进行或运算来实现分支,此次课程设计的微程序后六位设计为010000,则根据下面各功能的指令设计,IN、ADD、STA、OUT、JMP、MOV、NADD、AND、OR、XOR的入口地址分别为10H、11H、12H、13H、14H、15H、16H、17H、18H、19H。如果没有遇到P(1)测试的话,那么次地址即为该微指令地址字段所指向的微地址。

(3)在微程序中如何根据机器指令中的相关位实现分支,据此,在设计机器指 令时应如何避免和解决与其它指令的微指令的微地址冲突。

答:微程序中是根据测试程序的机器指令中的8~5位和微程序中后六位进行“或”运算来实现分支的。避免和解决与其它指令的微指令的微地址冲突的方法

就是使用不同没有被其他微指令用过的微地址。

(4)哪些微指令是执行所有指令都要用到的。 答:01:000000111110110110000010

02:000000001100000001010000

(5)解释一条机器指令的微程序的各条微指令的微地址是否连续?这些微指令的微地址的安排的严重原则是什么? 答:不连续。严重原则是将各条机器指令的入口微地址置于地址连续的地址单元中,避免其它微指令乱用这一段地址。

(6)为什么读写一次内存总要用两条微指令完成?

答:因为W/R只有两种状态,即要么是读,要么是写,所以,要完成一次读写总要用两条微指令完成。

(7)机器程序中用到的寄存器是R0,是由机器指令中哪些位决定的?如果要用R1或R2,是否要改写微程序或改写机器指令?如果要,应如何改写?

答:是由机器指令中的2~1位决定。如果要用到R1或R2,那么不需要改写微程序,但得改写机器指令的低两位,即2~1位,若要用到R1,则将其改为01,若要用R2,则将其改为10。

2.根据基本模型机的硬件设计五条机器指令:外设输入指令IN、二进制加法指令ADD、存数指令STA、输出到外设指令OUT、无条件转移指令JMP。并且增添下列五条指令:

①新加法指令 NADD RD,RS:(RS)加(RS)→(RD) ②或指令OR RD,RS:(RS)或(RD)→(RD)

③异或指令XOR RD,RS:(RS)异或(RD)→(RD) ④与指令AND RD,RS:(RS)与(RD)→(RD) ⑤数据传送指令MOV RD,RS:(RS)→(RD)

四.进度安排

共1.5周11天的时间,具体安排如下:

1~2天:对整个课程设计内容作详细的讲解,并辅导学生完成课程设计指导书的学习,使其掌握和理解课程设计的核心内容。

3~5天:学生在机房学习熟悉课程设计所使用的仿真软件,并深入了解该仿真软件所实现的模型机的指令系统和微程序的设计方法。

6~9天:在原有5条机器指令的基础上增加实现下述各功能的机器指令,试设计相应的机器指令的格式并改写原来的微程序使其可以运行所有的机器指令。 10~11天:根据自己设计的微程序系统写出相应的课程设计报告。

五.成绩评定

1

正文

一. 课程设计的目的

1. 计算机的硬件基本组成 2. 计算机中机器指令的设计 3. 计算机中机器指令的执行过程 4. 微程序控制器的工作原理 5. 微指令的格式设计原则

在此基础上设计可以运行一些基本机器指令的微程序的设计

二. 课程设计的内容

1. 编写基本模型机的指令

基本模型机的指令设计:

助记符 机器指令码 说 明

IN 0000 0000 ; 置数开关SW(KD0~KD7)的状态→R0 ADD addr 0001 0000 ×××× ×××× ; (R0)+(addr)→(R0) STA addr 0010 0000 ×××× ×××× ; (R0)→(addr) OUT addr 0011 0000 ×××× ×××× ; (addr)→输出设备\JMP addr 0100 0000 ×××× ×××× ; addr→PC

MOV 0101RS RD ;RS:(RS)→(RD)

NADD 0110RSRD ;(RS)+(RS)→(RD) AND 0111RS RD ;(RS)and (RD)→(RD) OR 1000RS RD ;(RS)or (RD)→(RD) XOR 1001RS RD ;(RS)xor (RD)→(RD) 说明:

十条指令分别为外设输入指令(IN)、二进制加法指令(ADD)、存数指令(STA)、输出到外设指令(OUT)、无条件转移指令(JMP)、寄存器间传数指令(MOV)、新加法指令(NADD)、与指令(AND)、或指令(OR)、异或指令(XOR)。××××××××为要读写的主存储器单元的二进制地址码。

2

2. 根据基本模型机的指令画流程图(1)、(2) ADD 11 PC→ AR PC+1 03 RAM→BUS BUS→AR 01 PC → AR PC+1 02 RAM→ BUS BUS → IR P(1)测试 IN 10 SW→ R0 STA 12 PC→AR PC+1 07 RAM→BUS BUS→AR OUT 13 PC→AR PC+1 09 JMP 14 PC→AR PC+1 MOV 15 RS→RD NAND 16 RS→ DR1 AND 17 RS→ DR1 OR 18 RS→ DR1 XOR 19 RS→ DR1 0D 0C 01 (DR1+DR1)→RD 0E RD→ DR2 1A RD→ DR2 1B 1C RD→ DR2 01 RAM→BUS BUS→AR 04 08 0A RAM→BUR0→BUS RAM S BUS→R→BUS 01 →DR2 BUSBUS→DR1 AM 05 0B R0→ DR1 01 DR1→L ED 06 (DR1+DR2) →R0 01 01

流程图(1)

RAM→BUS BUS→PC01 0F 1D (DR1异或DR2) → RD (DR1与(DR1或DR2) → DR2) → RD RD 01 01 01

3

01 PCB LDAR LDPC 02 CE有效 W/R=0 LDIR P(1)测试 ADD 11 PCB LDAR LDPC 03 STA 12 PCB LDAR LDPC 07 CE有效 W/R=0 LDAR 08 R0B CE有效 W/R=1 OUT 13 PCB LDAR LDPC 09 CE有效 W/R=0 LDAR 0A CE有效 W/R=0 LDDR1 0B 01 ALUB LEDB ALU=A W/R=1 0C 01 JMP 14 PCB LDAR LDPC MOV 15 RSB LDRi IN 10 SWB 有效 LDRi NADD 16 RSB LDDR1 0D ALU做新加法 LDRi ALUB AND 17 RSB LDDR1 0E RDB LDDR2 0F OR 18 RSB LDDR1 1A RDB LDDR2 1B ALU做“或” LDRi ALUB XOR 19 RSB LDDR1 1C RDB LDDR2 1D ALU做“异或” LDRi ALUB 01 CE有效 W/R=0 LDAR 04 CE有效 W/R=0 LDDR2 05 R0B有效 LDDR1 06 ALU做加法 LDRi ALUB 01

CE有效 W/R=0 LOAD 01 01 ALU做“与” LDRi ALUB 01 01 01 01 流程图(2)

4

3. 根据基本模型机微指令格式按流程图顺序写出微程序代码:

编写的机器指令代码如下:

01:000000111110110110000010 02:000000001100000001010000 03:000000001110000000000100 04:000000001011000000000101 05:000000111010010000000110 06:100101111001101000000001 07:000000001110000000001000 08:000000101000001000000001 09:000000001110000000001010 0A:000000001010000000001011 0B:000001110000101000000001 0C:000000001101000000000001 0D:110001111001101000000001 0E:000000111011010000001111 0F:101111111001101000000001 10:000000000001000000000001 11:000000111110110110000011 12:000000111110110110000111 13:000000111110110110001001 14:000000111110110110001100 15:000000111001001000000001 16:000000111010001000001101 17:000000111010001000001110 18:000000111010001000011010 19:000000111010001000011100 1A:000000111011010000011011 1B:111011111001101000000001 1C:000000111011010000011101 1D:011011111001101000000001

5

下面是利用该软件设计的微程序编码及各条微指令的功能分析: 24 23 22 21 20 19 01:000000 无效 02:000000 无效 03:000000 无效 04:000000 无效 05:000000 无效 06:100101 ALU作加法 07:000000 无效 08:000000 无效 09:000000 无效 0A:000000 无效 0B:000001 ALU=A 0C:000000 无效 0D:110001 ALU(A+A) 0E:000000 无效 0F:101111 ALU与 10:000000 无效 11:000000 无效 12:000000 无效 13:000000 无效 14:000000 无效

18 17 16 111 无效 15 14 13 12 11 10 B 110 PCB 000 无效 000 无效 000 无效 010 RDB 101 ALUB 000 无效 001 RSB 000 无效 000 无效 101 ALUB 000 无效 101 ALUB 010 RDB 101 ALUB 000 无效 110 PCB 110 PCB 110 PCB 110 PCB 6

9 8 7 C 110 LDPC 001 P(1) 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 110 LDPC 110 LDPC 110 LDPC 110 LDPC 6 5 4 3 2 1 uA6 uA5 uA4 uA3 uA2 uA1 000010 转微地址:02 010000 转微地址:NA(4~1位)或IR(8~5位) 000100 转微地址:04 000101 转微地址:05 000110 转微地址:06 000001 转微地址:01 001000 转微地址:08 000001 转微地址:01 001010 转微地址:0A 001011 转微地址:0B 000001 转微地址:01 000001 转微地址:01 000001 转微地址:01 001111 转微地址:0F 000001 转微地址:01 000001 转微地址:01 000011 转微地址:03 000111 转微地址:07 001001 转微地址:09 001100 转微地址:0C S3 S2 S1 S0 M Cn WEB1 B0 A 110 LDAR 001 100 从主存读 LDIR 001 110 从主存读 LDAR 001 011 从主存读 LDDR2 111 无效 111 无效 010 LDDR1 001 LDRi 001 110 从主存读 LDAR 101 000 向主存写 无效 001 110 从主存读 LDAR 001 010 从主存读 LDDR1 110向LED000 写 无效 001 101 从主存读 LOAD 111 无效 111 无效 111 无效 001 LDRi 011 LDDR2 001 LDRi 000 001 从SW读 LDRi 111 无效 111 无效 111 无效 111 无效 110 LDAR 110 LDAR 110 LDAR 110 LDAR 15:000000 无效 16:000000 无效 17:000000 无效 18:000000 无效 19:000000 无效 1A:000000 无效 1B:111011 ALU或 1C:000000 无效 1D:011011 ALU异或 111 无效 111 无效 111 无效 111 无效 111 无效 111 无效 111 无效 111 无效 111 无效 001 LDRi 010 LDDR1 010 LDDR1 010 LDDR1 010 LDDR1 011 LDDR2 001 LDRi 011 LDDR2 001 LDRi 001 RSB 001 RSB 001 RSB 001 RSB 001 RSB 010 RDB 101 ALUB 010 RDB 101 ALUB 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000 无效 000001 转微地址:01 001101 转微地址:0D 001110 转微地址:0E 011010 转微地址:1A 011100 转微地址:1C 011011 转微地址:1B 000001 转微地址:01 011101 转微地址:1D 000001 转微地址:01 4. 根据已经写好的微程序指令编写测试的机器指令程序编码:

00H:00000000 ;IN R0:SW->R0 验证IN指令,将SW状态赋给寄存器R0,此时R0=0

01H:00010000 ;ADD R0+31->R0 验证AND指令,将寄存器R0里的数据和0E地址内 容相加送给R0 ,此时R0=31 02H:00001110 ;地址0EH

03H:00100000 ;STA R0->10H 验证STA指令,将R0里的内容送到地址10H 04H:00001111 ;地址 0FH

05H:00110000 ;OUT(0FH) 验证STA指令,将地址10H内容输出到外设 06H:00001111 ;地址0FH

07H:01010001 ;MOV R0->R1 验证STA指令,将寄存器R0里的数据赋给寄存器 R0,此时R0=31,R1=31

08H:01100100 ;NADD R1+R1->R0 验证NADD指令,将寄存器R1里的数据加上自身后 赋给寄存器R0,此时R0=62 09H:01110100 ;(R0 and R1)->R0 验证AND指令,将R0与R1内容赋给R0,此时R0=20 0AH:10000100 ;(R0 or R1)->R0 验证OR指令,将R0或R1内容赋给R0,此时R0=31 0BH:10010100 ;(R0 xor R1)->R0 验证OR指令,将R0异或R1内容赋给R0,此时R0=0 0CH:01000000 ;JMP->00H 验证JMP指令,将地址0D的内容无条件转移给PC 0DH:00000000

0EH:00110001 ;31H 0FH:

三. 课程设计总结

通过这次一个多星期的课程设计,使我对计算机组成原理这门课程有了深刻的理解。在课程设计过程中,通过对各种指令代码的设计以及相应指令微程序的设计是我对计算机内部结构有了更深的理解,特别是运算器,存储器,微程序控

7

制器的运行和实现过程有了比较深刻的认识。

在这次课程设计的过程中也遇到了一些问题,一开始面对好多的0和1代码,无从下手,但经过老师的讲解和自己不断阅读指导书,最终问题也迎刃而解。其中问题最大的还是P(1)测试,只要把P(1)测试搞清楚了,微程序的跳转地址问题也就解决了。P(1)测试的微地址的最后4位的选择很重要,对指令的扩展有影响。其余各位的微指令参照指导书一一查找即可。

总之这次课程设计让我受益匪浅,在摸索设计的同时,培养了我的设计思想,增强了逻辑思维能力,对于计算机组成原理这门课的知识框架也有了清晰地认识,同时也深深体会到自己所学知识的不足之处,对知识的理解程度还不深。在设计的过程中虽然遇到了一些问题,通过与老师同学的交流最终解决了所遇到的问题。

8

本文来源:https://www.bwwdw.com/article/syi8.html

Top