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

目录

1.CPU内部单总线方式

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

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

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

(4)例题


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中了。同时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提供的地址写回主存。

相关推荐
材料苦逼不会梦到计算机白富美10 分钟前
线性DP 区间DP C++
开发语言·c++·动态规划
java小吕布12 分钟前
Java Lambda表达式详解:函数式编程的简洁之道
java·开发语言
sukalot16 分钟前
windows C#-查询表达式基础(一)
开发语言·c#
程序员劝退师_18 分钟前
优惠券秒杀的背后原理
java·数据库
java小吕布34 分钟前
Java集合框架之Collection集合遍历
java
一二小选手35 分钟前
【Java Web】分页查询
java·开发语言
大G哥35 分钟前
python 数据类型----可变数据类型
linux·服务器·开发语言·前端·python
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
idea 弹窗 delete remote branch origin/develop-deploy
java·elasticsearch·intellij-idea
Code成立1 小时前
《Java核心技术 卷I》用户图形界面鼠标事件
java·开发语言·计算机外设
Xiao Fei Xiangζั͡ޓއއ1 小时前
一觉睡醒,全世界计算机水平下降100倍,而我却精通C语言——scanf函数
c语言·开发语言·笔记·程序人生·面试·蓝桥杯·学习方法