二.详细设计1.确定指令格式(李航、周奥力共同完成)
要求的指令有Call、Ret、Mov、Add,为了方便写指令我们添加了IN、HLT、LDI、OUT指令,指令的格式如下:
单字节指令,Ret,HLT: 7—4 OPcode
3—2 Rs 1—0 Rd 作者姓名:李航&&周奥力&&彭翔(微程序设计)
双字节指令,Call,IN,OUT,Add,LDI: 7—4(1) OPcode 3—2(1) Rs 1—0 (1) Rd 7—0(2) Imm 三字节指令,Mov: 7—4(1) OPcode
说明:其中括号中的1 表示指令的第一字节,2 表示指令的第二字节;
3—2(1) Rs 1—0 (1) Rd 7—0(2) Imm 7—0(3) Imm Rs 为源寄存器,Rd为目的寄存器(00-11分别对应选定寄存器R0-R3);
2.确定所有指令的操作码,如下所示:(李航、周奥力共同完成) 助记符 IN CALL Ret Mov Add LDI HLT OUT OPcode 0000 0001 0010 0011 0100 0101 0110 0111
3.本次实验用到的指令译码电路如下:(李航、周奥力共同完成)
1
作者姓名:李航&&周奥力&&彭翔(微程序设计)
根据以上的电路图,得出了每条指令对应的微程序入口地址: 助记符 IN CALL Ret Mov Add LDI HLT OUT 微指令地址(十六进制) 30 31 32 33 34 35 36 37
4.根据以上得到的微程序入口地址,我们设计了如下的微程序流程图:(李航完成)
2
作者姓名:李航&&周奥力&&彭翔(微程序设计)
本次设计的微指令格式是参照实验八的格式,相关内容如下:
3
作者姓名:李航&&周奥力&&彭翔(微程序设计)
根据微指令流程图和微指令格式,我们设计了如下表所示的微指令:
二进制微代码表 地址 00 01 03 04 05 06 07 08 09 0E 11 12 13 14 15 16 17 18 19 十六进制 000001 006D43 107070 06B205 006D46 10A007 006608 200C09 00D341 00001A 106012 102013 006D54 106015 208201 001617 04B218 006D59 10201A 高五位 00000 00000 00010 00000 00000 00010 00000 00100 00000 00000 00010 00010 00000 00010 00100 00000 00000 00000 00010 S3-S0 0000 0000 0000 1101 0000 0001 0000 0000 0001 0000 0000 0000 0000 0000 0001 0000 1001 0000 0000 4
A字段 B字段 C字段 000 110 111 011 110 010 110 000 101 000 110 010 110 110 000 001 011 110 010 000 110 000 001 110 000 011 110 001 000 000 000 110 000 001 011 001 101 000 000 101 001 000 101 000 000 000 101 000 000 000 101 000 000 000 000 101 000 MA5-MA0 000001 000011 110000 000101 000110 000111 001000 001001 000001 011010 010010 010011 010100 010101 000001 010111 011000 011001 011010
作者姓名:李航&&周奥力&&彭翔(微程序设计)
1A 1B 1C 1D 1E 20 21 22 23 24 25 26 28 29 2A 2B 2C 30 31 32 33 34 35 36 37 OO1628 103001 10601D 280401 000001 001621 04B201 105163 001624 063201 106026 183001 03B229 00922A 06222B 00802C 0000CE 006D65 001604 006622 006D51 002416 006D5B 000036 006D5C 00000 00010 00010 00101 00000 00000 00000 00010 00000 00000 00010 00011 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 0000 0000 0000 0000 0000 0000 1001 0000 0000 1100 0000 0000 0111 0001 1100 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 001 011 110 000 000 001 011 101 001 011 110 011 011 001 010 000 000 110 001 110 110 010 110 000 110 011 000 000 010 000 011 001 000 011 001 000 000 001 001 001 000 000 110 011 011 110 010 110 000 110 000 000 000 000 000 000 000 101 000 000 000 000 000 000 000 000 011 101 000 000 101 000 101 000 101 101000 000001 011101 000001 000001 100001 000001 100011 100100 000001 100110 000001 101001 101010 011011 101100 001110 100101 000100 100010 010001 010110 011011 110110 011100
5.在.txt文档写了如下机器指令和微程序:(李航、周奥力、彭翔共同完成) $P 00 00
$P 01 00 ;将IN单元的数据送入R0中 $P 02 01
$P 03 00 ;将IN单元的数据送入R1中 $P 04 52
$P 05 38 ;将保存在内存中的立即数送到R2中,作为堆栈初值 $P 06 12
$P 07 0d ;执行CALL指令,进入地址为0DH的子程序入口 $P 08 44
$P 09 03 ;RO->(RO+R1)<<3位 $p 0a 70
$p 0b 40 ;R0->OUT $P 0c 60 ;停机 $P 0d 30 $P 0e 20
5
作者姓名:李航&&周奥力&&彭翔(微程序设计)
$P 0f 21 ;MOV指令,将内存中20单元的数写入21单元中 $P 10 22 ;RET $P 20 13 ;数据 $P 21 25 ;数据
$M 00 000001 $M 01 006D43 $M 03 107070 $M 04 06B205 $M 05 006D46 $M 06 10A007 $M 07 006608 $M 08 200C09 $M 09 00D341 $M 0E 00001A $M 11 106012 $M 12 102013 $M 13 006D54 $M 14 106015 $M 15 208201 $M 16 001617 $M 17 04B218 $M 18 006D59 $M 19 10201A $M 1A 001628 $M 1B 103001 $M 1C 10601D $M 1D 280401 $M 1E 000001 $M 20 001621 $M 21 04B201 $M 22 105163 $M 23 001624 $M 24 063201 $M 25 106026 $M 26 183001 $M 28 03B229 $M 29 00922A $M 2A 06222B $M 2B 00802C $M 2C 0000CE $M 30 006D65 $M 31 001604 $M 32 006622
6
作者姓名:李航&&周奥力&&彭翔(微程序设计)
$M 33 006D51 $M 34 002416 $M 35 006D5B $M 36 000036 $M 37 006D5C
三.测试(彭翔单独完成)
首先按照如下电路图连接电路:
数据通路图如下:
7
作者姓名:李航&&周奥力&&彭翔(微程序设计)
运行:
将时序与操作台单元的开关KK1 和KK3 置为‘运行’档,进入软件界面,首先将程序装载进去,然后选择菜单命令“【实验】—【复杂模型机】”,打开复杂模型机数据通路图。按动CON 单元的总清按钮CLR,然后通过软件运行程序,选择相应的功能命令,即可联机运行、监控、调试程序。
测试结果:
IN指令, 0E R0
8
作者姓名:李航&&周奥力&&彭翔(微程序设计)
LDI指令,(05)R2
9
作者姓名:李航&&周奥力&&彭翔(微程序设计)
CALL指令,将PC保存于39H中
10
作者姓名:李航&&周奥力&&彭翔(微程序设计)
MOV指令,将内存中20单元的数写入21单元中
11
作者姓名:李航&&周奥力&&彭翔(微程序设计)
Ret指令
Add指令,RO(RO+R1)<<3位
12
作者姓名:李航&&周奥力&&彭翔(微程序设计)
13
作者姓名:李航&&周奥力&&彭翔(微程序设计)
OUT指令,R0OUT
14
作者姓名:李航&&周奥力&&彭翔(微程序设计)
四.实验小结
实验结果完全符合当初的设计,各个微指令都实现了预先设计的目标,机器程序的测试也达到预期的效果。
五.参考文献
《计算机组成原理实验指导书》重庆大学计算机学院
《深入理解计算机系统》Randal E.Bryant David O’Hallaron编,中国电力出版社,2004年5月
《计算机组成和设计》David A.Patterson John L.Hennessy编,机械工业出版社,第4版
《计算机组成和设计》David A.Patterson John L.Hennessy编,机械工业出版社,第3版
15
作者姓名:李航&&周奥力&&彭翔(微程序设计)
六.个人总结
通过本次课程设计,不仅巩固了在课堂上学习的知识,而且还锻炼了我们的实际动手能力.理解了复杂模型机的组成;通过自己设计微程序,也明白了微程序的实质和工作原理。
我在这次课程设计中负责微程序代码的设计和编写,当然我还有一个队友,在和他讨论的过程中,我也学习到了很多新的知识,同时发现了自己的不足之处。在设计的过程中,我感觉最难的就是Add指令的设计了,因为该指令需要将源寄存器和目的寄存器中的数相加后左移多位后再送回到目的寄存器。实现相加是很简单的,但是复杂模型机的ALU单元没有左移多位的功能,只能利用循环来解决这个问题。所以我们利用到了微指令的P<3>字段,但是在前面的实验中老师并没有讲过这方面的知识,我们只好去通过翻阅实验指导书来学习它的使用方法,最后通过一个中午的努力,终于完成了该指令的设计。
这次课程设计中,我认为最不起眼但最重要的就是电路图的连接了。因为就算微程序设计的再好,实验电路图一旦连错,就不能进行相关的测试了,这就会影响到我们,使我们不能继续做下去。实验图的连接是彭翔完成的,他很快就完成了电路的连接,我们才能顺利地进行测试。所以,团队合作才是最重要的,每个人都有自己的长处,用别人的长处去弥补自己的短处,这样在短时间内攻克难题。
16