考研408《计算机组成原理》复习笔记,第五章(3)——CPU的【数据通路】
一、CPU还可以分为【数据通路】+【控制部件】
我前面一节的笔记里说过,CPU可以
- 分为【运算器】+【控制器】
- 或说【数据通路】+【控制部件】
回顾一下
【数据通路】就是具体传送数据、运算数据的部分
- 【数据通路】包括【组合逻辑元件】
- 又称【操作元件】
- 特性是【蠢!没有记忆!】(例如ALU算术逻辑单元,得靠暂存寄存器帮他存数据,不然都不知道自己要谁跟谁进行计算)
- 代表(要背!):算术逻辑单元ALU、指令译码器ID、多路选择器MUX、三态门......
- 【数据通路】还包括【时序逻辑元件】
- 又称【状态元件】
- 特性是【有记忆!能存东西!】、【包含存储信号!】
- 代表(要背!):PC、MDR、MAR、IR.....
- 总之,一切【有数据流经】的部件、通道都属于【数据通路】的一部分
- 比如隧道、高架桥、公交站、高铁站、停机坪......都属于交通系统一部分
;
;
而【控制部件】根据【微操作控制信号】不同,还分为:
- 【硬布线控制器】(后期重点,以后再学)
- 【微程序控制器】(后期重点,以后再学)
二、数据通路的功能和基本组成
1、数据通路的功能
【数据通路】:就是数据在指令过程中经历的【路径】和【路径上的部件】
- 数据通路描述了 “信息从哪里开始?”、“中间经过哪些部件?”、“最后被传送到哪里?”
- 一切【有数据流经】的部件、通道都属于【数据通路】的一部分
- 比如隧道、高架桥、公交站、高铁站、停机坪......都属于交通系统一部分
- 数据通路【由控制部件CU控制】
- 【CU】是数据通路的【核心】
- 控制部件根据每条指令功能的不同,生成对数据通路的控制信号(或者说由CU产生的控制信号建立数据通路)
【例题】
2、数据通路的组成
组成数据通路的元件主要分为:【组合逻辑元件】和【时序逻辑元件】两类。
- 【组合逻辑元件】:简单来说就是【功能部件】
- 又称【操作元件】
- 任何时刻产生的的【输出】仅取决于【当前的输入】
- 不含【存储信号的记忆单元】
- 不受时钟信号的控制
- 输入与输出之间无反馈通路
- 信号单向传输
- 常用的组合逻辑元件:加法器、算术逻辑单元(ALU)、译码器、多路选择器MUX、三态门......等
- 算术逻辑单元ALU
- 尤其要注意ALU的特点:因为要处理两个操作数,所以单总线结构下,2个输入 必须有一个输入 通过【暂存寄存器X】连接总线!!
- 然后输出端有时一般也需要【暂存寄存器X】
- 译码器
- 多路选择器
- 通常专用于ALU,用于控制ALU的两个输入端的
- 他和【三态门】最大的区别是——它在【输入端】
- 三态门
- 注意:CPU多个部件共享一条总线时,各部件和总线之间控制部件建立连接、断开连接的部件必是三态门
- 他和【多路选择器MUX】最大的区别是——它在【输出端】
;
;
;
- 【时序逻辑元件】:简单来说就是【各类存储数据的部件】
- 又称【状态元件】
- 任何时刻产生的的【输出】不仅与【当前的输入有关】,还与【该时刻以前的输入有关】
- 必然【含存储信号的记忆单元】
- 必须在【时钟节拍下工作】
- 常用的时序逻辑元件:寄存器和存储器,如:通用寄存器组GPRs、程序计数器PC、PSW状态 / 移位 / X暂存 / 锁存寄存器、触发器......等
- 注意:n个【触发器】构成一个【n位寄存器】
- 怎么区分一个【元件】是【组合逻辑元件(操作元件)】还是【时序逻辑元件(状态元件)】?
- 是寄存器,能存东西数据,秒选【时序逻辑元件(状态元件)】
- 剩下的都是【组合逻辑元件(操作元件)】
【例题】
三、【内部总线】和【系统总线】
【总线】英文别称又叫【Bus】,顾名思义像公交车一样搭载各个部件的所有输出信息
;
【内部总线】
- 同一部件内,例如CPU内,连接各个【寄存器】和【运算等功能部件】之间的总线
;
【系统总线】
- 同一台计算机系统内的各个部件之间,例如CPU、内存、通道和各种I/O设备接口之间互相连接的总线
四、数据通路基本结构(难点)
1、CPU总线结构
注意:总线结构基本避免不了【总线数据冲突】的问题
- 在【输出端out】:同一时刻只允许一个部件发出信息到同一总线
- (如果多个部件都发出了,就用三态门控制只让一个部件发)
- 在【输出端in】:同一时刻允许多个部件同时接收
- 你接收多少信息都无所谓,又不会导致总线争用
(1)CPU内部单总线方式
【概念】:
- 各个【寄存器 “输入”、“输出”】直接连同一条【公共总线Bus】上,由【公共总线Bus】再连其他功能部件
【特点】:
- 结构简单,容易实现,但容易产生【数据冲突】现象,性能较低
- 为了避免直连的方式导致传输数据冲突,可以加入【暂存寄存器X】来帮【各功能部件】暂时记忆数据(这正是结合了前面说的ALU属于组合逻辑单元,老失忆)
- 注:单周期处理器(CPI=1)不能采用单总线方式
- 单周期处理器:一条指令只需要一个时钟周期
- 但单总线一个时钟周期只够一次操作(比如取指令),完不成一条指令的所有操作(取指令、分析指令、执行指令...等)
【需要了解的各个部件】
- GPRs为通用寄存器组
- rs,rd分别为所读、写的寄存器编号;
- Y、Z为暂存器;
- FR为标志寄存器,用于存放ALU产生的标志信息。
- 带箭头的虚线表示控制信号
- 【寄存器名字 + in】表示该部件允许写入的信号,【寄存器名字 + out】表示该部件允许输出的信号,例如:
- MDRin:表示允许内部总线上数据写入MDR的信号
- MDRout:表示允许MDR的内容送入数据总线的信号
- 能输出到总线的部件均通过一个三态门与内部总线相连,用于控制该部件与内部总线之间数据通路的连接与断开
(2)CPU内部多总线方式
【概念】:
- 将所有【寄存器 “输入”、“输出”】都连接到【多条公共通路】上
;
【特点】
- 相比【单总线方式】,内部有【两条 或 更多】总线
- 相比【单总线方式】一个时钟周期内只允许传送一个数据,指令执行速率低
- 【多总线方式】同时在多个总线上传送不同数据,提高效率。
2、专用数据通路结构
相当于各个寄存器输入输出直接连【ALU】
【特点】:
- 性能较高、基本不存在【数据冲突】现象
- 但结构复杂、硬件量大、不易实现
- 为了避免直连的方式导致传输数据冲突,可以加入【多路选择器MUX】或【三态门】2种方式,来控制信号一个一个区分开传输给ALU
【例题】
五、数据通路的操作举例(涉及大题)
【套路】
这些流程不是要你死记硬背,考试答题会让你推到流程,然后让你写出【每个节拍(时钟周期)干了什么】以及【部件对应的是 in输入 或 out输出 是哪一个有效?】、【CU发出的是 写命令 or 读命令?】
- 其实每个节拍的流程上,有很多套路,比如:
(1)通用寄存器之间传送数据
这里假设命名任意一个寄存器叫【R】,则
- Rin:总线到寄存器的信号
- Rout:寄存器到总线的信号
;
【标准写法】当我们要描述【实现将PC的内容送至MAR】,实现该操作的流程及控制信号为:
- (PC)—>MAR PCout和MARin有效,PC内容—>MAR
- (注意,前面是流程,后面是控制信号,二者都不可以缺少,要一起写上去)
(2)从主存读取数据
第一步:将PC的内容通过内部总线送至MAR,需要一个时钟周期。
第二步:CU项主存发出读命令,从MAR所指主存单元读取一个字,并送至MDR;同时PC+1为取下一条指令做准备,需要一个时钟周期。
第三步:将MDR的内容通过地址总线送至IR,需要一个时钟周期。
;
【标准写法】
- (PC)—>MAR PCout和MARin有效,现行指令地址—>MAR
- MEM(MAR)—>MDR, (PC)+1—>PC MDRin有效,CU发出读命令,取出指令后PC+1
- (MDR)—>IR MDRout和IRin有效,现行指令—>IR
(3)将数据写入主存
将寄存器R1的内容写入寄存器R2所指的主存单元
;
【标准写法】
- (R1)—>MDR R1out和MDRin有效
- (R2)—>MAR R2out和MARin有效
- MDR—>MEM(MAR) MDRout有效,CU发出写命令
(4)执行算术运算或逻辑运算
假设加法指令ADD ACC,R1,实现将ACC的内容和R1的内容相加并写回ACC
单总线数据通路中,每一时刻总线上只有一个数据有效。因为ALU是一个没有存储功能的组合逻辑元件,在其执行运算时必须保持两个输入端同时有效。
所以先将一个操作数经内部总线送入暂存器Y中,Y的内容在ALU的左输入端始终有效。
再将另一个操作数经内部总线直接送到ALU右输入端。
此外ALU的输出端也不能直接与内部总线相连,否则其输出会通过总线反馈到输入端,影响运算结果,因此将运算结果暂存在暂存器Z中。
;
【标准写法】
- (R1)—>Y R1out和Yin有效,操作数-->Y
- (Y)+(ACC)—>Z ACCout和ALUin有效,CU向ALU发出加命令,结果-->Z
- (Z)—>ACC Zout和ACCin有效,结果-->ACC
注:以上需要3个时钟周期(不可以同时执行,否则会引起总线冲突)
(5)修改程序计数器的值
转移指令通过修改PC的值来达到跳转目的。假设指令JMP addr(addr为目标转移地址)实现将IR中的地址字段写入PC。
;
【标准写法】
- AD(IR)—>PC IRout和PCin有效
说实话,我也不知道知识点怎么写,得结合大题。。。等我有空再补充吧