【计算机组成原理期末总预习-自顶向下方法】第4-6章 指令系统,CPU,流水线

发布时间 2023-06-11 22:10:52作者: _vv123

第4-6章 指令系统,CPU,流水线

一、指令系统设计

  1. 指令结构与设计思想

    • 操作码:指定操作类型 (操作码长度:固定/可变)

    • 源操作数或其地址:一个或多个源操作数所在的地址 (操作数来源:主(虚)存/寄存器/I/O端口/指令本身)

    • 结果的地址:产生的结果存放何处(目的操作数) (结果地址:主(虚)存/寄存器/I/O端口)

    • 下一条指令地址:下条指令存放何处(下条指令地址 :主(虚)存的地址) (正常情况隐含在PC中,改变顺序时由指令给出)

      image-20230610161340649 image-20230610161817947
    • 指令格式设计的几个基本原则

      • 应尽量短

      • 要有足够的操作码位数

      • 指令编码必须有唯一的解释,否则是不合法的指令

      • 指令字长应是字节的整数倍

      • 合理地选择地址字段的个数

      • 指令尽量规整

  2. 寻址

    • 概念:指令或操作数地址的指定方式。

    • 指令中的地址码编码由操作数的寻址方式决定

    • 地址码编码的三个原则:

      • 地址码尽量短
      • 操作数存放位置灵活,空间应尽量大
      • 地址计算过程尽量简单
    • 指令的寻址方式----简单

      • 顺序执行:PC增值
      • 跳转 ( jump / branch / call / return ):与操作数的某些寻址方式相同
    • 操作数的寻址方式----复杂(想象一下高级语言程序中操作数情况多复杂)

      • 操作数来源:寄存器 / 主(虚)存 /外设端口 / 栈顶
      • 操作数结构:位 / 字节 / 半字 / 字 / 双字 / 一维表 / 二维表 /…
    • 通常寻址方式特指“操作数的寻址”

    • 八种寻址方式

      image-20230610162929405

    • 偏移寻址

      image-20230610163207292

      • 相对寻址:指令地址码给出一个偏移量(带符号数),基准地址隐含由PC给出。
        即:EA=(PC)+A (ex. MIPS’s instruction: Beq)
        可用来实现程序(公共子程序)的浮动 或 指定转移目标地址
        注意:当前PC的值可以是正在执行指令的地址或下条指令的地址

      • 基址寻址:指令地址码给出一个偏移量,基准地址明显或隐含由基址寄存器B给出。即:EA=(B)+A (ex. MIPS’s instructions: lw / sw)
        可用来实现多道程序重定位 或 过程调用中参数的访问

      • 变址寻址:指令地址码给出一个基准地址,而偏移量(无符号数)明显或隐含由变址寄存器 I 给出。

        即:EA=(I)+A
        可为循环重复操作提供一种高效机制,如实现对线性表的方便操作。

      • 自动变址:指令中的地址码A给定数组首址,变址器I每次自动加/减数组元素的长度x。
        EA=( I )+A I=( I ) ± x
        例如,X86中的串操作指令
        RISC机器不提供自动变址寻址,并将变址和基址寻址统一成一种偏移寻址方式。

  3. 操作码编码

    • 操作码的编码的两种方式

      • Fixed Length Opcodes (定长操作码编码)

        • 指令的操作码部分采用固定长度的编码
        • 例如:设操作码固定为6位,则系统最多可表示64种指令
        • 特点:译码方便,但可能有信息冗余。
      • Expanding Opcodes (扩展操作码编码,也叫变长操作码编码)

        image-20230610165542020

    • 选择依据

      • 代码长度更重要时:采用变长指令字、变长操作码
      • 性能更重要时:采用定长指令字、定长操作码
      • 变长指令字和变长操作码使机器代码更紧凑;定长指令字和定长操作码便于快速访问和译码。
  4. 条件测试方式

    image-20230610170802092

    • 无符号数A-B>0的条件:ZF=0 && CF = 0
    • 有符号数A-B>0的条件:ZF=0 && SF = OF
      • 如果OF=0,显然应该有SF=0
      • 如果OF=1,只能是上溢出,此时有SF=1
  5. 指令系统设计风格

    • 操作数指定方式

      image-20230610180347982

      image-20230610180357650

      image-20230610180430739

    • 复杂指令集计算机CISC与精简指令集计算机RISC

      image-20230610180643043

      image-20230610180658216

      image-20230610180735691

二、程序的机器级表示 :MIPS

  1. MIPS指令格式

    • 所有指令都是32位宽(字长)

    • 按字地址对齐存储,字地址为4的倍数

    • 有R型、I型和J型三种指令格式

      • R型指令

        image-20230610181958728

        image-20230610182116906

        image-20230610182210640

      • I型指令

        image-20230610182357186

        image-20230610182627814

        image-20230610182845504

      • J型指令

        image-20230610183002477

  2. 寻址方式

    image-20230610183723067

  3. 掌握MIPS计算机的R型、I型和J型三种指令格式。

(1)清楚RR型指令、移位指令、寄存器跳转指令三种类型指令格式的区别和特点;R型指令采用了什么寻址方式?

(2)I型指令可能会出现寄存器寻址、立即数寻址、相对寻址和偏移寻址(基址或变址)几种寻址方式,这些寻址方式在每条指令都会出现吗?I型指令有哪些类型的指令?(双目运算、分支、存储访问),掌握分支型和存储访问型指令的地址形成方法、双目运算型指令中对立即数的扩展方法。

(3)J型指令中会出现哪些寻址方式?掌握J和Jal两条指令的功能

  1. 汇编与反汇编

    image-20230610185112498

    image-20230610185121917

  2. 高级语言语句的汇编指令表示

    image-20230610185239409

    image-20230610185405071

    image-20230610185430674

    image-20230610185458248

    image-20230610191905010

三、单周期数据通路的设计

  1. 数据通路

    image-20230610220533758

    image-20230610220552440

  2. 操作元件

    image-20230610220723589

  3. 存储元件

    • 特点:具有存储功能,在时钟控制下输入被写到电路中,直到下个时钟到达。输入端状态由时钟决定何时被写入,输出端状态随时可以读出。

    • 定时方式:边沿触发。在时钟上升/下降沿读写。

    • Setup/Hold/Clock-to-Q

      image-20230610221042304

    • 分类:

      • 寄存器(组)

        image-20230610221209478

      • 理想存储器

        image-20230610221255364

  4. 时序控制

    image-20230610221505784

  5. 总线式数据通路

    • 单总线

      image-20230610221634551

    • 三总线

      image-20230610221710738

  6. 单周期MIPS处理器数据通路

    • 设计步骤

      image-20230611175401750

    • 取值部件

      image-20230611175445595

    • R型指令

      image-20230611175534087

      image-20230611175636186

    • I型指令

      image-20230611175707967

      image-20230611175722768

    • lw指令

      image-20230611175858596

      image-20230611180002424

    • sw指令

      image-20230611180035396

      image-20230611180731594

    • B型指令

      image-20230611180759200

      image-20230611181841802

    • 下地址部件

      image-20230611182030553

      image-20230611182055168

    • J型指令

      image-20230611182220739

      image-20230611182247223

    • 完整数据通路

      image-20230611182329301

    • 关键路径

      image-20230611182527301

    熟练掌握课件中的最基本的7条指令执行时数据通路中信息的流动过程,以及在取指令部件中的信息处理,包括元件的连接和所需要的各种控制信号的取值等。同时也能够在前述基本结构上扩展指定功能和格式的一些指令。

四、单周期控制器的设计

  1. 运算器的功能是如何控制的?

    • ALU局部控制器是为R型指令产生ALU的控制信号,其输入为func字段;
    • 主控制器产生非R型指令的所有控制信号,以及R型指令的除ALU控制信号外的其他控制信号,其输入为op字段;
    • 将主控制器产生的ALU控制信号与ALU局部控制器的输出信号通过一个多路选择器合并后作为最终的ALU控制信号。多路选择器的选择信号(R-Type)由主控制器产生。
  2. 掌握指令译码的基本原理,OP和func字段如何与指令功能对应?

    • R型指令:所有指令的op字段都为000000,各指令的func字段用来产生ALU的控制信号,决定执行的操作(加、减、逻辑与…),其它数据通路的控制信号各指令都相同(仅考虑三寄存器操作数)。
    • 其他类型指令:没有func字段,各指令的op字段不同,它产生包括ALU的所有数据通路的控制信号。
  3. 明白每个控制信号与指令译码的对应关系。

    • ALU控制信号

      image-20230611205227760

    • 总表(附数据通路)

      image-20230611205734116

      image-20230611211304533

      • RegDst: R型为rd,lw/ori为rt,不写寄存器不关心。
      • ALUSrc: R型为busB(Rb/rt), I型为立即数(ExtOP: ori 0拓展,lw/sw符号拓展)
      • MemtoReg:仅lw为1,add,sub,ori为0,其他为x。
      • RegWrite:add,sub,ori,lw为1,其他为0。
      • MemWrite:仅sw位1,其他为0。
      • Branch/Jump:仅beq/j为1,其他为0。
  4. 单周期CPU的周期长度是由什么指令、哪些因素决定的?

    image-20230611211234558

  5. 通过分析每条指令的执行过程,明确所传输和处理的信息的流动路径,然后根据各个部件的延时(操作元件的延迟或存储元件的三个时间setup time、hold time和clock to Q time)算出指令执行所必需的最短时间。

    • give up

五、微程序控制原理

  1. 微程序控制器的基本思想和结构

    • 仿照程序设计的方法,编制每条指令对应的微程序

    • 每个微程序由若干条微指令构成,一条微指令包含若干个微命令

    • 所有指令对应的微程序放在只读存储器中,执行某条指令就是取出对应微程序中的各条微指令,对微指令译码产生对应的微命令(即控制信号)。

    • 这个只读存储器称为控制存储器(Control Storage),简称控存CS 。

      image-20230611212502287

  2. 比较硬连线控制器和微程序控制器的优缺点。

    • 硬连线控制器
      • 优点:速度快,适合于简单或规整的指令系统,例如,MIPS指令集。
      • 缺点:设计周期长、繁琐、不灵活、不易修改和增删指令
    • 微程序控制器:简化设计、灵活、易修改、易维护,但速度慢。
  3. 指令、微程序、微指令、微命令、微操作它们之间的关系

    image-20230611212539172

  4. 了解水平型微指令和垂直型微指令的概念

    • 水平型微指令

      • 基本思想:相容微命令尽量多地安排在一条微指令中。
      • 优点:微程序短,并行性高,适合于较高速度的场合。
      • 缺点:微指令长,编码空间利用率较低,并且编制困难。
    • 垂直型微指令

      • 基本思想:一条微指令只控制一、二个微命令。

      • 优点:微指令短,编码效率高,格式与机器指令类似,故编制容易。

      • 缺点:微程序长,一条微指令只能控制一、二个操作,无并行,速度慢。

        image-20230611212921779

六、异常和中断处理

  1. 异常和中断(外部)的区别

    image-20230611213129272

    image-20230611213154803

  2. *处理机制

    image-20230611213605468

  3. 掌握计算机中对异常/中断的软件识别(MIPS计算机)和硬件识别这两种不同方式的基本过程。

    • 软件识别(MIPS采用)
      • 设置一个异常状态寄存器(MIPS中为Cause寄存器),用于记录异常原因。
      • 操作系统中有一个统一的异常处理程序,该程序按优先级顺序查询异常状态寄存器的各位,识别出异常事件。
      • 例如:MIPS中位于内核地址0x8000 0180处有一个专门的异常处理程序,用于检测异常的具体原因,然后转到内核中相应的异常处理程序段中进行具体的处理。
    • 硬件识别(向量中断)(80x86采用)
      • 用专门的硬件查询电路按优先级顺序识别异常,得到“中断类型号”,根据此号,到中断向量表中读取对应的中断服务程序的入口地址。

七、流水线数据通路和控制

  1. 单周期指令模型与流水模型的性能比较:

    • 单周期指令模型下时钟周期如何确定?

    • 流水模型下时钟周期如果确定?

    • 为什么流水线方式下单条指令执行时间不能缩短,但能大大提高指令吞吐率?

      image-20230611213936322

  2. 具有哪些特征的指令集有利于流水线执行?(四个特征)

    image-20230611214321566

  3. 能对常见的7条指令的各个流水阶段的划分及其所使用的功能部件情况进行分析。

    • give up
  4. 对于五阶段流水线数据通路,能分析7条指令执行时的各流水段寄存器存储了哪些信息。

八、流水线冒险处理

  1. 什么是流水线冒险,它分为哪些类型?

    • 在指令流水线中,当遇到某些情况使得流水线无法正确执行后续指令,而引起流水线阻塞或停顿,这个现象称为流水线冒险。
    • 根据引起冒险的原因不同,分为结构冒险、数据冒险和控制冒险三种。
  2. 结构冒险的现象是什么?如何处理结构冒险?

    • 一个部件同时被不同指令所用,即在使用硬件资源时发生了冲突。
    • 处理方法
      • 每个部件安排在特定的阶段使用
      • 将Instruction Memory (Im) 和 Data Memory (Dm)分开
      • 将寄存器读口和写口独立开来
  3. 数据冒险的现象是什么?对给出一个指令序列,能分析会在哪里产生了冒险现象。

    image-20230611215406256
    • 后面指令用到前面指令结果时,前面指令的结果还没产生。

    • 解决方法

      • 方法1:硬件阻塞(stall)

        • 控制比较复杂,需要改数据通路;指令被延迟三个时钟执行。
      • 方法2:软件插入“NOP”指令

        • 浪费三条指令的空间和时间。好处是无需修改数据通路。
      • 方法3:同一周期内寄存器组先写后读

        image-20230611215621264

      • 方法4:转发(Forwarding或Bypassing 旁路)技术(注意load-use需要一个nop)

        image-20230611215928169

      • 方法5:编译优化--调整指令顺序(不能解决所有数据冒险)

        image-20230611220052855

  4. 控制冒险的现象是什么?了解常见的四种处理方法。

    • 现象image-20230611220124763

    • 解决

      image-20230611220222653