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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.CPU内部单总线方式

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

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

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

(4)例题


数据通路:

指令执行过程中数据所经过的路径,包括路径上的部件,称为数据通路。ALU、通用寄存器状态寄存器、Cache、MMU、浮点运算逻辑、异常和中断处理逻辑等,都是指令执行过程中数据流经的部件,都属于数据通路的一部分。

路径上的部件可以分为两类:

组合逻辑元件(操作元件):

不含存储信号的记忆单元,任何时刻产生的输出仅取决于当前的输入,加法器、算术逻辑单元(ALU)、译码器、多路选择器、三态门等都属于操作元件。

时序逻辑元件(状态元件):

包含存储信号的记忆单元,各类寄存器和存储器,如通用寄存器组、程序计数器、状态/移位/暂存/锁存寄存器等,都属于状态元件。

数据通路中的数据流动路径由控制部件控制,控制部件根据每条指令功能的不同,生成对数据通路的控制信号。(所以数据通路不包含控制部件)

数据流动的方式有两种:1.单总线方式;2.使用专门数据通路。这节先讲单总线数据流动的过程。

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

<think>好的,我现在需要回答用户关于“8088 memw memr”的问题。首先,我得确认用户提到的这些术语具体指的是什么。根据我的知识库,8088应该是指Intel 8088微处理器,这是早期IBM PC使用的CPU。接下来是“memw”和“memr”,这两个看起来像是某种缩写或信号名称。 我记得在微处理器系统中,控制总线上的信号通常包括存储器读写控制。例如,8088处理器会有MEMR(Memory Read)和MEMW(Memory Write)这样的信号线,用于控制对存储器的读取和写入操作。不过,用户写的是“memw”和“memr”,这里可能是大小写的问题,或者用户输入时的拼写习惯,通常正确的应该是MEMR和MEMW,即大写形式。 接下来,我需要详细解释这些信号的作用。MEMR是存储器读信号,当处理器需要从内存中读取数据时,会激活这个信号,通知内存芯片准备数据。而MEMW则是存储器写信号,当处理器要向内存写入数据时,该信号会被置为有效,允许数据总线上的数据写入指定的内存地址。 此外,应该提到这些信号在系统设计中的重要性,比如它们如何与地址总线、数据总线协同工作,以及时序上的考虑。可能还需要说明在8088系统中,这些信号是如何生成的,比如通过总线控制器芯片(如8288)来产生这些控制信号,特别是在最小模式和最大模式下的不同配置。 需要检查是否有混淆的地方,比如是否存在其他可能的解释,比如用户可能误拼了其他术语,但根据上下文,最合理的解释是存储器读写信号。另外,确认这些信号在8088中的具体引脚分配,比如MEMR和MEMW对应的引脚编号,以及它们的工作电压和时序特性,但可能用户只需要基础的解释,不需要过于深入的技术细节。 最后,组织回答的结构,先介绍8088处理器,再分别解释MEMR和MEMW,说明它们的功能和在系统中的作用,最后可能提到相关的总线控制和其他信号的关系,确保用户能够理解这些概念在整个计算机系统中的位置和重要性。</think>关于8088处理器的`MEMR`和`MEMW`信号,以下是逐步解释: --- ### 1. **背景:Intel 8088微处理器** Intel 8088是IBM PC/XT(1981年)使用的16位微处理器,采用8位外部数据总线。其通过**控制总线信号**管理存储器(内存)和I/O设备的读写操作。 --- ### 2. **关键信号:MEMR和MEMW** - **`MEMR`(Memory Read)** - **功能**:当8088需要**从内存读取数据**时,激活此信号。 - **行为**: 1. 将目标地址发送到地址总线(A0-A19)。 2. 置`MEMR`为低电平(有效),通知内存芯片准备数据。 3. 通过数据总线(D0-D7)接收内存返回的数据。 - **`MEMW`(Memory Write)** - **功能**:当8088需要**向内存写入数据**时,激活此信号。 - **行为**: 1. 将目标地址发送到地址总线。 2. 将待写入数据放到数据总线。 3. 置`MEMW`为低电平(有效),通知内存锁存并存储数据。 --- ### 3. **信号生成与时序** - **生成方式**: - 在**最小模式**下,8088直接生成`MEMR`/`MEMW`。 - 在**最大模式**下,需配合总线控制器(如8288)译码状态信号(S0-S2)生成。 - **时序要求**: - 内存需在`MEMR`/`MEMW`有效期间完成读写操作,否则需插入等待周期(通过`READY`信号控制)。 --- ### 4. **与其他信号的关系** - **`IOR`/`IOW`**:类似`MEMR`/`MEMW`,但用于I/O设备读写。 - **地址总线(A0-A19)**:指定内存位置(最大寻址1MB)。 - **数据总线(D0-D7)**:传输8位数据。 --- ### 5. **典型应用示例** ```text 假设8088执行指令 `MOV [0x1234], AL`(将AL寄存器的值写入内存地址0x1234): 1. 地址总线输出0x1234。 2. 数据总线输出AL的值。 3. `MEMW`置为低电平,内存将数据写入指定地址。 ``` --- ### 6. **注意事项** - 电平兼容性:需确保内存芯片支持TTL电平的`MEMR`/`MEMW`信号。 - 总线竞争:在多主设备系统中(如DMA),需通过`HOLD`/`HLDA`机制协调总线使用权。 --- 通过理解`MEMR`和`MEMW`,可以掌握8088如何与内存交互,这是分析早期PC架构或设计兼容系统的关键基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值