1.CPU内部单总线方式
单总线方式如下图所示,寄存器的控制信号,例如 等,都是由CU发出的。
数据流动大致分为三类:
(1)寄存器与寄存器之间的数据流动
比如把PC内容送至MAR,实现传送操作的流程及控制信号为:
•(PC)-->Bus PCout有效,PC内容送总线
•Bus--->MAR MARin有效,总线内容送MAR
也可写为:(PC)--->Bus--->MAR,也有的教材写为:PC-->Bus-->MAR,这几种写法都是可以的,重要的是描述清楚数据流向
(2)寄存器与主存之间的数据流动
比如CPU从主存读取指令,实现传送操作的流程及控制信号为:
•将PC的数据通过内部总线放到MAR中
(PC)--->Bus--->MAR PCout和MARin有效,现行指令地址--->MAR
•地址信息传送完后,撤销控制信号,使内部总线空闲。由于要对主存进行读操作,所以CU会向主存发出读信号,即1-->R CU发读命令(通过控制总线发出)
同时CU也会向MAR发出控制信号,控制MAR的信息送到地址总线上
•主存通过MAR指示的地址,从存储体中读出相应的数据,将数据通过数据总线放到MDR中
MEM(MAR)--->MDR MDRinE有效
注:MDRin是内部总线向MDR输入信息的输入信号,MDRinE是外部总线向MDR输入信息的输入信号
•将指令放到指令寄存器IR中
MDR-->Bus--->IR MDRout和IRin有效,现行指令-->IR
(3)寄存器与ALU(算数逻辑单元)之间的数据流动
比如一条加法指令,微操作序列及控制信息为:
•根据指令的地址码部分,读取出参与加法的操作数。取指令时,是先把指令先传送到MDR,再从MDR复制数据到IR,所以MDR中存放的也是当前指令。所以也可以让MDRout和MARin有效
Ad(IR)--->Bus-->MAR MDRout和MARin有效
•CU向主存发送读信号,即1--->R
•主存储器根据MAR读取相应单元的数据,放到MDR中
MEM(MAR)--->数据线--->MDR MDRinE
•将参与加法运算的操作数放到暂存寄存器Y中
MDR--->Bus--->Y MDRout和Yin有效,操作数--->Y
注:内部总线同一时刻只能传送1个信号,所以加数通过总线放到暂存寄存器Y中(Y与ALU之间有专门的通路传送数据,不会占用数据总线),而被加数则放到ACC中。这样加数和被加数就能同时送到ALU中了
•现在使ACCout和ALUin有效,使ACC中的被加数,通过内部总线传送到ALU,与此同时暂存寄存器Y通过专门的通路将加数放到ALU中。
•ALU收到来自ACC的被加数,以及来自Y的加数后,还需要接收来自控制端CU的控制信号,控制信号告诉CU,此时进行的是加法操作,ALU将输出结果存放到暂存寄存器Z中
(ACC)+(Y)--->Z
当ALU输出的数据稳定后,就可以撤回两个控制信号(ACCout和ALUin),使内部总线空闲
•接下来还需要通过内部总线,将Z中的结果重新放回ACC(加法寄存器)中
Z--->ACC Zout和ACCin有效,结果--->ACC
所以采用单内部总线的方式,需要先把其中一个操作数放到暂存寄存器中,由暂存寄存器通过专门通路传送数据到ALU,另一个操作数通过内部总线传输到ALU。
而如果采用双内部总线或多内部总线的方式,则就不需要设置暂存寄存器了,直接通过两条内部总线将进行加法运算的操作数送到ALU中。
所以单内部总线设计成本更低,多内部总线设计成本更高,但是效率也会提高。
总结:
如下图所示,每一条指令由多个微操作组成,每个微操作的执行至少需要消耗一个时钟周期,每个时钟周期内CU都会发出一组相应的控制信号来完成微操作。
(4)例题
CPU内部单总线方式例题如下:
设有如图所示的单总线结构,分析指令ADD(R0),R1 的指令流程和控制信号。
题目解读:
对于R1,源操作数是直接放在R1中的。
对于R0,R0中存放的是目的操作数的地址,需要进行一次间接寻址才能找到目的操作数
加法操作的结果会被放回目的操作数指向的主存单元。由于会用到间接寻址,所以指令执行的周期:
取指周期--->间址周期--->执行周期
功能:((R0))+(R1)--->(R0)
取指周期:
1.将PC中的地址信息放到MAR中
2.根据MAR的地址信息(MARout),从主存中取指令数据,放到MDR中(MDRinE),并且CU发出控制信号告诉主存这是一条读操作(MemR)。
3.将指令信息传送到IR中
4.将指令信息送到译码器进行译码
5.每取出一条指令后,PC的值+1
时序如下:
当然也可以将(PC)+1--->PC,放到2时序中,因为从主存储器取完指令后PC就能+1了
间址周期:
1.将R0的地址信息输入到MAR中
2.根据MAR的地址信息,从主存中寻找数据,放到MDR中,至此加法中的一个操作数就被放到MDR
2.根据MAR的地址信息,从主存中寻找数据,放到MDR中,至此加法中的一个操作数就被放到MDR中了。同时CU需要给主存发出读控制信号。
注:之前讲述的间址周期是通过形式地址得到有效地址,再放到IR中,覆盖原来的形式地址,将间址寻址转换为直接寻址。
但是这里的间址寻址是直接将操作数读入到MDR中
有的教材规定,间址周期中需要将形式地址转换为有效地址即可,而一些教材规定,间址周期需要将间接地址指向的数据读入CPU内部,即放到MDR中。这一例题属于后者。
3.将MDR中的操作数,通过内部总线,放到暂存寄存器Y中
4.另一个操作数放在R1中,所以需要让R1out与ALUin有效,使R1的数据通过内部总线送到ALU中,与此同时另一个操作数通过专门通路从Y传到ALU中。并且需要让CU给ALU发出控制信号,告诉ALU这是一个加法操作。
5.ALU输出的结果放到暂存寄存器Z中,根据指令,还需要将加法的结果放到R0指向的主存单元中。所以先将Z的信息传送到MDR中
6.经过之前的步骤,MAR中存放的是R0寄存器的信息,并且MAR也没有更新过(数据没被覆盖),所以MAR此时已经指向了此时想要写的内存单元。再让控制单元CU发出写操作控制信号即可。
下面的微操作(MDR)--->M(MAR),就是将加法的结果,根据MAR提供的地址写回主存。