计算机组成原理 课程设计报告
计算机组成原理
课程设计报告
成员:许恺 2014011329
胡强勇 2014011315
时间:2016.12.20
一.简要总结计算机组成原理实验
计算机组成原理实验总共五个实验,首先我们熟悉了教学机的使用方法,后面的实验我们分为运算器、存储器、控制器,控制器分为两次实验。紧接的第二次实验我们就进行了运算器的实验,对运算器的内部构造极其原理进行了验证理解,在这里我们学习了运算器ALU的8种运算功能,以及其通用寄存器组,以及运算器的编码指令和每部分的作用。然后,我们第三次实验对我们课上所学的存储器进行了实验验证,按照书上的步骤进行了内存扩展,在这次实验中我们了解了存储器的功能、组织以及静态存储器芯片的读写原理,通过实验对字扩展和位扩展有了理解和掌握。第四次和第五次实验都是关于微程序控制器的实验,这部分我们先学习了很多图表,都是和微程序控制相关的,通过这些和实验,我们理解了控制器的功能和组成,理解了各类典型指令的执行流程,对指令格式、寻址方式、指令系统、指令分类有了系统的概念,还让我们学会了指令的设计以及相关技术。在这一部分,实验主要以教学机为基础来进行,通过让我们自己学习研究指令代码并进行设计来让我们对课本进行实践,让我们,看懂、理解、会写、会设计指令代码。计算机就是由运算器、存储器、控制器以及I/O组成的,接口部分有专门的课程,所以我们的计算机组成原理实验就从前三方面对我们的理论知识进行实践教学,主体重点清楚明了,实验难易结合,有单步验证也有综合设计,对我们的动手和设计能力有极大的提高。
二.回答下列问题
1.微程序中的微指令是顺序执行的吗?下地址是如何产生的?
1)不是。一般的微指令格式由操作控制和顺序控制两部分构成。操作控制部分用来发出管理和指挥全机工作的控制信号。其顺序控制部分用来决定产生下一个微指令的地址。
2)有两种方式
①计数器的方式:
微程序顺序执行时,其后继微地址就是现行微地址加上一个增量(通常为1);
当微程序遇到转移或转子程序时,由微指令的转移地址段来形成转移微地址。
特点:
优点:简单、易于掌握,编制微程序容易
缺点:这种方式不能实现两路以上的并行微程序转移,因而不利于提高微程序的执行速度。
②多路转移的方式:
转移条件:
①操作码
②状态条件及测试
③微指令中下地址
2.根据实验,哪些微指令是所有机器指令都要用到的?为什么要这样设计?
答:加电启动(1条):0->PC,DI#=0;
取指(3条):PC->AR,PC+1->PC;
MEM->DR;
DR->IR;
执行完毕(2条):STR->Q、CC#=INT#;
PC->AR、PC+1->PC
因为这些指令都属于公操作。所谓公操作,就是一条指令执行完毕后,CPU所开始进行的操作,这些操作主要是CPU对外围设备请求的处理,如中断处理、通道处理等。由于所有的指令的取指周期是完全一样的,因此,取指令也可认为是公操作。
3.一条机器指令与一段微指令相对应,完成这条机器指令的微程序的各条微指令存放在控制存储器中,存放这些微指令的微地址是否连续,为什么?
答:不连续。因为微指令执行的顺序控制问题,就是如何确定下一条微指令的地址问题。通常,产生后继微地址有两种方法。分别是计数器方式和多路转移方式。而这两种方式产生的下一条微指令的地址都不一定连续。
4.设计!
1)指令设计(题目要求)
指令设计:
指令:SBB
指令格式:16位一个字长
功能:DR-SR-CF->DR
微程序地址映射:指令编码 00100001->51
选择寄存器:目的寄存器R0,源寄存器R1
指令存储格式:2101
微程序与32位微码:
01:PC->AR,PC+1->PC; 8D05505E
02:MEM->IR; 20800008
03:/MAP; 80800000
51:DR-SR-CF->DR; 30 0011 0000 100 001 011 001 0000 0001 001 010 000 000
30:STR->Q,CC#=INT#; 9C000003
31:PC->AR,PC+1->PC,CC#=0; 8D05505E
指令设计:
指令:STRX DR,OFFSET[SR]
指令格式:16位两个字长
功能:PC->AR,PC+1->PC,MEM+SR->AR,CC#=0,DR->MEM
微程序地址映射:指令编码11100110->61
选择寄存器:不用
指令存储格式:E601
微程序与32位微码:
01:PC->AR,PC+1->PC; 8D05505E
02:MEM->IR; 20800008
03;/MAP; 80800000
61:PC->AR,PC+1->PC;00 1110 0000 100 011 010 000 0101 0101 000 001 011 000
62:MEM+SR->AR,CC#=0;00 1110 0000 001 101 011 000 0000 0000 000 000 011 000
63:DR->MEM; 30 0011 0000 000 100 001 000 1000 0000 000 000 000 001
30:STR->Q,CC#=INT#; 9C000003
31:PC->AR,PC+1->PC,CC#=0; 8D05505E
指令设计:
指令:JMPR
指令格式:16位一个字长
功能:JMPR SR
微程序地址映射:指令编码01100000->5A
选择寄存器:源寄存器R0
指令存储格式:6000
微程序与32位微码:
01:PC->AR,PC+1->PC
02:MEM->IR
03:/MAP
5A: SR->PC,CC#=0 30 0011 0000 100 100 011 000 0101 0000 000 000 000 000
30:STR->Q,CC#=INT#
31:PC->AR,PC+1->PC,CC#=0
指令设计:
指令:CALR
指令格式:16位两个字长
功能:调用SR指明的子程序
微程序地址映射:指令编码11100000->64
确定转移
指令存储格式:E000
微程序与32位微码:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP
64:SP-1->SP、AR; 00 1110 0000 100 011 011 001 0100 0000 000 001 011 000
65:PC->MEM; 00 1110 0000 000 100 001 000 0000 0101 000 000 000 001
66:SR->PC、CC#=0; 30 0011 0000 100 100 011 000 0101 1000 000 000 000 000
30:STR->1,CC#=INT#; 9C000003
31:PC->AR,PC+1->PC; 8D05505E
指令设计:
指令:ADC
指令格式:16位一个字长
功能:DR+SR+C->DR
微程序地址映射:指令编码00100000->50
选择寄存器:目的寄存器R0,源寄存器R1
指令存储格式:2001
微程序与32位微码:
01:PC->AR,PC+1->PC
02:MEM->IR
03:/MAP
50:DR+SR+CF->DR 30 0011 0000 100 001 011 000 0000 0001 001 010 000 000
30:STR->Q,CC#=INT#
31:PC->AR,PC+1->PC,CC#=0
指令设计:
指令:STC
指令格式:16位一个字长
功能:C=1
微程序地址映射:指令编码01101101->57
指令存储格式:6D00
微程序与32位微码:
01:PC->AR,PC+1->PC
02:MEM->IR
03:/MAP
57:STC,CC#=0 30 0011 0000 100 011 001 000 0000 0000 100 000 000 000
30:STR->Q,CC#=INT#
31:PC->AR,PC+1->PC,CC#=0
指令设计(拓展)
指令设计:
指令:RCL DR
指令格式:16位一个字长
功能:DR带进位C循环左移
微程序地址映射:指令编码00101010->54
所用寄存器:源寄存器R0
指令存储格式:2A00
微程序与32位微码:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
54:DCL DR; 30 0011 0000 100 011 111 000 0000 0000 110 101 000 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
指令设计:
指令:IRET
指令格式:16位一个字长
功能:中断返回
微程序地址映射:指令编码11101111->67
所用寄存器:无
指令存储格式:EF00
微程序与32位微码:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
67:SP->AR,SP+1->SP; 00 1110 0000 100 011 010 000 0000 0100 000 001 011 000
68:MEM->STR、CC#、INTOLD#; 30 0011 0000 001 111 001 000 0000 0000 000 000 100 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
指令设计:
指令:NOT
指令格式:16位一个字长
功能:DR<-/DR
微程序地址映射:指令编码00101101->52
选择寄存器:目的寄存器R0
指令存储格式:2D00
微程序与32位微码:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
52:/DR->DR; 30 0011 0000 100 011 011 111 0000 0000 001 000 000 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
指令设计:
指令:STRA [ADR],SR
指令格式:16位两个字长
功能:[ADR]<-SR
微程序地址映射:指令编码11100111->5F
选择寄存器:目的寄存器R0
指令存储格式:E701
微程序与32位微码:
01:PC->AR,PC+1->PC;
02:MEM->IR;
03:/MAP;
5F: PC->AR,PC+1->PC; 60 1110 0000 100 011 010 000 0101 0101 000 001 011 000
60:MEM->AR; 30 0011 0000 001 111 001 000 0000 0000 000 000 011 000
30:STR->Q,CC#=INT#;
31:PC->AR,PC+1->PC,CC#=0;
2)错误和遇到的问题以及解决
指令设计中出现了很多错误和问题,我们说一下遇到的问题和错误以及解决。
- SST问题?
解答:SST标志位问题,对标志位无影响时使用000;对标志位产生影响时用001;想 通过标志位直接输出0或1时用011或100;RAM0表示将16位最低位放进标志位;同 理RAM15表示将最高位放到标志位,在移位时使用;Q0指将Q寄存器的最低位放到标 志位,用法不详。
- I2~0中0A和0B的区别?
解答:没什么区别,如果如果需要输出给运算寄存器,则需要用B;如果需要直接从A输出,则用A。
- I2~0中Q和D的含义?
解答:Q寄存器是一个乘商寄存器,当运算涉及乘除法时,会使用Q寄存器,其他情况为通用寄存器同AB;D寄存器通常用于有内存读的时候,代表了内存和内存的一些指令,实验书上未详细介绍。
- DC1中中断向量低位到内部总线的含义?
解答:中断向量的低位指中断向量16位的低四位,将其送到内部总线判断指令是否产生中断。(DC1中的000约等于111,没什么作用。)
- CC#=0为何有时加有时不加?
解答:CC#=0放在非公操作指令的最后一条微指令的末尾,表示指令执行结束,跳转到30公操作。
- RCL的SSH SCI 中为什么用逻辑移位?
解答:应该用的是循环移位。
5.回答问题
1)设计指令系统
2)设计上述6条机器指令对应的微指令
答:此题在上面已经解答,在此不做重复。
3)除公操作外,每个指令用哪几条微指令实现指令功能?
答:此题在上面已经解答,在此不做重复。
4)分析说明三条扩展指令的32位微码的设置原理。
在这里选择三条扩展指令进行详细的32微码设置的分析:
1.SBB指令分析
SBB DR,SR
DR-SR-CF->DR
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
100 |
001 |
011 |
001 |
0000 |
0001 |
001 |
010 |
000 |
000 |
MRW |
因为此指令无内存和I/O读写,故选1XX |
I2-0 |
因为涉及DR和SR,所以用A和B两个锁存器,故为001 |
I8-6 |
因为要->DR,所以要输出到DR上,所以选F->B,Y=F,故为011 |
I5-3 |
因为是减法运算,所以选R-S,故为001 |
B口 |
因为B口使用R0,故为0000 |
A口 |
A口使用R1,故为0001 |
SST |
因减法运算还有-CF,会有标志位的运算,所以选择001 |
SSH,SCI |
因为运算中存在CF故标志位不定,,所以选010 |
DC2 |
指令并没有对AR,IR,INT操作,故不操作,选000 |
DC1 |
因为不需要用到DC1故选000 |
2.JMPR指令分析
JMPR SR
SR->PC,CC#=0
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
100 |
100 |
011 |
000 |
0101 |
1000 |
000 |
000 |
000 |
000 |
MRW |
因为此指令无内存和I/O读写,故选1XX |
I2-0 |
因为SR直接赋值,所以用A锁存器,R为0,故为100 |
I8-6 |
因为要->SP,所以要输出到SP上,所以选F->B,Y=F,故为011 |
I5-3 |
因为是0+SR运算,所以选R+S,故为000 |
B口 |
因为B口使用SP,R5,故为0101 |
A口 |
A口使用SR,R8,故为1000 |
SST |
因为不会存在标志位的改变,所以选择000 |
SSH,SCI |
因为不需要用标志位,所以选000 |
DC2 |
指令并没有对AR,IR,INT操作,故不操作,选000 |
DC1 |
因为不需要用到DC1故选000 |
3.STRA指令分析
STRA [ADR],SR
PC->AR,PC+1->PC;
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
100 |
011 |
010 |
000 |
0101 |
0101 |
000 |
001 |
011 |
000 |
MRW |
因为此指令无内存I/O读写,故选1XX |
I2-0 |
因为PC既要被运算也要被输出,故选B锁存器,故为011 |
I8-6 |
因为要->AR,PC,所以要输出到PC上,所以选F->B,Y=A,故为010 |
I5-3 |
因为是加法运算,所以选R+S,故为000 |
B口 |
因为B口使用PC,R5,故为0101 |
A口 |
A口使用PC,R5,故为0101 |
SST |
不会有标志位的运算,所以选择000 |
SSH,SCI |
因PC需+1,标志位需要为1,所以选001 |
DC2 |
因为需要AR接收,故选011 |
DC1 |
因为不需要用到DC1故选000 |
MEM->AR;
MRW |
I2-0 |
I8-6 |
I5-3 |
B口 |
A口 |
SST |
SSH.SCI |
DC2 |
DC1 |
001 |
111 |
001 |
000 |
0000 |
0000 |
000 |
000 |
011 |
000 |
MRW |
因为此指令需要读取内存,故选000 |
I2-0 |
因为从内存读取,所以使用D直接赋值,故为001 |
I8-6 |
因为直接输出,不用改变B的值,所以选Y=F,故为001 |
I5-3 |
因为加0运算,所以选R+S,故为000 |
B口 |
因为B口没使用,故为0000 |
A口 |
A口没使用,故为0000 |
SST |
因不会有标志位的运算,所以选择000 |
SSH,SCI |
因为没有标志位运算,所以选000 |
DC2 |
指令要写入AR,故选011 |
DC1 |
因为不需要用到DC1故选000 |
6.总结感悟
这次的计算机组成原理课程设计我组成员收获颇丰,在掌握知识的同时,还增强了克服困难的信心。总体来说,本次的报告难度适中,如果上课认真学习报告是没有问题的,在报告的写的过程中,我们复习了很多课上还有实验中的知识,同时也查了一些资料,问了老师一些问题,感觉懂得了不少课内外的知识。不仅如此,完成报告也给了我们鼓励,让我们在面对困难的时候能够认真的一步一步去完成,不断提高自己。在和老师的交流中我们也发现了实验的一些小漏洞,比如可能对于学生来说实验书写的知识太少了,有的知识点不能理解的很好,我认为可以在实验书上写更多的扩展知识,让同学们更加的理解整个知识体系,也学的更多。谢谢。