Featured image of post CPU的基本功能和组成

CPU的基本功能和组成

CPU的基本功能和组成

CPU功能

  1. 指令控制:取指、分析指令、执行指令。
  2. 操作控制:把每条指令的操作信号送入相应的部件。控制相应的部件按指令要求进行动作
  3. 时间控制:对各种操作加以时间上的控制。按时间顺序为每条指令提供控制信号
  4. 数据加工:算数逻辑运算
  5. 中断处理:对运行过程中出现的异常情况和特殊请求进行处理

CPU组成

运算器

  1. 算术逻辑单元:算数逻辑运算
  2. 通用寄存器组:用于存放操作数(源操作数、目的操作数、中间结果)和各种地址信息。

算数逻辑单元与通用寄存器组的链接方式:

  1. 专用数据通路:根据指令执行过程中的数据和地址的流动方向安排链接线路。

    • 为了防止多个寄存器同时且一直向ALU传输数据,可以采用多路选择器或三态门控制线路输出。
    • 性能高,结构复杂,硬件量大,成本高 image-20220531153430684
  2. CPU内部单总线方式:将所有寄存器的输入端和输出端连接到一条公共的通路上。

    • 结构简单,容易实现,存在较多数据冲突现象,性能较低

    • 暂存寄存器可以缓解冲突现象,暂存从主存读来的数据,且该数据不能放在通用寄存器,否则会破坏原有内容。

    • 累加寄存器:一种通用寄存器,暂时存放ALU运算结果

    • 程序状态字寄存器(PSW):保留算数逻辑运算指令或测试指令的结果建立的各种状态信息:溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的位,参与并决定微操作的形成

image-20220531153816970

控制器

  1. 程序计数器PC:指明下一条指令在主存中的地址
  2. 指令寄存器IR:用于保存当前正在执行的那条指令,对用户透明
  3. 指令译码器ID:将操作码译码,向控制器提供操作信号
  4. 微操作信号发生器MSG:根据IR内容(指令)、PSW内容(状态信息)及时序信号,产生并控制各种控制信号,分为组合逻辑型和存储逻辑型
  5. 时序系统:用于产生各种时序信号,由统一时钟(CLOCK)分频得到
image-20220531154940207
运算器与控制器的组合结构如下

image-20220531155216523

image-20220531161020461

  • 控制器可以自动完成取指操作
  • 控制器可以分辨取到的是指令还是数据:指令地址来源于PC,数据地址来源于地址形成部件

指令周期的数据流

指令周期:CPU从主存中每取出并执行一条指令所需的全部时间
  • 指令周期由若干机器周期表示,机器周期又叫CPU周期
  • 一个机器周期又包含若干时钟周期(又称节拍、T周期、CPU时钟周期),它是CPU操作的最基本单位

image-20220601152014340

CPU通过触发器来判断处于什么周期

image-20220601153807374

取指周期

  1. (PC)→MAR,将当前指令地址送至存储地址寄存器

  2. CU发出控制信号,经控制总线传到主存,这里是读信号,记为1→R

  3. 将MAR所指主存中的内容经数据总线送入MDR,记作M(MAR)→MDR

  4. 将MDR中的内容(此时是指令)复制送入IR,记作(MAR)→IR

  5. CU发出控制信号,形成下一条指令地址,记作(PC)+“1”→PC

image-20220601154608098

取指中的“指”指的是指令字!指令字由操作码和操作数组成!

间址周期

  1. 将指令的地址码送入MAR,记作:Ad(IR)→MAR,或Ad(MDR)→MAR
    • 进行间址周期前已完成了取址周期,故MDR中的内容与IR中的内容一致(IR中的内容由MDR复制送入得到)
  2. CU发出控制信号,启动主存进行读操作,记为1→R
  3. 将MAR所指主存中的内容经数据总线送入MDR,记为M(MAR)→MDR
  4. 将有效地址EA送至指令的地址码字段(当作指令的直接地址),记作(MDR)→Ad(IR)

执行周期

中断周期

中断:暂停当前任务执行其他任务,为了恢复当前任务,需要保存断点

  • 一般使用堆栈保存断点,SP表示栈顶地址,假设SP指向栈顶,进栈操作时先修改地址,后存入数据
  1. CU将SP-1(堆栈是以高地址向低地址增长的),修改后的地址送入MAR,记为(SP)-1→SP,(SP)→MAR。
    • 本质上是将断点存入某个存储单元,假设其地址为a,也可记为:a→MAR
  2. CU发出控制信号,启动主存做写操作,记作:1→W
    • 别忘了我们正在向主存保存我们的断点!
  3. 将断点(PC内容)送入MDR,记作(PC)→MDR
  4. CU控制将中断服务程序的入口地址送入PC,记作向量地址→PC
    • 入口地址由向量地址形成部件产生

指令执行方案

  1. 单指令周期
    • 对所有指令都选用相同的执行时间来完成
    • 指令之间串行执行;指令周期取决于执行时间最长的指令执行时间
    • 电路设计简单,会降低系统的运行速度
  2. 多指令周期
    • 对不同类型的指令选用不同的执行步骤完成
    • 指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程
  3. 流水线方案
    • 在每一个时钟周期启动一条指令,尽量让多条指令同时运行,单各自处在不同的执行步骤中
    • 指令之间并行执行

数据通路的基本结构

  • 内部总线:CPU内部链接各寄存器与运算部件之间的总线
  • 系统总线:同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线

CPU内部单总线

  1. 寄存器之间的数据传送

    • 例如PC内容送至MAR,其流程为:

      1. (PC)→Bus(总线), PCout有效,PC内容送入总线

      2. Bus→MAR,MARin有效,总线内容送MAR

    • 总结一下就是先让送出寄存器out有效,再送入总线;下一步让送入寄存器in有效,总线内容送入寄存器中。

  2. 主存与CPU之间的数据传送

    • 例如CPU从主存读取指令,实现传送操作的流程为:
      1. (PC)→Bus→MAR ,PCout与MARin有效,现行指令地址→MAR
      2. 1→R ,CU发出读命令(通过控制总线发出)
      3. MEM(MAR)→MDR MDRin有效
      4. MDR→Bus→IR MDRout和Rin有效, 现行指令→IR
  3. 执行算数或逻辑运算

    • 比如执行一条加法指令:
      1. Ad(IR)→Bus→MAR MDRout和MARin有效(读取指令后MDR存放的内容就是该指令的完整信息)
      2. 1→R CU发出读命令
      3. MEM(MAR)→数据线→MDR MDRin有效
      4. MDR→Bus→Y MDRout和Yin有效,操作数→Y(暂存寄存器)
      5. (ACC)+(Y)→Z ACCout和ALUin有效,CU向ALU发送加命令
      6. Z→ACC Zout和ACCin有效,结果→ACC
    • 所以使用单总线方案执行算数逻辑运算,必须将一个操作数先读到一个暂存寄存器中等待总线变空闲

    分析一个指令的指令流程与控制信号首先要按指令周期分类分析

    ALU需要配合暂存寄存器使用!

专用数据通路

在任何两个需要数据流动的寄存器都建立专用数据通路

image-20220603111619710

所以CPU内部单总线的设计方案,就是在需要数据流动的两个寄存器中间设了一个总线来缓冲!

硬布线控制器

确定一个节拍下应该发出哪些“微命令”需要让控制器得到

指令操作码目前的机器周期节拍信号机器状态条件四个参数

  1. 指令操作码通过指令寄存器IR经由操作码译码器译码通过导线送入CU
  2. 目前的机器周期由4个集成在CU内部的状态触发器得知(FE、IND、EX、INT)
  3. 节拍信号经由节拍发生器循环发出(每一个时钟周期发出一个节拍信号)
  4. 机器状态参数(标志)来自于执行单元的反馈信息
    • 可能来自运算器的PSW、ACC的符号位;
    • 以及I/O设备、主存

image-20220606174508682

设计步骤

  1. 分析每个阶段的微操作序列(取指、间址、执行、中断)
    • 在此环节需要分析每个阶段每条微操作的依赖关系
  2. 选择CPU的控制方式
    • 采用定长机器周期还是不定长机器周期
    • 每个机器周期安排的节拍数
  3. 安排微操作时序
    • 微操作的的先后顺序不得随意改变
    • 被控对象不同的微操作安排在一个节拍完成
    • 占用时间较短的微操作尽量安排在一个节拍完成,并允许有先后顺序
    • 访存的微操作占一个节拍,但不耽误安排其他不涉及访存的微操作在这个节拍并行执行
  4. 电路设计
    1. 列出操作时间表(4个机器周期内T0、T1、T2节拍内有可能用到的所有微操作)
    2. 写出微操作命令的最简逻辑表达式
    3. 画出逻辑图

硬布线控制器的特点:

  • 指令越多、设计和实现越复杂,通常用于RISC
  • 扩充指令需要重新设计整个控制器、扩充指令困难
  • 纯硬件设计实现控制,执行速度很快,微操作控制信号由组合逻辑电路即时产生

image-20220606181209044

微程序控制器

每条指令的执行过程被用一个微程序表示,每个微程序含若干微指令,每个微指令又包含若干微命令

  • 微指令是对指令执行步骤的描述,一个微指令有可能包含多个微命令,微命令用于控制信号

采用存储程序的思想,在出厂前将所有指令的“微程序”存入“控制器存储器”中

image-20220607162648417

基本架构

  • 控制存储器CM,用于存放各指令对应的微程序,控制存储器可用只读存储器ROM构成

  • 微地址寄存器CMAR(或μPC),接受微地址形成部件送来的微地址,为在CM中读取微指令做准备

  • 地址译码器,将地址码转化为存储单元控制信号

  • 微数据寄存器CMDR(或μIR),用于存放从CM中取出的微指令,其位数应与微指令字长相等

  • 微地址形成部件,产生初始微地址和后继微地址,以保证微指令的连续执行

  • 顺序逻辑部件,接受两个参数

    • 标志参数,根据指令地址码的寻址特征位判断是否要跳过间址周期
    • CLK,根据中断信号判断是否进入中断周期

image-20220607163530738

工作原理

在CM中顺序存入取值周期、间址周期、中断周期、执行周期的微程序

按顺序将微指令送入CU执行。

注意:

​ 通常取指周期微程序是公用的,所以如果某指令系统中有n条机器指令,则CM中微程序段的个数至少为n+1

  • 公用的一个取指周期微程序段
  • 每一条机器指令至少有一个的执行周期微程序段
  • 早期CPU以及物联网设备的CPU可以不提供间接寻址和中断功能,如果题干有提及就加上

image-20220607165343924

微指令格式设计

每一个微命令对应一根输出线

  • 相容性微命令:允许并行完成的微命令
  • 互斥性微命令:不允许并行完成的微命令
  1. 水平型微指令:一条指令能定义多个可并行的微命令
    • 每一条微指令略长,一个微程序含的指令数少(水平发展),执行速度快
    • 编写微程序比较麻烦
  2. 垂直性微指令:一条指令只能定义一个微命令,由微操作码字段规定具体功能
    • 每一条微指令略短,一个微程序含的指令数多(垂直发展),执行速度慢
    • 便于编写微程序,简单,规整
  3. 混合型:在垂直型的基础上增加一些不太复杂的并行操作

微指令的编码(控制)方式

  1. 水平型微指令
    1. 直接编码:在微指令的操作控制字段中,每一位代表一个微操作命令
      • 某位为“1”代表该控制信号有效
      • 执行速度快,操作并行性好
      • 微指令字长过长,n个微命令需要n位操作字段,造成控存容量需求极大image-20220608193039507
    2. 字段直接编码:将微指令的控制字段分成若干“段”,每段经译码后发出控制信号
      • 分类编段,互斥性微命令在同一段,相容性微命令分在不同段
      • 每个小段包含的信息位不能太多,否则将增加译码时间和译码线路的复杂性
      • 每个小段还要留出一个状态,表示本字段不发出任何微命令(默认用全0表示)。即n位字段长度只能表示2n-1个互斥型微命令
    3. 字段间接编码:一个字段的某些微命令需由另一个字段中的某些微命令来解释,又称为隐式编码
      • 进一步缩短指令字长
      • 削弱了并行控制能力,通常作为字段直接编码方式的辅助手段

微指令的地址形成

  1. 微指令的下地址字段指出:后继微指令的地址,又称为断定方式

  2. 根据机器指令的操作码形成:当机器指令取至寄存器后,微指令的地址由操作码经微地址形成部件形成

  3. 增量计数器法: (CMAR)+1→CMAR

  4. 分支转移:指明判别条件;转移地址来指明转移成功后的去向。

image-20220608194337143

  1. 通过测试网络:即控制器中负责顺序逻辑的部分
  2. 由硬件产生微程序入口地址:第一条指令地址中断周期微程序首地址

微程序控制单元的设计

  1. 静态微程序设计
    • 微程序无需改变,采用ROM
  2. 动态微程序设计
    • 改变微指令和微程序来改变机器指令
    • 有利于仿真,采用EPROM

image-20220610154213827

image-20220610154236978

指令流水线

指令流水:一条指令的执行过程可以分成多个阶段(过程)

  • 取指:根据PC内容访问主存。取出一条指令送入IR

  • 分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数

  • 执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。

执行方式

  1. 顺序执行

    • 传统冯诺依曼机采用的方式,又称串行执行方式,
    • 设三个阶段耗时相等为t,则总耗时为$3nt$

    image-20220612184718704

  2. 一次重叠方式

    • 总耗时为$3t+2t(n-1)=(1+2n)t$
    • 执行时间缩短了1/3,各功能部件的利用率明显提高
    • 控制过程较为发杂,需要额外硬件开销

image-20220612184938415

  1. 二次重叠方式
    • 总耗时$3t+t(n-1)=(n+2)t$
    • 此为理想状态的指令执行方式
    • 正常情况处理机中同时有3条指令执行

性能指标

  1. 吞吐率
    • 单位时间内流水线所完成的任务数量
    • 设一条指令有k个阶段,每个阶段耗时Δt(一个时钟周期),则吞吐率$T_p=\frac{n}{ (k+n-1)\triangle t}$
  2. 加速比
    • 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
  3. 效率
    • 流水线的设备利用率
    • 在时空图上,完成n个任务占用的时空区有效面积,与n个任务所用的时间与k个流水段所围成的时空区总面积之比
    • 当连续输的任务n趋近于正无穷时,效率也将趋近于1

五段式流水线

image-20220617134653962

经典的MIPS架构,所有的指令全部都有五个机器周期,规定所有阶段的耗时取统一耗时,以最长耗时为准。

  • 在每个功能段部件设置一个缓冲寄存器(锁存器),保存该段流水的执行结果,方便统一所有阶段耗时一致

影响流水线的因素

  1. 结构相关

    • 多条指令在同一时刻征用同一个资源而形成的冲突
    • 解决:后一相关指令暂停一周期;资源重复配置:数据存储器+指令存储器

    image-20220617140431889

  2. 数据相关(重点)

    存在必须等待前一条指令执行完才能执行后一条指令的情况

    image-20220617140808652

    解决:

    1. 遇到数据相关的指令及后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行

      • 可以分为硬件阻塞(stall)或软件插入“NOP”(空操作指令)两种方法

        image-20220617141027734

    2. 数据旁路技术,直接从硬件层面多牵几条线连到需要数据的部件上

    3. 编译优化:通过编译器调整指令顺序解决(用别的不相干的指令来替代插入NOP)

  3. 控制相关

    流水线遇到转移指令jump和其他改变PC值的指令(比如返回指令ret)而造成断流时引发的冲突

    解决:

    1. 转移指令分支预测。分为简单预测(永远猜true或false)、动态预测(根据历史情况动态调整)
    2. 预取转移成功和不成功两个控制流方向上的目标指令
    3. 加快和提前形成条件码
    4. 提高转移方向的猜准率(简单预测的优化)

流水线分类

  1. 部件功能级、处理机级、处理机间级流水线

    1. 部件功能级:复杂的算数逻辑运算组成流水线工作方式

      • 例如浮点加法可分成求阶差、对阶、尾数相加、结果规格化四个子过程

      • 这四个子过程需要不同的功能部件,所以可以处理成流水线式执行

    2. 处理机级:一条指令解释过程分为多个子过程,如:取指、译码、执行、访存、写回

    3. 处理机间级:一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器。

  2. 单功能流水线与多功能流水线

    1. 单功能:只能完成固定的专门功能的流水线
    2. 多功能:可以同时、不同时完成多种功能的流水线(指令流水线)
  3. 动态流水线、静态流水线

    1. 静态流水线:在同一时间内,流水线的各段只能按同一种功能的连接方式工作
    2. 动态流水线:同一时间内,一些段完成某种运算,另一些则在完成另一种
  4. 线性流水线、非线性流水线

    1. 线性:输入输出间不存在反馈回路即每个功能段是单向的
    2. 非线性:存在反馈回路,某些功能段将数次通过流水线,适合线性递归运算

流水线多发技术

  1. 超标量技术:每个时钟周期内可并发多条独立指令

    • 需配置多个功能部件

    • 指令执行顺序不可调整,需要通过编译器优化

    • 空间复用

      image-20220617143746294

  2. 超流水技术:

    • 一个时钟周期内再分段

    • 一个时钟周期内一个功能部件使用多次

    • 不能调整指令执行顺序,需要通过编译器优化

    • 时间复用

  3. 超长指令字

    • 由编译程序挖掘出指令间潜在的并行性
    • 将多条能并行操作的指令组合成一个
    • 具有多个操作码字段的超长指令字

image-20220617144337578

image-20220617144350542

五段式流水线

  • 通常RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存

  • 条件转移指令通常使用相对寻址

    • 若(Rs)==(Rt) 则(PC)+指令字长+(偏移量*指令字长)→PC: 否则(PC)+指令字长→PC
    • Rs!=Rt时的情况一样
    • PC寄存器值的修改(WrPC段)发生在M(访存)阶段,因为PC并非通用寄存器
  • 无条件转移指令 其WrPC段发生在EX段,WrPC段越早完成越能避免控制冲突

总有些事情高于其他
Built with Hugo
主题 StackJimmy 设计
本站访客数人次 总访问量 本文阅读量