计算机SAP-1 设计与实现(2)
在SAP-1中,指令周期为如上图。指令周期由取指周期和执行周期组成。SAP-1中,取指周期包括T0、T1、T2。执行周期为T3、T4、T5。
取指令周期中,所有的指令都是一样的,分三步
(1)将PC中数据(ROM的地址)读取放到MAR中
(2)根据MAR读取ROM中的数据,放到IR中
(3)PC = PC + 1
下图周标出了这三个阶段中,那些部位处于工作状态,那些不工作。其中绿色部位处于工作状态,灰色不工作。
取指周期
第一阶段(T0),EP=1,LM=1,其他控制位是0,这样在CLK到达上升沿时,PC中的内容将通过总线存储到MAR中。
第二阶段(T1),ER=1,LI=1,其他控制位是0,这样从PROM中取出数据,在CLK上升沿时,根据MAR读取ROM中的数据,放到IR中。
第三阶段(T3),CP=1,其他控制位是0。其中CP为PC的使能端,CP=1时,CLK上升沿时,PC=PC+1。
因此取指周期中,总结如下表
阶段
CP EP LM ER
LI EI LA EA
SU EU LB LO
功能
T0
0 1 1 0
0 0 0 0
0 0 0 0
MAR = PC
T1
0 0 0 1
1 0 0 0
0 0 0 0
IR = ROM(PC)
T2
1 0 0 0
0 0 0 0
0 0 0 0
PC = PC + 1
执行周期中,各个指令需要执行的操作是不同的。下面对各个指令分别进行介绍。
LDA指令
LDA指令的执行周期包括分三步
(1)IR将指令分为操作码和操作数。操作码将存入CON中,操作数存入MAR中。其中操作码将存入CON中,操作数(PROM的地址)存入MAR中。
(2)根据MAR读取PROM中的数据,放到A中。
(3)LDA指令在这个阶段是空操作。
LDA执行周期
第四阶段(T3),EI=1,LM=1,其他控制位是0,首先IR将操作码直接输出给CON;而操作数,由于EI=1,LM=1,当CLK下一个上升沿到达时,会被存放到MAR中。
第五阶段(T4),ER=1,LA=1,其他控制位是0,这样根据MAR存储的数据地址从PROM中取出数据,在CLK上升沿时,PROM中的数据通过总线放到A中。
第六阶段(T5),所有控制位都为0,空操作
总结如下表:
阶段
CP EP LM ER
LI EI LA EA
SU EU LB LO
功能
T3
0 0 1 0
1 0 0 0
0 0 0 0
MAR = ADDRESS
T4
0 0 0 1
0 0 1 0
0 0 0 0
A = ROM(ADDRESS)
T5
1 0 0 0
0 0 0 0
0 0 0 0
空操作
ADD指令
ADD指令的执行周期包括分三步
(1)IR将指令划分为操作码和操作数。操作码将存入CON中,而操作数存入MAR中。
(2)根据MAR读取PROM中的数据,放到B中。
(3)ALU将A、B中的数据相加,将结果放到A中。
ADD执行周期
第四阶段(T3),EI=1,LM=1,其他控制位是0,首先IR将操作码直接输出给CON;而操作数由于EI=1,LM=1,当CLK下一个上升沿到达时,会将操作数存放到MAR中。
第五阶段(T4),ER=1,LB=1,其他控制位是0,这样根据MAR存储的数据地址从PROM中取出数据,在CLK上升沿时,根据MAR读取ROM中的数据,放到B中。
第六阶段(T5),LA=1,EU=1,其他控制位是0。由于ALU的加减控制位SU=0,ALU执行加法操作。而LA=1,EU=1,当CLK的上升沿到达时,ALU中计算的结果将通过总线到达A。而这个过程,将经历两个延迟时间段。一个是ALU输出数据的延迟,一个LA接收数据时的延迟。因此ALU只会计算一次。
阶段
CP EP LM ER
LI EI LA EA
SU EU LB LO
功能
T3
0 0 1 0
0 1 0 0
0 0 0 0
MAR = ADDRESS
T4
0 0 0 1
0 0 0 0
0 0 1 0
B = ROM(ADDRSS)
T5
0 0 0 0
0 0 1 0
0 1 0 0
A = SUM
SUB指令
SUB指令的执行过程与ADD指令类似,T0——T4阶段相同,只是T5时,ALU的加减法使能端SU=1,ALU执行减法操作。
阶段
CP EP LM ER
LI EI LA EA
SU EU LB LO
功能
T3
0 0 1 0
0 1 0 0
0 0 0 0
MAR = ADDRESS
T4
0 0 0 1
0 0 0 0
0 0 1 0
B = ROM(ADDRSS)
T5
0 0 0 0
0 0 1 0
1 1 0 0
A = DIFF
OUT指令
OUT指令的执行周期包括分三步
(1)IR将指令分为操作码和操作数,操作码传给CON。将A的内容传输到O寄存器,同时O寄存器的内容将传给D。
(2)、(3)空操作。
OUT执行周期
OUT执行周期
第四阶段(T3),EA=1,LO=1,其他控制位是0,IR将操作码解码输出给CON;CON信号中EA=1,LO=1,这样当CLK上升沿时,将A中的数据通过总线传输给O。同时D(LED等)显示O的内容(计算结果)。
第五阶段(T4),所有控制位是0。
第六阶段(T5),所有控制位是0。
阶段
CP EP LM ER
LI EI LA EA
SU EU LB LO
功能
T3
0 0 0 0
0 0 0 1
0 0 0 1
OUT = A
T4
0 0 0 0
0 0 0 0
0 0 0 0
空操作
T5
0 0 0 0
0 0 0 0
0 0 0 0
空操作
HLT指令
HLT指令,将通知CON停止计算。这个操作将通过CON产生关闭时序脉冲来实现。
四.电路
? CON
控制器是计算机操作执行指令的关键部件。
l 指令解码器
指令解码器解析从IR寄存器发送的操作码,也就是IR的高四位。电路图如下,
LDA = 非I7·非I6·非I5·非I4
ADD = 非I7·非I6·非I5·I4
SUB = 非I7·非I6·I5·非I4
OUT = I7·I6·I5·非I4
HLT = I7·I6·I5·I4
I7 I6 I5 I4 = 0000时, LDA = 1,ADD=0,SUB=0,OUT=0,HLT=0;
I7 I6 I5 I4 = 0001时, ADD = 1;
I7 I6 I5 I4 = 0010时, SUB = 1;
I7 I6 I5 I4 = 1110时,OUT = 1;
I7 I6 I5 I4 = 1111时,HLT = 1。
l 控制器矩阵
从指令解码器解析出来的LDA、ADD、SUB、OUT和循环计数器的输出(T0、T1、T2、T3、T4、T5)共同来解析这个控制矩阵,矩阵的输出为CON信号:CP EP LM ER LI EI LA EA SU EU LB LO。
在控制矩阵中,
CP = T2
EP = T0
LM = T0 + ( LDA· T3 ) + (ADD· T3) +(SUB· T3)
ER = T1+ ( LDA· T4 ) + (ADD·T4)+(SUB· T4)
LI = T1
EI = ( LDA·T3 ) + (ADD·T3) +(SUB·T3)
EA = ( LDA·T4 ) + (ADD·T5) +(SUB·T5)
LA = OUT· T3
SU = SUB ·T5
EU = ( ADD· T5 ) + (SUB· T5)
LB = ( ADD· T4 ) + (SUB· T4)
LO = OUT · T3
取指周期
当T0是高电平时,EP=1,LM=1。其他控制信号为0;
当T1是高电平时,ER=1,LI=1,其他控制信号为0;
当T2是高电平时,CP=1,其他控制信号为0。
执行周期
以LDA为例,即LDA=1。
当T3是高电平时,LM=1,EI=1。其他控制信号为0。
当T4是高电平时,ER=1,EA=1。其他控制信号为0。
当T5是高电平时,所有控制信号为0。
ADD、SUB、OUT取指周期的分析过程与LDA相同。
循环计数器、指令解码器、控制矩阵的连接关系如下:
? PROM
ROM相当于很多的寄存器。
ROM可以使用二极管阵列来存取数据。使用解码器来存期ROM中的数据。
ROM实现的电路图如下:
ROM电路图
在电路图中,当A2 A1 A0 = 000时,选中0号与门,输出为1,1-7号与门输出为0。
因此,二极管矩阵中第一行有二极管的位置将处于导通状态,输出为1,其他位置输出为0。输出结果0001。
在proteus中的仿真结果如下图,红色代表高电平,蓝色代表低电平。
? ALU
半加器
二进制半加器电路图
SUM = A⊕B
CARRY = A·B
半加器真值表
A
B
CARRY
SUM
0
0
0
0
0
1
0
1
1
0
0
1
1
1
1
0
全加器
二进制全加器电路图
SUM = A⊕B⊕C
CARRY = ( A·B ) + ( B·C ) + ( A·C )
A
B
C
CARRY
SUM
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
而四位二进制全加器结果如下
ALU可以执行加法和减法操作。为了设计的电路简单,ALU对补码进行运算。SUB为加减法标志。当SUB=1时,执行减法操作,当SUB=0时,执行加法操作。四位ALU的电路图所下:
? PC
PC使用带使能端的计数器实现
在proteus中,使用74161来实现。74161为4位二进制计数器,计数范围为0000—1111。
电路图如下,CP为使能端。CLK是脉冲输入端,CLR是清空计数器,EP是输出使能端。当CP=1时,76161开始计数,CP=0时,76161停止计数。
CLR=1时,清空计数器,CLR为异步清空。
EP=1时,将输出数据,EP=0时,输出处于断开状态。
? A
寄存器A使用两个四位寄存器4076实现。
? B、IR、MAR、O这四个寄存也使用4076实现。
五.在Proteus软件仿真
电路图所用的proteus版本是7.1sp2,电路图的下载地址如下:
http://user.qzone.qq.com/457204657#!app=905&url=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fapp%2FqzoneDisk%2FqzoneDisk.html%23qz_height%3D920%26qz_width%3D950%26uin%3D457204657%26pfid%3D2%26qz_ver%3D6%26appcanvas%3D1%26qz_style%3Dv6%2F88%26params%3D%26entertime%3D1356499239203%26canvastype%3D
SAP-1全局图
PC
MAR
ROM
IR
CON
A
ALU
B
O