计算机组成原理(7)----CPU内部单总线数据通路

本文详细解释了CPU内部单总线方式下,寄存器间、寄存器与主存、寄存器与ALU之间的数据流动过程,涉及微操作、控制信号和时序。重点讨论了间接寻址在ADD指令中的应用,展示了单总线设计的成本效益对比。
摘要由CSDN通过智能技术生成

目录

1.CPU内部单总线方式

(1)寄存器与寄存器之间的数据流动

(2)寄存器与主存之间的数据流动

(3)寄存器与ALU(算数逻辑单元)之间的数据流动

(4)例题


1.CPU内部单总线方式

单总线方式如下图所示,寄存器的控制信号,例如 IR_{in}等,都是由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中了。同时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提供的地址写回主存。

  • 38
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值