https://gitee.com/fakerlove/computer-organization

文章目录

  • 5. 中央处理器
    • 5.1 CPU 的结构
      • 5.1.1 CPU 功能
      • 5.1.2 CPU的结构
        • 1) 控制器
        • 2) 运算器
          • **CPU中的主要寄存器**
      • 5.1.3 五条基本指令
    • 5.2 控制器时序系统,控制方式
      • 5.2.1 控制方式
      • 5.2.2 时序系统
        • 节拍
        • 工作脉冲
    • 5.3 指令执行过程
      • 5.3.1 指令周期
      • 5.3.2 指令运行的基本过程
    • 5.4 微程序控制原理
      • 5.4.1 微程序控制的基本概念
      • 5.4.2 微指令编码法
      • 5.4.3 微程序控制器的组成和工作过程
      • 5.4.4 微程序设计
      • 5.4.5 指令的微操作序列
    • 5.5 流水线
      • 5.5.1 指令流水原理
      • 5.5.2 影响流水线性能因素
        • 1) 结构相关 资源相关
        • 2) 数据相关
        • 3) 控制相关
      • 5.5.3 流水线性能
        • 1) 吞吐率
        • 2) 加速比
        • 3) 效率
      • 5.5.4 流水线多发技术
        • 1) 超标量技术
        • 2) 超流水线技术
        • 3) 超长指令字技术
      • 5.5.5 流水线结构
        • 1) 指令流水线结构
        • 2) 运算流水线结构
        • 3) 五级流水线

5. 中央处理器

5.1 CPU 的结构

早期CPU由运算器和控制器组成,称为中央处理机。随着ULSI技术的发展,CPU芯片外部增加了一些逻辑功能部件,CPU越来越复杂,因此CPU基本部分有了运算器、cache、控制器三大部分,称为中央处理器。

5.1.1 CPU 功能

**指令控制:**由于程序是一个指令序列,这些指令的相互顺序不能任意颠倒,必须严格按程序规定的顺序进行。

操作控制: CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应部件,从而控制这些部件按指令的要求进行动作。

**时间控制:**对各种操作实施时间上的定时。

**数据加工:**对数据进行算术运算和逻辑运算处理。

5.1.2 CPU的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xm7IzUec-1609287990706)(picture/20180823080014269)]

1) 控制器

**控制器:**程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。

控制器的功能:

(1)从指令cache中取出一条指令,并指出下一条指令在指令cache中的位置。

(2)对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作。比如一次数据cache的读/写操作,一个算术逻辑运算操作,或一个输入/输出操作。

(3)指挥并控制CPU、数据cache和输入/输出设备之间数据流动的方向。

2) 运算器

**运算器:**算术逻辑单元(ALU)、通用寄存器、数据缓冲寄存器DR和状态条件寄存器PSW组成。

运算器的功能:

(1)执行所有的算术运算。

(2)执行所有的逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。

通常,一个算术操作产生一个运算结果,而一个逻辑操作则产生一个判决。

CPU中的主要寄存器

(1)数据缓冲寄存器(DR)

数据缓冲寄存器用来暂时存放ALU的运算结果,或由数据存储器读出的一个数据字,或来自外部接口的一个数据字。缓冲寄存器的作用是:

1.作为ALU运算结果和通用寄存器之间信息传送中时间上的缓冲;

2.补偿CPU和内存、外围设备之间在操作速度上的差别。

(2)指令寄存器(IR)

指令寄存器用来保存当前正在执行的一条指令。

1.当执行一条指令时,先把它从指令cache存储器(简称指存)读出,然后再传送至指令寄存器。

2.对操作码进行测试,以便识别所要求的操作。(指令译码器的工作)指令寄存器中操作码字段的输出就hi指令译码器的输入。

3.操作码一经译码之后,即可向操作控制器发出具体操作的特定信号。

(3)程序计数器(PC)

为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。

1.程序执行之前,必须将它的起始地址(第一条指令所在的指存单元地址)送入PC,因此PC的内容即是从指存提取的第一条指令的地址。

2.当执行指令时,CPU将自动修改PC的内容,以便使其保持的总是将要执行的下一条指令的地址。

3.由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1.

(4)数据地址寄存器(AR)

用来保存当前CPU所访问的数据cache存储器中(简称数存)单元的地址。

1.作用:由于要对存储器阵列进行地址译码,所以必须使用地址寄存器来保持地址信息,直到一次读/写操作完成为止。

2.信息的存入一般采用电位-脉冲方式,即电位输入端对应数据信息位,脉冲输入端对应控制信号。(结构和数据缓冲寄存器、指令寄存器不一样)

3.在控制信号作用下,瞬时地将信息打入寄存器。

(5)通用寄存器(R0~R3)

当算术逻辑单元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区。

例如:在执行一次假发运算时,选择两个操作数(分别放在两个寄存器)相加,所得的结果送回其中一个寄存器(如R2)中,而R2中原有的内容即被替换。

在众多通用寄存器中,其中任何一个可存放源操作数,也可存放结果操作数。

(6)状态字寄存器(PSW)

功能:

1.保存由算术指令和逻辑指令运算或测试结果建立的各种条件代码。

如:运算结果进位状态(C),运算结果溢出标志(V),运算结果为零标志(Z),运算结果为负标志(N)。这些标志通常为1位触发器保存。

2.保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。因此,状态条件寄存器是一个由各种状态条件标志拼凑而成的寄存器。

指令周期

指令周期:取出一条指令并执行这条指令的时间。

单周期:在一个CPU周期中完成取指和执行操作(少数指令可实现)。

多周期:大多数指令需要在多个CPU周期中完成指令周期的全部操作。

用户可见寄存器:通用寄存器,程序状态寄存器,程序计数器

5.1.3 五条基本指令

一、MOV指令(传送指令,RR型)

MOV RO,R1

MOV执行(R1)->R0

MOV取指周期

1.程序计数器PC中装入第一条指令地址101(八进制);

2.PC的内容被放到指令地址总线ABUS(I)上,对指存进行译码,并启动读命令;

3.从101号地址读出的MOV指令通过指令总线IBUS装入指令寄存器IR;

4.程序计数器内容加1,变成102,为取下一条指令做好准备。

5.指令寄存器中的操作吗(OP)被译码;

6.CPU识别出是MOV指令。至此,取指周期即告结束。

MOV执行周期

1.操作控制器(OC)送出控制信号到通用寄存器,选择R1(10)作源寄存器,选择R0作目标寄存器;

2.OC送出控制信号到ALU,指定ALU做传送操作;

3.OC送出控制信号,打开ALU输出三态门,将ALU输出送到数据总线DBUS上。注意,任何时候DBUS上只能有一个数据。

4.OC送出控制信号,将DBUS上的数据,入到数据缓冲寄存器DR(10);

5.OC送出控制信号,将DR中的数据10打入到目标寄存器R0,R0的内容由00变为10.至此,MOV指令执行结束。

二、LAD指令(取数指令,RS型)

LAD R1,6

LAD从数存6号单元取数(100)->R1

LAD取指周期

步骤和MOV取指周期相同。

LAD执行周期

1.操作控制器OC发出控制命令打开IR输出三态门,将指令中的直接地址码6放到数据总线DBUS上;

2.OC发出操作命令,将地址码6装入数存地址寄存器AR;

3.OC发出读命令,将数存6号单元中的数100读出到DBUS上;

4.OC发出命令,将DBUS上的数据100装入缓冲寄存器DR;

5.OC发出命令,将DR中的数100装入通用寄存器R1,原来R1中的数10被冲掉。至此,LAD指令执行周期结束。

注意,数据总线DBUS上分时进行了地址传送和数据传送,所以需要2个CPU周期。

ADD指令(加法指令,RR型)

ADD R1,R2

ADD执行(R1)+(R2)->R2,结果为(R2)=120

ADD取指周期

步骤和MOV取指周期相同。

ADD执行周期

1.操作控制器OC送出控制命令到通用寄存器,选择R1做源寄存器,R2做目标寄存器;

2.OC送出控制命令到ALU,指定ALU做R1(100)和R2(20)的加法操作;

3.OC送出控制命令,打开ALU输出三态门,运算结果120放到DBUS上;

4.OC送出控制命令。将DBUS上数据打入缓冲寄存器DR;ALU产生的进位信号保存状态字寄存器在PS中;

5.OC送出控制命令,将DR(120)装入R2,R2中原来的内容20被冲掉。至此,ADD指令执行周期结束。

STO指令(存数指令,RS型)

STO R2,(R3)

STO用(R3)间接寻址,(R2)=120写入数存30号单元

STO取指周期

步骤和MOV取指周期相同。

STO执行周期

1.操作控制器OC送出操作命令到通用寄存器,选择(R3)=30做数据存储器的地址单元;

2.OC发出操作命令,打开通用寄存器输出三态门(不经过AU以节省时间),将地址30放到DBUS上;

3.OC发出操作命令,将地址30打入AR,并进行数存地址译码;

4.OC发出操作命令到通用寄存器,选择(R2)=120,作为数存的写入数据;

5.OC发出操作命令,打开通用寄存器输出三态门,将数据120放到DBUS上;

6.OC发出操作命令,将数据120写入数存30号单元,它原先的数据40被冲掉。至此,STO指令执行周期结束。

注意,DBUS是单总线结构,先送地址(30),后送数据(120),必须分时传送。

JMP指令(转移指令)

无条件转移指令,用来改变程序的执行顺序。

JMP 101

JMP改变程序执行顺序到101号单元

JMP取指周期

步骤和MOV取指周期相同。

JMP执行周期

1.OC发生操作控制命令,打开指令寄存器IR的输出三态门,将IR中的地址码101发送到DBUS上;

2.OC发出操作控制命令,将DBUS上的地址码101打入到程序计数器PC中,PC中的原先内容106被更换。于是下一条指令不是从106号单元取出,而是转移到101号单元取出。至此,JMP指令执行周期结束。

小结:

所有指令的取指周期是完全相同的,而且是一个CPU周期。但是指令的执行周期,由于各条指令的功能不同,所用的CPU是各个不相同的。

其中MOV、ADD、JMP指令是一个CPU周期;LAD和STO指令是两个CPU周期。

5.2 控制器时序系统,控制方式

5.2.1 控制方式

CPU的时序控制方式

1.同步控制方式
  同步控制方式就是各项操作都用统一的时序信号控制,在每个机器周期中产生统一数目的节拍电位和工作脉冲。
2.异步控制方式
  异步控制方式就是各项操作不采用统一的时序信号控制,根据具体情况来决定。各操作之间的衔接是由“结束-起始”信号来实现的。
3.联合控制方式
  是上面两种的结合。在功能部件内采用同步方式,在功能部件之间采用异步方式。例如,CPU内部采用同步方式,延长节拍法。当CPU与其他部件进行数据交换的时候就开始采用异步方式,CPU只需要给出“起始”信号,然后让其他部件去工作,工作结束之后,就向CPU发送“结束”信号。

5.2.2 时序系统

节拍

在一个机器周期内,要完成若干个微操作。所以把一个机器周期分为若干个相等的时间段,每一个时间段对应一个电位信号,称为节拍电位信号,每一个节拍内完成一个微操作,完成微操作的开始时间由工作脉冲决定的。

不同机器周期内的节拍数也不相同。节拍的选取一般有以下几种方法:
   (1).统一节拍法
    以最复杂的机器周期为基准决定出节拍数目大小和节拍时间长短。
   (2).分散节拍法
    根据机器周期实际需求,需要多少个节拍,分配多少个节拍。
   (3).延长节拍法
    在照顾大多数机器周期的前提下,选取一个适当的节拍数,作为基本节拍。如果多于这个节拍数,就延长一个或者两个节拍。
   (4).时钟周期插入
    在一些微型计算机中,不设置节拍,而是直接使用时钟周期信号。时钟周期可以不断插入等待始终周期。

工作脉冲

相当于是执行微操作的起点。

多级时序系统
    小型计算机多采用机器周期、节拍、工作脉冲三级时序系统。

节拍电位和工作脉冲的时间配合关系
    节拍电位是信息的载体,工作脉冲相当于的触发器的开关。

5.3 指令执行过程

5.3.1 指令周期

指令周期和机器周期
  指令周期就是指从取指令、分析取数到完成这个指令的所有时间。
  机器周期又称CPU周期。通常将一个指令周期分为多个机器周期,每个周期完成一个基本操作。例如一个指令周期可以分为:取指周期(机器周期)、取数周期(机器周期)、执行周期(机器周期)和中断周期(机器周期)。

指令周期 = i × 机器周期

一条指令所需的最短时间为两个机器周期:取指周期和执行周期。
  机器周期的大小由CPU对主存的最短操作时间来决定的(因为操作大致分为CPU对其内部和对主存的,CPU对主存操作时间较长,所以选用对对主存操作时间最短来定义)。

5.3.2 指令运行的基本过程

一般可以分为三个阶段:取指令阶段、分析取数阶段和执行阶段。
1.取指令阶段
  取指令阶段就是将指令从主存中取出放入到指令寄存器中,具体操作:
  (1).将程序计数器(PC)中的地址内容发送到地址寄存器(MAR)中,然后发送到地址总线(AB)上。
  (2).由控制单元(CU)向控制总线(CB)发送读命令。
  (3).从主存中将指令读出,经过数据总线(DB)送入到数据寄存器(MDR)中。
  (4).将MDR中的指令放入到指令寄存器(IR)中。
  (5).将PC内容进行自加,为下一条指令做好准备。

以上的操作对于任何的指令来说都是必要的,称为公共操作。过程图为:

2.分析取数阶段
  此阶段主要完成两个功能:一个是通过指令译码器(ID)来识别和区分指令。另一个是通过地址形成部件来获得操作数地址,从而获取操作数。由于指令的功能不同,寻址方式不同,所以在这个阶段的操作也各不相同。
  这个阶段还可以细分为间址周期、取数周期。
3.执行阶段
  这个阶段就是完成指令的各个操作,形成稳定的运算结果,并将其存储起来。

总的来说,计算机的基本工作过程就是取指令、取数、执行指令。一直循环,直到遇到停机指令或者外来的干预为止。

5.4 微程序控制原理

本章主要讲的是微操信号发生器(也叫控制单元、CU)的工作原理。微程序设计技术的实质是将程序设计技术和存储技术相结合。
程序设计技术体现在:将微操作信号进行编码,形成控制字(微指令),然后微指令按照时间先后排列形成微程序微程序指令(机器指令)一一对应的。
存储技术体现在:将微程序存放在一个只读的控制存储器中。

5.4.1 微程序控制的基本概念

1. 微程序设计的提出与发展
   这个设计理念最早是由应该剑桥大学的M.V.Wikes教授于1951年提出的。也就是:一条指令(机器指令)可以分解为许多基本的微命令序列。
2.基本术语
  (1).微命令和微操作
   微命令和微操作是一一对应的,根据字面意思去理解:微命令是命令,是做微操作的控制信号,而微操作是一种操作,指的是微命令的操作过程
   微命令之间有兼容性和互斥性之分。兼容的微命令可以同时产生,互斥的则不能同时产生。
  (2).微指令、微地址
   微指令是若干个微命令的集合,也是控制存储器中的一个单元的内容。微地址就是微指令在控制存储器中的地址。
   一条微指令一般包含两个部分信息(类似于指令,也是包含两部分:操作码和地址码):
    <1>.微操作控制字段,又称微操作码控制字段,用来产生很多微操作的信号,进而产生微操作的。
    <2>.顺序控制字段,又称微操作地址码字段,用来产生下一条微指令地址的。
  (3).微周期
   从控制存储器中读取并执行一条微指令的全部时间。
  (4).微程序
   一系列微指令有序排列的结合就是微程序。每一条机器指令都对应一个微程序。

简单说一下我对这几个概念之间关系的理解

5.4.2 微指令编码法

这里说的微指令编码法指的就是操作控制字段的编码方法。
1.直接控制法(不译码法)
  这种形式的微指令字中,微操作控制字段中的每一个独立的二进制就代表一个微命令,1的话就代表微命令有效;0的话代表微命令无效。

2.最短编码法:
  将所有的微命令统一编码,若微命令的总数为N,操作控制字段的长度为L,他俩之间满足这个关系式:
     L>=log2N
  举个简单的例子:假如有6条微命令,那么我们就可以用三位二进制来表示这个6条命令,还能多出两个表示其他命令。

3.字段编码法
  将上述两者进行折中。将操作控制字段分为很多个小段,小段内采用最短编码法,段与段之间采用直接控制法。
  采用字段编码法要注意以下的规则:
   <1>把互斥性的微命令分在同一段内,兼容性的分在不同段内。因为每个段内只产生一个微命令,所以就会解决在一个微指令中同时出现两个互斥的微命令的这种情况。
   <2>每个小段内的信息位不能太多(做题的时候一般每个小段内互斥的找三个就可以了,太多了的话难找)。
   <3>每个小段都要留一个状态表示不发出任何微命令。例如:三位二进制表示的时候,其中的000就表示不操作。

5.4.3 微程序控制器的组成和工作过程

1.微程序控制器的基本组成
  (1).控制存储器(CM)
   这是核心部件,是用来存放微程序的。
  (2).微指令寄存器(uIR)
   用来存放从CM中取出的微指令的。
  (3).微地址形成部件
   用来产生初始微地址和后继微地址的。
  (4).微地址寄存器(uMAR)
   保存从微地址形成部件传来的微地址的,为在CM中读取该微指令做准备。

2.微程序控制器的工作过程
  这个微程序控制器的工作过程就是在完成机器指令的过程(机器指令的操作码部分经过译码进入到微程序控制器,然后微程序控制器控制完成指令的工作,将机器指令分解为一个个的微指令,然后又将微指令细分为微操作去控制完成),具体流程:
   (1).执行取指令的公共操作。当机器开始运行的时候,自动将取指微程序的入口地址送入到uMAR中,然后从CM中读出相应的微指令送入到uIR中。然后微指令产生相应的微命令来实现取指令的操作。
   (2).取到指令之后,由机器指令通过微地址形成部件来形成与他对应的微程序入口地址,然后送入到uMAR暂存地址。
   (3).从CM中逐条取出对应微指令并执行。
   (4).在执行完一条机器指令之后,继续从第一步,开始取下一条指令。

3.机器指令对应的微程序
   通常一个机器指令对于一个微程序。但是由于像取指令这种公共操作,我们完全可以将它独立编成一个微程序。同样道理,我们也可以编出间址周期和中断周期的微程序。所以说,若一个指令系统中有n种及其指令,则控制存储器中的微程序至少有n+1个。

5.4.4 微程序设计

1.微程序设计方法
 在实际进行微程序设计的时候,我们往往希望能够让微指令字长短一些,减少微程序的长度,提高微程序的执行速度。
  (1).水平型微指令以及水平型微程序设计
   水平型微指令指的是一次能同时发出并执行多个微命令的微指令。他的微指令字长,执行一个机器指令的微指令个数少,并行能力强。微指令和指令的差别很大。由于面向内部逻辑控制,称为硬方法。
  (2).垂直型微指令以及垂直型微程序设计
   垂直型微指令指的是一次只能发出并执行一个微命令的微指令。他的微指令字段,执行一个机器指令的微指令个数多,并行能力弱。微指令和机器指令相似。由于面向算法,称为软方法。
  (3).混合型微指令
   综合前两者的特点。具有不太长的微指令字和一定的并行能力。
2.微指令的运行方式
  (1).串行方式
   在这种方式下,指令是一个接着一个执行的,一个指令完全执行完毕之后,开始执行下一个指令。这就导致,在取微指令阶段,CM在工作,但是数据通路在等待;在执行阶段,CM在等待,数据通路在工作。

  (2).并行方式
   这种方式就能解决上述的问题,充分利用资源。在本条机器指令的执行微指令阶段,就可以开始预取下一条微指令了。但是这种方式存在一个问题:如果下一条要取的微指令的地址需要现在执行的微指令的运算结果的话,就要等现在执行的微指令执行完毕之后才能取到下一条微指令的地址。

(3).串、并行混合方式
   下一条要取的微指令地址不需要现执行微指令的运算结果的时候,就让他采用并行方式;而要取下一条微指令的地址需要现执行微指令的运算结果的时候,就让他采用串行方式。
3.微程序仿真
 微程序仿真指的的是用一台计算机的微程序去模仿另一台计算机的指令系统,让不兼容的计算机之间具有程序兼容的能力。总而言之,就是让一台计算机能够运行自己的程序的同时,还能运行另一台计算机的另一套程序。这要怎么实现呢?

我们将进行仿真的计算机称为宿主机,将被仿真的机器称为目标机。宿主机为什么能执行自己的程序呢?因为宿主机在他的主存储器和控制存储器中有和本机有关的程序。我们只需要在主存储器中和控制存储器中加入和目标机有关的程序就可以实现运行目标机的程序了(在宿主机的主存储器中加入目标机的程序以及仿真支持软件,在宿主机的控制存储器中加入目标机的 解释目标机指令的微程序)。

4.动态微程序设计
  一般情况下,一台计算机的指令系统就对应一系列固定的微程序,设计好之后就不允许改变了,这样的设计叫做静态微程序设计;反之,若能够根据不同的应用目标就能改变微程序,那么这样的设计就叫做动态微程序设计
  根据其原理,他就需要可写控制存储器的支持了。
5.用户微程序设计
  指的是用户可借助可写控制存储器来进行微程序设计,通过本机指令系统中保留的扩充指令用的操作码或者未定义的操作码来定义用户扩充指令,然后根据用户扩充的指令来编写对应的微程序,然后将编写的微程序写入到控制存储器中。这样用户设计的指令就能像本机原来的指令一样去使用了。

控制单元的主要功能就是发出不同的微操作控制信号。
 以下为一个单累加器结构(与运算器连接的只有一个累加寄存器)的简单CPU模型:

 其中的G为标志触发器,当G为1的时候表示机器运行,为0的时候表示停机。
 这个CPU包含三类指令:非访存指令、转移指令和访存指令。其中非访存指令和转移指令在执行周期的时候不放问存储器,而访存指令在执行周期访问存储器。他们的指令周期如下,其中访存指令又可以细分为直接访存和间接访存:

 在简单的CPU模型中,一般将指令周期分为四个CPU周期:取指、间址、执行、中断。为了区别他们,可以在CPU中设置四个标志触发器:

 哪个触发器处于1,就表示机器处于哪个周期。

(1)列出微操作命令的操作时间表

  • 1、写出对应机器指令的微操作及节拍安排(注意:每条微指令结束都要指明下一条的地址)

    • 取指阶段

    • 执行阶段

      • 非访存指令

      • 访存指令

      • 转移类指令

  • 2、确定微指令格式

    • 微指令的编码方式

      • 采用直接控制
    • 后续微指令的地址形成方式

      • 由机器指令的操作码通过微地址形成部件形成
      • 由微指令的下地址字段直接给出
    • 微指令字长

      • 由 20 种微操作确定 操作控制字段 ,最少 20 位
      • 由 38 条微指令确定微指令的 下地址字段 为 6 位
      • 微指令字长 可取 20 + 6 = 26 位
    • 微指令字长的确定

      • 38 条微指令中有 19 条38 条微指令中有 19 条是关于后续微指令地址 -> CMAR

        • 1 条:OP ( IR ) -> 微地址形成部件 -> CMAR
        • 18 条:Ad ( CMDR ) CMAR
        • 若用 Ad ( CMDR ) 直接送控存地址线,则 省去了输至 CMAR 的时间,省去了 CMAR
      • 同理
        • OP ( IR ) -> 微地址形成部件 -> 控存地址线,可省去 19 条微指令,2 个微操作
      • 即:
        • 下地址字段最少取 5 位:38 - 19 = 19
        • 操作控制字段最少取 18 位:20 - 2 = 18
    • 省去了 CMAR 的控制存储器

    • 最终确定(考虑留有一定的余量)

      • 取操作控制字段:18位 -> 24位
      • 下地址字段:5位 -> 6位
  • 3、编写微指令码点(只要对指令译码,然后执行控制字段对应操作即可)

    • 操作

    • 对应指令码点

5.4.5 指令的微操作序列

控制器在实现一个指令单时候,总要把每条指令分解为一系列时间上先后有序的最基本、最简单的微操作,这个序列就是微操作序列。下面举两个简单的例子,分析它的微操作序列:

1.加法指令ADD@R0,R1
 这条指令是将R0的内容作为地址送到主存中,取回一个操作数,和R1中的操作数进行相加,然后将结果送回到主存中。
    ((R0))+(R1)->(R0)

(1).取指周期
   取指周期是微操作序列的公共操作,每个指令都要执行这个周期。

<1>PCout和MARin有效,将PC内保存的指令地址经过CPU内部总线送到MAR中,记作:(PC)->MAR
   <2>控制单元CU通过控制总线,向主存发送读命令,记作:Read。
   <3>主存通过数据总线,将地址内的指令送至MDR中,记作:M(MAR)->MDR。
   <4>MDRout和IRin有效,将MDR中的指令保存在指令寄存器(IR)中,记作:(MDR->IR)。到这里,指令已经从主存中取出并且放到了指令寄存器中,然后指令的操作码经过指令译码器(ID)开始控制控制单元(CU)了。
   <5>PC内容加1,记作:(PC)+1->PC。
  (2).取数周期
   取数周期完成取操作数的任务,其中一个操作数在主存中,另一个在寄存器R1中。

<1>R0out和MARin有效,将被加数地址经过内部总线送到MAR中,记作:(R0)->MAR。
   <2>向主存发出读命令,Read。
   <3>存储器通过数据总线将MAR所指单元的内容送至MDR,同时MDRout和Yin(Y是直接连接在ALU的一端的一个寄存器,下面有图)有效,记作:M(MAR)->MDR->Y。
  (3).执行周期
   完成加法运算任务,并将结果写回到主存。

<1>R1out和ALUin有效,同时CU发送ADD控制信号,使得R1和Y的内容相加,结果送到寄存器Z(ALU输入直接相连的一个寄存器,详情见下图),记作(R1)+(Y)->Z。
   <2>Zout和MDRin有效,将Z中保存的数据放入到数据寄存器中,记作(Z)->MDR。
   <3>向主存中发写命令,记作:Write。

2.转移指令JC A
  这是一条转移指令,就是改变PC的值,让其不再顺序取指。如果上次运算有进位(C=1),就转移,A为位移量,也就是PC要加的数,转移后的地址为PC+A,这就是转移之后下一条指令的地址。

(1).取指周期
   公共操作,和上一条的完全一样(准确来说是每一条指令的都一样)。
  (2).执行周期
   如果有进位就执行(PC+A)->PC,没有的话就跳过一下几步。
   <1>PCOUT和ALUin有效,记作(PC)->Y(C=1)
   <2>Ad IRout和ALUin有效,同时CU发送ADD信号,让IR中的地址码字段A和Y的内容相加,结果送到寄存器Z,记作Ad(IR)+(Y)->Z(C=1)
   <3>Zout和PCin有效,将转移地址送入PC,记作(Z)->PC(C=1)·

5.5 流水线

5.5.1 指令流水原理

可以将指令周期简单分为取指令和执行指令

取指令由取指部件完成,执行指令由执行部件完成,如果采用串行化执行,则在执行指令1时,取指部件是空闲的。

指令的二级流水

在执行指令1阶段,同时将指令2取出放入指令缓存部件,等执行部件执行指令1结束,则直接执行指令2,理想情况,流水线的效率将加倍。

仍存在的问题:

指令执行时间一般大于取值时间,因此取值阶段要等待一段时间,存放在缓冲区的指令不能立即交给执行部件;

当遇到条件转移指令时,下一条指令是不可知的;采用猜测法,遇到条件转移指令时,也将下一条指令取出送入指令缓冲区,如果转移没有发生则继续执行,如果转移发生,则重新取指令。

将指令处理过程进一步细分:

取指FI 从存储器取出一条指令放入指令部件缓冲区

指令译码DI 确定操作性质和操作数地址形成方式

计算操作数地址CO 计算操作有效地址

取操作数FO 从存储器中取出操作数

执行指令EI 执行指令,将结果存入目的位置

写操作书WO 将结果存入寄存器

将指令周期分为6个阶段,可以实现指令的6级流水

5.5.2 影响流水线性能因素

1) 结构相关 资源相关

不同指令争用同一部件产生资源冲突

FO取指和FI取操作数会发生访存冲突

解决方式:

  • 流水线完成前一条指令对数据的存储器访问时,暂停取后一条指令
  • 设置独立存储器存放操作数和指令
  • 采用指令预取技术,将指令预取到指令队列中,这样取操作数操作便可以独占存储器访问

2) 数据相关

指令在流水线中重叠执行,当后继指令需要用到前面的指令产生的结果时发生的

不同指令重叠操作,可能改变对操作数的读写访问顺序

数据相关冲突有:

写后读相关:先写入寄存器,再读出寄存器

读后写相关:先读寄存器,再写寄存器

写后写相关:指令1先写寄存器,指令2再写寄存器

解决方式:

后推法 遇到数据相关时,停顿后继指令运行,直到前面指令结果已经生。为硬件阻塞,软件插入NOP 指令

定向技术 旁路技术 将某条指令执行结果不送回寄存器而是直接送到其他指令所需的地方

数据旁路技术用于解决数据相关

3) 控制相关

由转移指令引起 若是条件转移指令,则转移目标地址可能发生跳转,影响流水线效率。

解决方式:

尽早判别转移是否发生,尽早生成转移目标地址

预取转移成功和不成功两个方向的目标指令

加快和提前形成条件码

分支预测

5.5.3 流水线性能

1) 吞吐率

单位时间内流水线完成指令或输出结果数量

最大吞吐率:流水线在连续流动达到稳定状态后所得吞吐率

m段流水线各段时间均为t

实际吞吐率:流水线完成n条指令实际吞吐率

2) 加速比

m段流水线速度与等功能非流水线速度之比

3) 效率

流水线中各功能段利用率

流水线效率为流水线各段处于工作时间时空区和流水线中各段总时空区之比,如图

5.5.4 流水线多发技术

假定指令周期分为四个阶段:取指FI 译码ID 执行EX 回写WR

1) 超标量技术

在每个时钟周期内同时并发多条独立指令

处理机中配置多个功能部件和指令译码电路,多个寄存器端口和总线;编译程序决定哪几条相邻指令可并行执行

例如 三条指令是相互独立的,可以并行执行

MOV BL,8

ADD AX,1756H

ADD CL,4EH

2) 超流水线技术

在一个时钟周期内再分段,一个功能部件使用多次

3) 超长指令字技术

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

5.5.5 流水线结构

1) 指令流水线结构

将指令执行阶段分为取指 指令译码 地址形成 取操作数 执行指令 回写结果几个阶段,对应相应结构如下

2) 运算流水线结构

将浮点加法运算分成对阶 尾数加 结果规格化 3个阶段

3) 五级流水线

经典的五级流水线:取址、译码/读寄存器、执行/计算有效地址、访问内存(读或写)、结果写回寄存器

处理器内部有很多通用寄存器,这些寄存器用来存储指令的操作数,它对程序员可见,如x86有8个通用寄存器,RISC处理器则更多,常有32个或64个等。这一堆寄存器也被叫做Register file(寄存器堆)。

在流水线设计中,为了确保不同流水线节拍不会相互影响,在每个阶段引入了流水线寄存器来分隔各个流水线节拍:

寄存器就像是红灯,信号只在固定的时间才会将左端节拍的值传递给右端节拍,这样各个节拍的工作就不会出现紊乱。

在汇编语言中,ALU(算术逻辑单元)直接访问通用寄存器进行运算,在硬件实现时,通用寄存器中的数据先被读到流水线寄存器中,即ALU的输入寄存器中,ALU运算结束后,数据会存储在ALU的输出寄存器中,最后再送回到通用寄存器中。下图为ALU、通用寄存器、ALU输入输出寄存器的结构图。

流水线寄存器对程序员是不可见的,ALU指令的执行节拍可以进一步细分为3个子节拍:

(1)从寄存器堆中读取寄存器的值。

(2)进行运算。

(3)将运算结果写回到寄存器堆中。

根据这个分析,处理器的流水线可以进一步细分。MIPS处理器在设计时,将处理器的执行过程划分为5个阶段。

流水线阶段 描述
IF Instruction Fetch,取指
ID Instruction Decode,译码
EX Execute,执行
MEM Memory Access,内存数据读或者写
WB Write Back,数据写回到通用寄存器中

5级流水线

在MIPS的5级流水线中,从寄存器堆中读数据到ALU输入寄存器这个步骤被放在了ID阶段,将运算结果写回到寄存器堆被作为一个独立的阶段。

到目前为止,我们都认为数据已经存放在寄存器中,事实上,数据被存放在内存(Memory)中,在RISC处理器中,数据要先从内存load(导入)到寄存器中,然后再参与运算,然后将运算结果store(导出)到存储器中去。因此,MIPS的5级流水线增加了一个MEM阶段。

对于运算指令,在MEM阶段空闲。对于load指令,在EX阶段计算要访问的地址,在MEM阶段从内存中将数据读入到MEM register(MEM和WB之间的流水线寄存器)中,在WB阶段,将MEM register的数据写回到Register file中。对于store指令,在EX阶段计算要访问的地址,在MEM阶段将寄存器中的数据写回到存储器中。

下图是MIPS 5级流水线的执行顺序图:

这5级流水线可以说是史上最经典的流水线,早期的MIPS、ARM9等处理器使用这种流水线,以后的处理器也都能看到它的影子,包括x86处理器等。

2022年考研计算机组成原理_5 中央处理器相关推荐

  1. 2022年考研计算机组成原理_7 输入输出系统

    https://gitee.com/fakerlove/computer-organization 文章目录 7. 输入输出系统 7.1 基本概念 7.1.1 I/O系统演变过程 7.1.2 I/O系 ...

  2. 2022年考研计算机组成原理_6 总线

    https://gitee.com/fakerlove/computer-organization 文章目录 6. 总线 6.1 概述 6.1.1 概念 6.1.2 分类 按功能层次分类 按数据线的多 ...

  3. 2022年考研计算机组成原理_2 数据表示和运算

    https://gitee.com/fakerlove/computer-organization 文章目录 2. 数据表示和运算 2.1 数据与编码 2.1.1 进制转换 2.1.2 校验码 2.2 ...

  4. 2022年考研计算机组成原理_4 指令系统

    https://gitee.com/fakerlove/computer-organization 文章目录 4. 指令系统 4.1 指令系统的基本概念 4.1.1 指令的基本格式 1) 四地址指令 ...

  5. 2022年考研计算机组成原理_1 概述

    https://gitee.com/fakerlove/computer-organization 文章目录 1. 概述 1.1 发展历程 1.2 计算机系统层次结构 1.2.1 五大部件 1) 存储 ...

  6. 【考研计算机组成原理】课堂笔记目录汇总——知识点清晰

    文章目录: 一:基础笔记 二:强化笔记 三:冲刺笔记 一:基础笔记 [考研计算机组成原理]课堂笔记1 第一章 计算机系统概论Introduction to computer systems [考研计算 ...

  7. 考研计算机组成原理难度,考研计算机组成原理特点及复习攻略

    摘要: 考研计算机组成原理特点及复习攻略,新东方在线编辑收集整理,为考研考生备考使用,预祝大家考研备考顺利,成功进入梦想的院校. 组成原理内容比较零乱,条理有点繁杂:并且计算机是一个内部运行状态难以直 ...

  8. 计算机组成原理 外部设备分为,2017考研计算机组成原理第七章考点:外部设备...

    2017考研计算机组成原理第七章考点:外部设备 2016-03-15 13:33 | 考研集训营 对于参加计算机统考的学生来说,2017考研的准备工作需要提前进行,因为计算机考研专业课涵盖了四门科目, ...

  9. 计算机组成原理浮点数左移规则,2020考研计算机组成原理知识点:浮点数的表示和运算...

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机组成原理知识点:浮点数的表示和运算,希望能帮助大家! 浮点数的表示和运算 1. 浮点数的表示 1)浮点数的表示范围; 浮点数是指 ...

最新文章

  1. 【08】Effective Java - 异常
  2. jq 通过标签名称获取标签_怎样利用tag标签来获取长尾关键词排名
  3. Chrome开发者工具关于网络请求的一个隐藏技能 1
  4. 15款的视频处理软件免费下载
  5. 强有力的Linux历史命令 你还记得几个
  6. 安装python时需要勾选_工业洗衣机安装时需要注意什么?
  7. webserver的作用!
  8. this.controls指所有控件吗?_PPT特效制作案例:2019年小目标,你定了吗?(用文本框控件制作)...
  9. 达梦数据库技术分享索引贴
  10. 开发网页微信登入获取微信用户信息
  11. 【历史上的今天】7 月 15 日:Mozilla 基金会正式成立;Enigma 密码机的首次工作;任天堂推出 FC 游戏机
  12. RocketMq部署与使用
  13. STM32 —— OLED 屏幕入门
  14. Python系列英文原版电子书
  15. C语言中二维字符数组的定义和初始化
  16. 迅搜安装流程(基于官方文档)
  17. 向 iOS 越狱彻底说再见!
  18. Sql语句——删除表数据drop、truncate和delete的用法
  19. Hadoop源码分析(12)
  20. .XXX文件的文件类型变成WanNengZip.XXX应该如何打开(阻止流氓软件万能压缩、好压、快压等挟持正常软件)

热门文章

  1. Android Studio配置,加快编译速度
  2. HTML和CSS精要基础知识整理
  3. php mysql难不难_PHP操作mysql数据库
  4. elasticsearch_spring-data-elasticsearch 快速入门-Spring Boot+Elasticsearch
  5. mysql 密码忘了_mysql8.0以上版本安装配置及忘记密码时重置
  6. cesium 模型绕点飞行一周
  7. c语言字符串去除第一个和最后一个_387. 字符串中的第一个唯一字符
  8. 替代left join方法_你应该使用pathlib替代os.path
  9. SpringBoot2入门笔记
  10. Android 实现计时器功能,Android实现倒计时30分钟功能