基于微程序控制器主控存分开 的简单计算机设计与实现Word文件下载.docx
《基于微程序控制器主控存分开 的简单计算机设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于微程序控制器主控存分开 的简单计算机设计与实现Word文件下载.docx(30页珍藏版)》请在冰点文库上搜索。
5.3加法运算指令16
5.4乘2微指令17
5.5回存微指令18
6.时序设计18
7.时序图20
8.设计接线图21
六.检查过程23
七.布线调试时遇到的问题及解决办法23
八.实现心得体会26
九.参考文献27
一.实验题目
基于微程序控制方式的主控存分开的简单计算机系统的设计与实现
二.实验目的
1.加深对冯诺依曼体系结构计算机组成及其各部分功能的理解,进一步建立整机的概念。
2.加深对计算机数据通路的理解,加深对计算机指令系统、微指令的认识,并通过时序控制,完整地设计一个简单的计算机系统。
3.锻炼学生初步的计算机系统分析和设计能力。
4.锻炼学生分析、定位和排除故障的能力。
三.实验要求
1.利用各单元实验和课堂上所学知识,选择适当的芯片,设计简单的计算机系统。
2.在完成数据通路设计并验证数据通路功能的基础上增加指令和微指令控制的功能。
3.以自己所设计的计算机系统为硬件环境,设计出完成指定功能的各指令周期流程图,并设计出相应的微命令。
4.以手动方式产生各指令执行过程中所需要的微命令,控制指令的执行。
5.设计控存,并将各指令的微程序存放在CM中,经过适当的时序控制,通过微程序自动控制指令的执行。
四.实验流程
在课程设计开始前,我们检查了各个芯片是否能正常工作。
按照实验指导书上面所给定的各个芯片的功能进行测试,在确定所用的芯片都是好的之后再开始进行接下来的工作。
在整个课程设计的过程中,我们依照的是课程设计指导书上面的三步走方法:
第一步:
打通数据通路,可向存储器6116中存数,向寄存器中打入,用手动实现算术或逻辑运算。
第二步:
由PC寻址加载机器指令,完成指定算术或逻辑运算;
并将结果存入存储器中。
第三步:
由机器指令的操作码部分加载微指令,由机器指令的地址码部分加载操作数,同时,由它加载的各个微信号,进行运算完成一条机器指令的执行。
五.设计方案
1.芯片选择
在这次的课程设计中,我们选择的芯片类型及数量如下:
74LS2442片
74LS3735片
1812片
74LS1611片
74LS1571片
74LS3951片
61161片
28162片
关于各个芯片的选择理由如下:
74LS244芯片:
该芯片具有“选通”和“高阻”两种状态,适合用来作为数据输入或是流通时的闸门,所以我们采用了两片244。
一片用来向6116中存入机器指令,另外一片用来控制向6116中回存运算的结果。
73LS373芯片:
该芯片又称八D锁存器,从它的功能表中也可以看出它具有“选通”和“锁存在已建立的数据电平”两种状态,所以该芯片适合用来作为寄存器。
因此我们采用了5片373芯片,其中一片寄存181的运算结果并输出显示,一片作为数据累加器AC,一片作为IR寄存机器指令,剩下两片作为μIR存放从控存中读出的微指令。
181芯片:
181芯片是进行算术或逻辑运算必不可少的芯片,而运算的数据是存放在6116中的,每个单元的数据有8位,因此我们需要两片181并联实现8位数据的运算。
74LS161芯片:
该芯片又称同步四位计数器,从它的名字就可以看出它具有计数的功能,同时我们在实现中还利用到了它的清零功能。
161芯片是用来作为PC使用的,通过它的4位输出一共可以选择到主存6116中的16个地址单元。
74LS157芯片:
该芯片又称2选1数据选择器,一共有两个输入数据流,每一个数据流是4位的,通过使能端S可以选通其中任意一个数据流,因此该芯片非常适合用来作为主存6116的地址选择控制。
当需要机器指令的时候,157选择PC送来的地址;
当需要数据的时候157选择IR的低四位送来的数据地址。
74LS395芯片:
该芯片有两个功能,“清零”和“置数”,我们选择它作为μPC。
由于在每执行完一条机器指令之后都要再执行取指公操作,因此我们选择将取值公操作存放在控存的0号单元。
取指阶段将395清零,执行取指公操作;
执行阶段395置数,执行具体功能。
6116芯片:
该芯片的类型是RAM,我们选择它作为主存。
由于主存中需要根据不同的表达式反复写入各种机器指令,而6116的数据存入要相对2816简单一点,因此主存采用的是6116芯片。
2816芯片:
该芯片的类型是ROM,因此使得它具有断电之后还能保存数据的优势。
选择两片2816作为控存,存放微指令。
因为微指令只需要在设计好了之后,一次性的打入,以后都不需要再修改了,所以2816无疑是最好的选择。
此外还有若干逻辑门
2.设计原理图
在原理图的设计过程中,我们是分步走的。
首先是从最基本的数据通路开始,然后再一点点的像垒积木一样的往上添加各种芯片逐步实现各个功能。
现在将该过程做一个详细的介绍如下:
2.1数据通路
数据通路部分我们是按照《组成原理实验指导书》实验五的参考电路一的方案去做的,只是在上面做了两点改动:
1.将两片395芯片换成了一片373芯片。
因为395需要脉冲触发,较373来说略显麻烦,因此进行了这样的替换。
2.将6116输入到181的数据由A输入端改成了B输入端。
因为在做减法时是A-B,为了能正确进行连续的减法运算就必须将AC存放的数据从A端输入,而将从主存中取出来的数据从B端输入。
最后设计的数据通路电路图如下:
图1
按照该电路连接之后,能够手动实现各种基本的数据运算。
具体的步骤为:
将数据事先存放到存储器的某些单元中,再通过手动选择地址选中数据,手动调节运算指令,手动操作各个芯片的使能端,从而能够进行连续的算术或逻辑运算,并将结果显示。
2.2增加回存功能
在按照2.1中设计的电路连接之后,我们发现所设计的数据通路没有回存功能,因此我们需要在原来的电路上进行一些改进。
我们认为回存和开始的时候向主存6116中打入数据其实是同样的原理,不过就是要能够控制回存的时机,也即需要回存的时候才将运算结果回存到主存的某一个单元,其余时候不会影响到主存中存放的数据。
因此我们仍然采用244芯片,以A寄存器的结果为输入,输出连到6116的输入/输出端,然后通过手动选择244的使能端来控制回存的时机。
这样设计的电路如下:
图2
2.3增加机器指令部分
在完成了数据通路,并多次测试确认无误的基础上,我们开始在上面实现机器指令。
此时的机器指令的意思就是能够通过PC选址加载8位的机器指令到指令寄存器IR中。
这8位机器指令得到高4位是操作码,由这4位操作码直接连到181运算器的S3-S0端,去控制各种运算类型;
8位机器指令的低4位则是地址码,会回到主存6116中去选择运算需要的数据。
按照这样的需求,我们增加了一片373作为指令寄存器IR,增加了一片157用于在4位地址码和PC输出的地址中做二路选择。
这样设计出来的电路如下:
图3
2.4增加微指令部分
从这里开始,就到了整个实验的关键部分了。
所谓增加微指令也就是通过一系列的设计,把之前的那些需要我们手动控制的各个芯片的使能端全部都通过微指令的0、1状态控制起来。
之前2.3中实现的只是控制到了181的S3-S0这4个使能端,现在各个芯片,比如181的M端、Cn非端、各个373的使能G端都要用微指令来控制。
我们统计了一下,这个需要控制的点超过了8个,因此我们需要两片373作为微指令寄存器μIR,这样就可以设计16位的微指令(实际上用不到16位)。
微指令是存放在控存中的,对于控存我们选用的是2816。
之所以选择2816主要是看中了它是ROM类型的存储器,能够在断电之后依然保存所存储的数据,而恰好微指令也只需要在设计完毕之后一次性的存入,以后一般这样就可以免除了我们多次写控存的工作。
μPC我们选用的是395芯片,主要是因为该芯片有一个清零功能。
我们在每个机器指令执行前我们需要先执行取指公操作,然后再执行具体功能的微指令。
这样395的清零功能就为我们提供了很大的便利,我们只需要将取指微指令放在控存的0号单元,然后在每个指令周期的开头将μPC清零,就可以进行取指操作了。
综上所述,我们在机器指令的基础上添加了一片395.两片2816和两片373,最后设计出的电路如下所示:
图4
3.设计微程序控点
在设计微指令之前,我们先分析整个电路中的各个芯片的控点,其中有些是需要控制的;
有些是不需要变动的,始终接到一个电位就行了。
首先是不需要控制的控点:
输入244芯片:
OEa非和0Eb非控点并接,然后接到一个开关上,只在写机器指令的时候选0,写完后一直为1。
这个由手动控制,不需要微指令控制。
主存6116芯片:
CE非始终接0,OE非始终接0(我们选用WE非为0,OE非为0的那个写功能)。
多余的地址线接到一起,始终接0(或者接1也可以)。
PC161芯片:
MR非端接开关,只在开机的时候手动置0,清零之后再置1。
但是后来发现其实可以将start非接到MR非端实现自动清零,因为start非端也是只在开机的时候为0,其余时候一直为1。
157芯片:
使能端E非始终为0。
DR373、AC373、IR373、μIR373:
输出控制始终接0。
控存2816芯片:
CE非始终接0,WE非始终接1,OE非始终接0。
(因为控存始终是读状态)。
μPC395芯片:
PE始终接1,OE非始终接0。
接下来是需要控制的控点:
WE非
S
CP
MR非、CP非
IR373、μIR373、DR373、AC373:
使能G
回存244芯片:
OEa非、OEb非并接在一起控制
根据那些需要控制的控点,我们设计出来的微指令的每一个控点的状态及其所表示的意义如下表所示:
微指令控点意义表
取值
控点
1
C14
运行
停机
C13
清零
置数
C12-C9
181的S3-S0控制端
C8
181有进位
181无进位
C7
算术运算
逻辑运算
C6
IR不变
IR置数
C5
DR不变
DR置数
C4
AC不变
AC置数
C3
回存244无效
回存244有效
C2
主存写
主存读
C1
157地址选PC
157地址选地址码
C0
PC不变
PC加1
现在对这15个微指令控点做一一的解释如下:
C14:
该位直接连到时序部分的STOP端口,平时该位一直为0,只有当最后需要停机时才将该位置为1。
通过该位可以实现自动停机。
C13:
该位会连到作为μPC的395的清零端MR非和CP非,配合时序来控制μPC的置数和清零。
通过将该位置0,来使得μPC清零,通过将该位置1,来使得μPC置数。
通过该位,可以让μPC在恰当的时候置数取到相应的微指令,在恰当的时候又可以清零执行取指公操作。
C12-C9:
这四个控制位会直接连到181的S3-S0四个控制端口,通过这四个控制位的0/1状态来进行不同的运算。
C8:
该位会直接连到低位181的低位进位端,然后低位181的向高位的进位端再连到高位181的低位进位端。
通过选择该位为1表示没有进位,而通过选择该位为0表示有进位。
该位的设置主要是为了实现减法运算,因为181只有A-B-1的运算,为了正确的实现减法,就用一位进位来抵消。
该位平时一直置1,只有减法运算的时候才置为0。
C7:
该位直接连到181芯片的M端,这样可以控制进行的是算术运算还是逻辑运算。
C6:
该位是控制作为IR的373芯片的选通和保持状态的,当该位为1时IR选通,存放在主存中的机器指令会送到IR中去;
当该位为0时IR会保持当前的输出不变,也就相当于此事的输入端无效。
之所以要设置该位是因为从主存中读到的数既有机器指令又有运算数据,因此从主存输出的数据不是每一次都可以读到IR中去的,因此需要控制IR何时有效。
C5:
该位是控制作为DR的373芯片的,DR是存放181的运算结果的,当该位为0时,DR处于不选通状态,而只有当该位置1时DR才选通,181的运算结果才能存放到DR中去。
C4:
该位是控制作为AC的373芯片的,AC是累加器,用来存放上一次运算为止的运算结果,通过AC实现连续运算的功能。
C3:
该位控制作为回存的244芯片。
回存功能只有在最后运算全部完毕的时候,才将最后的运算结果送回到主存中去,而其余时候是不会向主存输入数据的。
因此通过选择该位为0,则将244选通,此时可以回存数据;
通过选择该位为1,则将244置为高阻状态,即没有输出。
C2:
该位直接连到主存6116芯片的WE非端。
当该位为1时主存读数据,该位为0时主存写入数据。
该位的设置主要是为了配合完成回存功能,一般情况下主存都是处于读数据状态,只有当回存时主存才会写入数据。
C1:
该位直接连到157芯片的输入选择S端,该位为1时选择的是I1端口的输入有效,也即IR中存放的机器指令的低4位地址码有效;
该位为0时选择的是I0端口的输入有效,也即PC的地址有效。
之所以要设置该位是因为,在主存中存放的有两种数据,一种是机器指令,它的地址是根据PC来选择的;
另外一种是进行运算所需的数据,它的地址是根据机器指令的地址码部分来选择的。
通过该位即可控制主存中各种数据的正确取得。
4.微指令设计
根据上面设计出来的微指令的控点,我们开始设计具体的微指令。
先将每一条微指令列举如下:
微指令
C15
C12
C11
C10
C9
空
μPC
S3
S2
S1
S0
Cn非
M
IR
DR
AC
回存
主存
157
PC
取指
取数
加
与非
减
乘2
异或
或非
非
与
现在对上述微指令的设计设计过程做一一的介绍如下:
(其中各种算术/逻辑运算指令就选取加法指令为代表)
4.1取指公操作
取指公操作阶段,显然系统还在运行,故C14位设为0。
此时μPC应该置数,置数的内容为IR中存放的机器指令的高4位操作码,然后才能根据μPC所置的数到控存中去取对应的微指令,故C13位置1。
取指阶段不涉及到运算器的功能,故C12-C9、C8、C7的取值任意,我们设为0000、1、0。
指令寄存器此时应该选通,因为要读取机器指令进来,故C6位置1。
同样的此时没有涉及到运算功能,故DR、AC应该保持当前的输出不变,C5和C4设为11。
不涉及到回存,回存244设为高阻,内存为读状态,故C3和C2设为11。
此时157应该选择PC的输入,根据PC的输入选取机器指令,故C1位置0。
取值阶段的最后PC的值要自动加一,以便下一次取指能取到下一条机器指令,故C0位置1。
4.2取数微指令
所谓取数微指令,也就是进行了一次逻辑运算“F=B”。
此时不用停机,C14置0。
μPC需要在取数指令执行的最后清零,以便后面执行取值公操作,故C13置0。
根据F=B的运算,相应的置C12-C9为1010。
进位端C8任意,我们设为1。
运算类型为逻辑运算,C7置为1。
机器指令已经在取指阶段取到,此时IR无效,C6置0。
运算的结果要存放到DR和AC中,故DR、AC都要选通,C5和C4置为11。
此时不涉及到回存,故回存244高阻,主存为读,C3和C2设为11。
157应该选择IR输入的地址码,到内存中去取运算需要的数据,故C1设为1。
没有取机器指令,PC的值不变,C0为0。
4.3加法微指令
加法指令的设计主要是在运算器部分。
不用停机,C14为0。
μP需要在加法指令执行的最后清零,以便后面执行取指公操作,故C13为0。
根据加法运算,设置C12-C9为1001;
无进位,C8为1;
算术运算,C7为0。
IR保持当前输出不变,C6为0。
DR、AC都要选通,故C5和C4设为11。
不涉及到回存,主存处于读状态,故C3和C2设为11。
157选择IR输入的地址码,到内存中去取数,故C1设为1。
没有取新的机器指令,PC的值不变,故C0为0。
4.4回存微指令
回存指令设计的重点在于回存244芯片和主存的状态。
系统仍在运行,停机位C14为0。
回存指令的最后需要将μPC清零,以便后面执行取指公操作,故C13为0。
回存不涉及到运算功能,故C12-C9、C8、C7的值任意,我们设为0000、1、0。
DR、AC、回存的244芯片都应该选通,故C5、C4、C3分别为1、1、0。
主存应该为写入状态,故C2为0。
回存的地址由回存机器指令的低4位地址码给出,控制157的C1为1。
PC不变,C0为0。
4.5停机微指令
停机微指令的设计重点在于停机位C14,只要在这时才会被设为1。
μPC会在最后清零,故C13为0。
不涉及到运算,同样C12-C9、C8、C7的取值任意,我们设为默认值0000、1、0。
此时IR、DR、AC、回存244、主存、157芯片、PC都不再有效,因此接下来的C6-C0我们设为0001100。
5.指令周期流程图
每一条机器指令的执行都分为两个阶段:
取指阶段、执行阶段。
每一条微指令的执行流程图如下所示:
所以设计出来的取指微指令为0010000101001101
5.2取数微指令
所以设计出来的取数微指令为0001010110111110
5.3加法运算指令(其余双目算术/逻辑运算指令同此)
所以设计出来的加法微指令为0001001100111110
同理:
减法微指令为0000110000111110
与非微指令为0000100110111110
异或微指令为0000110110111110
或非微指令为0000001110111110
与微指令为0001011110111110
5.4乘2微指令(其余单目算术/逻辑运算指令同此)
所以设计出来的乘2微指令为0001100100111110
非微指令为0000000110111110
5.5回存微指令
所以设计出来的回存微指令为0000000100110010
6.时序设计
在设计了微指令各个控制位的0/1状态之后还需要配合时序来完成整个的系统的自动运行。
时序设计的基础是手动操作一定要熟练掌握,对于先控制哪个芯片,后控制哪个芯片自己心中要做到非常的熟悉。
接下就是将这些有先后次序的人工作业转换为各个T时间内的作业。
开机前,手动将PC、μPC清零。
开机时,控存取到0号单元存放的取指微指令,然后接下来不断取到后面的指令去执行,直到停机指令。
现在对于各个芯片的控制端的时序设计解释如下:
μPC在每条指令执行完毕后,也即下一条指令执行的开始清零,执行取值公操作,故清零端MR非=T0·
C13。
取指微指令发出之后,μPC就应该置数,故CP非=T1·
μIR373芯片:
μIR会在两个时候置数,一个是μPC清零时取到取指微指令,另外一个是μPC置数后取到具体的执行的微指令。
由于T0时刻μPC清零,T1时刻置数,故μIR的使能G端=T0·
C13+T2·
C0。
控存2816:
控存始终处于读状态,WE非置1,OE非置0,CE非置0。
IR373芯片:
IR用来存放从主存中读出的机器指令,只有在取指微指令发出之后IR才能选通。
由于μPC在T0时刻清零,故IR在T1时刻选通,使能G端=T1·
C6。
157芯片负责从PC和IR两个输入端选择地址,不需要时序控制合适有效,输入选择S直接接μIR的输出控制位。
181芯片的使能端有S3-S0、Cn非、M,这六个使能端都不需要用时序来控制,直接从μIR的输出端连过来。
DR373芯片:
DR会在181运算完毕后选通,使得运算结果存放到DR中去。
T2时刻控存的微指令才到达μIR,故我们让DR在T3时刻选通,其使能G端=T3·
C5。
AC373芯片:
在数据存放到DR之后,AC才能选通,数据从DR到AC。
DR在T3时刻存放数据,故AC在T4时刻选通,其使能G端=T4·
C4。
主存6116芯片:
主存平时一直为读状态,只有在回存时才处于写入状态。
因此其WE非端=T4非·
C2。
回存功能是在最后将运算的结果写入到主存中,由于在T3时刻运算结果才寄存到DR中,因此回存功能放在T4时刻实现。
其OEa非/OEb非=T4非·
PC在指令执行过程的最后加1,故放在T4时刻进行,CP=T4·
7.时序图
我们设计的每条机器指令的执行包含两个阶段,第一个是取指阶段,第二个是执行阶段。
如下图所示:
指令在各个T时间内的操作如下表所示:
指令在各个T的操作表
指令
T0
T1
T2
T3
T4
μPC清零
CM->
μIR
MM->
IR.op->
NULL
PC+1
MM、AC->
181
181->