CPU 的功能和结构

运算器

对数据进行加工
image.png
算术逻辑单元 ALU、暂存寄存器、通用寄存器、累加寄存器 ACC、程序状态字寄存器 PSW、移位器、计数器

控制器

取指令、分析指令、执行指令、中断处理
image.png
程序计数器 PC,指令寄存器 IR
指令译码器、时序系统、微操作信号发生器
存储器地址寄存器 MAR,存储器数据寄存器 MDR
用户可见的寄存器:通用寄存器组、程序状态字寄存器 PSW、程序计数器 PC
用户不可见的寄存器:MDR、MAR、IR、暂存寄存器

CPU

image.png
CPU = 运算器 + 控制器 + 控制单元 + 寄存器 + 中断
指令控制:取指令、分析指令、执行指令
操作控制:管理并产生从内存取出的每条指令的操作信号
时间控制:对各种操作信号进行时间上的控制
数据加工:对数据进行算术和逻辑运算
中断处理:对计算机运行中出现的异常情况和特殊请求进行处理

指令执行过程

指令周期

image.png
指令周期:CPU 从主存中每取出并执行一条指令所需的全部时间
指令周期由若干机器周期来表示,机器周期又叫 CPU 周期
image.png
每个指令周期内机器周期数可以不等,每个机器周期内的时钟周期数也可以不等。
取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点
标志触发器:FE、IND、EX、INT

数据流

取值周期的数据流
image.png
间址周期的数据流
image.png
执行周期的数据流
执行周期的任务是根据 IR 中的指令字的操作码和操作数通过 ALU 操作产生执行结果。 不同指令的执行周期操作不同,因此没有统一的数据流向。
中断周期的数据流
image.png

执行方案

  • 单指令周期:对所有指令都选用相同的执行时间来完成 。 指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。 对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
  • 多指令周期:对不同类型的指令选用不同的执行步骤来完成。 指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程 。 需要更复杂的硬件设计。
  • 流水线方案每隔一段时间启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中 。 指令之间并行执行。

    数据通路

    数据通路:数据在功能部件之间传送的路径

  • CPU 内部单总线结构

  • CPU 内部多总线结构
  • 专用数据通路结构

由控制单元产生控制信号建立数据通路

单总线结构

image.png
image.png
image.png
image.png
单总线结构中 ALU 需要配合暂存器使用

专用数据通路

下图是一个简化了的 CPU 与主存连接结构示意图(图中省略了所有的多路选择器)。其中有一个累加寄存器(ACC)、一个状态数据寄存器和其他 4 个寄存器:主存地址寄存器(MAR)、主存数据寄存器(MDR)、程序寄存器(PC)和指令寄存器(IR),各部件及其之间的连线表示数据通路,箭头表示信息传递方向。 要求:
image.png
(1)请写出图中 a、b、c、d 4 个寄存器的名称。
(2)简述图中取指令的数据通路。
(3)简述数据在运算器和主存之间进行存 / 取访问的数据通路。
(4)简述完成指令 LDA X 的数据通路(X 为主存地址,LDA 的功能为 (X)→ACC)。
(5)简述完成指令 ADD Y 的数据通路(Y 为主存地址,ADD 的功能为 (ACC)+(Y)→ACC)。
(6)简述完成指令 STA Z 的数据通路(Z 为主存地址,STA 的功能为 (ACC)→Z)
解析:
(1) d 能自动 “+1”,是 PC
PC 内容是地址,送 MAR,故 c 是 MAR
b 与微操作信号发生器相连,是 IR
与主存相连的寄存器是 MAR 和 MDR,c 是 MAR, 则 a 是 MDR
(2)(PC)→MAR;M(MAR)→MDR;(MDR)→IR
(3) 存 / 取的数据放到 ACC 中,设数据地址已放入 MAR
取:M(MAR)→MDR;(MDR)→ALU→ACC
存:(ACC)→MDR→M(MAR)
(4)X→MAR;M(MAR)→MDR;(MDR)→ALU→ACC
(5)Y→MAR;M(MAR)→MDR;(MDR)→ALU,(ACC)→ALU;ALU→ACC
(6)Z→MAR;(ACC)→MDR;(MDR)→M(MAR)

硬布线控制器

image.png
根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些 “微命令”
image.png

微程序控制器

微程序控制器:利用软件方法设计硬件的一种技术
一种机器指令对应一个微程序,一个微程序对应多条微指令,一个微指令包含多个微命令 (微操作)
CPU 出厂前会将所有机器指令的 “微程序” 存入 “控制存储器 CM” 中
微指令的组成:操作控制位 + 顺序控制位;顺序控制位是指明下一条微指令的地址
image.png
控制存储器 CM 在控制单元 CU(微程序控制器) 中,控制单元 CU 在 CPU 中
顺序逻辑输入的寻址标志用于判断是否要跳过间址周期;根据 CLK 中断信号判断是否进入中断周期
image.png
取值周期微程序、间址周期微程序、中断周期微程序的操作对每条指令都一样,所以可以共用
image.png

微指令的设计

微指令的格式

image.png

水平型微指令的编码方式

image.png
image.png

下一条微指令的形成方式

image.png
在断定方式中微指令 = 操作控制位 + 顺序控制位 (判别测试位 + 下地址位)
判别测试位用来在出现分支选择微地址
“判别测试” 有 n 位标志,可实现微程序 2 的 n 次方路转移,涉及微地址寄存器的 n 位(修改的位数)
微地址寄存器就是μPC(CMAR),存储微地址形成部件送来的微指令的地址,为在 CM 中读取微指令做准备
image.png
image.png

微程序控制器的设计

image.png
image.png

硬布线与微程序的比较

image.png
微程序控制器小结
image.png

指令流水线

指令流水线的定义

image.png

流水线的表示方法

image.png
时空图横坐标:各个任务在流水线中所经过的时间;纵坐标:流水线的每个流水段

流水线的性能指标

image.png
image.png
image.png

影响流水线的因素

image.png

流水线的多发技术

超标量流水线技术
image.png
超流水技术
image.png
超长指令字
image.png
小结
image.png

常用指令分析

image.png

运算类指令 (ADD)

image.png

取数指令 (LOAD)

image.png

存数指令 (STORE)

image.png

条件转移指令 (beq,bne)

image.png

无条件转移指令 (JMP)

image.png
流水线阻塞相关例题
image.png

习题

  1. 下图所示为双总线结构机器的数据通路,IR 为指令寄存器,PC 为程序计数器 (具有自增功能),M 为主存 (受 R/W 信号控制),AR 为地址寄存器,DR 为数据缓冲寄存器, ALU 由加、减控制信号决定完成何种操作,控制信号 G 控制的是一个门电路。另外,线上标注有小圈表示有控制信号,例中 yi 表示 y 寄存器的输入控制信号,R1o 为寄存器 R1 的输出控制信号,未标字符的线为直通线,不受控制。
    image.png
    (1) 指令 “ADD R2,R0”,完成 (R0)+(R2)→R0 的功能操作,画出其指令周 期流程图,假设该指令的地址已放入 PC 中。并列出相应的微操作控制信号序列
    (2) 指令 “SUB R1,R3”,完成 (R3)-(R1)→R3 的操作,画出其指令期流程图 ,并列出相应的微操作控制信号序列
    解析:
    用方框图语言表示指令周期
  • 方框:代表一个 CPU 周期,方框中的内容表示数据通路的操作或某种控制操作。
  • 菱形:表示某种判别或测试,不过时间上它依附于紧接它的前面一个方框的 CPU 周期,而不单独占用一个 CPU 周期。

(1)“ADD R2,R0” 指令是一条加法指令,参与运算的两个数放在寄存器 R2 和 R0 中,指令周期流程图包括取指令阶段执行指令阶段两部分 (为简单起见 ,省去了“→” 号左边各寄存器代码上应加的括号)。 根据给定的数据通路图,“ADD R2,R0” 指令的详细指令周期流程图如图 (a) 所示,图的右边部分标注了每一个机器周期中用到的微操作控制信号
(2)“SUB R2,R3”指令是一条减法指令,其指令周期流程图如图 (b) 所 示。与 ADD 指令不同的是:在执行指令阶段,微操作控制信号序列有所不同。
image.png
PC→AR:将指令地址从程序计数器中送入地址寄存器
M→DR:将指令从主存中读出读出到数据寄存器
DR→IR:将指令从数据寄存器送入指令寄存器
◇:分析指令


image.pngimage.png
2. 某计算机字长 16 位,采用 16 位定长指令字结构,部分数据通路结构如图所示。图中所有控制信号为 1 时表示有效、为 0 时表示无效。例如控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR,MDRin 为 1 表示允许数据从内总线打入 MDR。假设 MAR 的输出一直处于使能状态。
加法指令 “ADD (R1),R0” 的功能为
(R0)+((R1))→(R1),将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存。
下表给出了上述指令取值译码阶段每个节拍(时钟周期) 的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。
解析:
image.png
注:上图中 WR 应该为 WB
image.png
注:上图中 PCout 应为 R1out


  1. 相对于微程序控制器,硬布线控制器的特点是()
    A.指令执行速度慢,指令功能的修改和扩展容易
    B.指令执行速度慢,指令功能的修改和扩展难
    C.指令执行速度快,指令功能的修改和扩展容易
    D.指令执行速度快,指令功能的修改和扩展难
    解析:
    硬布线控制器是用纯硬件产生控制信号,指令执行速度快;硬件难扩展,指令功能的修改和扩展难
    所以答案为 D

  1. 取指周期结束后,程序计数器 (PC) 中存放的是 。()
    A. 当前指令地址
    B. 程序中的指令数量
    C. 下一条指令地址
    D. 程序分支时跳转的目标地址
    解析:
    取指周期结束后,程序计数器 PC+“1”,存放的是下一条指令的地址
    所以答案为 C

  1. 下列有关指令和微指令之间的关系的描述中,正确的是 ()
    A. 一条指令的功能通过执行一条微指令来实现
    B. 一条指令的功能通过执行一个微程序来实现
    C. 一条微指令的功能通过执行一条指令来实现
    D. 一条微指令的功能通过执行一个微程序来实现
    解析:
    一条指令对应一个微程序,一个微程序由多个微指令组成,一个微指令由多个微操作组成
    所以答案为 B

6.(统考 2017-18) 下列关于主存储器(MM)和控制存储器(CS)的叙述中,错误的是 ()
A. MM 在 CPU 外,CS 在 CPU 内
B. MM 按地址访问,CS 按内容访问
C. MM 存储指令和数据,CS 存储微指令
D. MM 用 RAM 和 ROM 实现,CS 用 ROM 实现
解析:
MM 在 CPU 外,CS 在 CPU 内,A 对
MM 和 CS 都是按地址访问,B 错;TLB 快表是按内容访问
MM 存储指令和数据,CS 存储微指令,C 对
MM 用 RAM 和 ROM 实现 (主板上的 BIOS 程序存储在 ROM 中,也是主存的一部分),CS 用 ROM 实现,出厂前写入微指令,D 对
所以答案为 B


image.png
7. 设某计算机运算器框图如图 (a) 所示,其中 ALU 为 16 位的加法器(高电平工作),SA,SB 为 16 位暂存器。4 个通用寄存器由 D 触发器组成,Q 端输出, 其读、写控制功能见下表
image.pngimage.png
RA0RA1:读 R0-R3 的选择控制 ;WA0WA1:写 R0-R3 的选择控制;R:寄存器读命令;W:寄存器写命令;
LDSA:打入暂存器 SA 的控制信号 ;LDSB:打入暂存器 SB 的控制信号 ;SB-ALU:传送 SB 的控制信号 (作加法) ;/SB-ALU:传送 SB 的控制信号, 并使加法器最低位加 1.(作减法) ;Reset:清暂存器 SB 为零的信号;
~:一段微程序结束,转入取机器指令的控制信号
机器采用串行微程序控制方式,其微指令周期见图(b)。其中读 ROM 是从控存中读出一条微指令时间,为 1μs;ALU 工作是加法器做加法运算,为 500ns; m1 是读寄存器时间,为 500ns;m2 是写寄存器的工作脉冲宽度,为 100ns。 微指令字长 12 位,微指令格式如下 (未考虑顺序控制字段):
要求:用二进制代码写出如下指令的微程序
(1)“ADD R0,R1” 指令,即 (R0)+(R1)→R1
(2)“SUB R2,R3” 指令,即 (R3)-(R2)→R3
(3)“MOV R2,R3” 指令,即 (R2)→(R3)
解析:
先画出三条指令的微指令的微程序流程图,如下图所示
image.png
其中未考虑 “取指周期” 和顺序控制问题,也即微程序仅考虑 “ 执行周期”,微指令序列的顺序数字标号标在每条微指令的右上角 。每一框表示一条微指令
根据给定的微指令周期时间关系,完成 ADD,SUB 指令的执行动 作需要 3 条微指令,MOV 指令只需 2 条微指令。用二进制代码写出的三 条指令的微程序列于下表中,其中 * 表示代码随意设置 (0 或 1 均可)。
image.png


  1. 某计算机的控制器采用微程序控制方式,微命令中的操作控制字段采用字段直接编码法,共有 32 个微命令,构成 5 个互斥类,分别包含 7、3、12、5 和 6 个微命令,则操作控制字段至少有()
    A.5 位
    B.6 位
    C.15 位
    D.33 位
    解析:
    采用字段直接编码法,5 个互斥类,5 个段。每段留出一个状态,标识不发出任何微操作,故每个段的状态数为:8、4、13、6、7。
    因为 23=8、22=4、24=16;所以操作控制字段至少 3+2+4+3+3=15 位
    故答案为 C

9.(统考 2014-18) 某计算机采用微程序控制器,共有 32 条指令,公共的取指令微程序包含 2 条微指令,各指令对应的微程序平均由 4 条微指令组成,采用断定法(下址字段法)确定下条微指令的地址,则微指令中下址字段的位数至少是 ()
A. 5
B. 6
C. 8
D. 9
解析:
本题本质是计算微指令的条数
微指令 = 操作控制位 + 顺序控制位 (判别测试 + 下地址)
一条指令对应一个微程序;一个微程序对应多个微指令。下址法是通过微指令的下地址字段指定下条微指令的地址
2+32×4=130
27=128
所以答案为 C


  1. 某微程序控制器采用的微指令字的长度为 24 位。微命令操作控制字段部分由 4 段构成,每段所包括的互斥微命令分别为 5 个、6 个、14 个和 3 个。P 测试字段能判别条件有 3 个。该微程序控制器用来表示微地址位数最多为 ()
    A.10
    B.14
    C.16
    D.32
    解析:
    微地址是微指令在 CM 中的地址,CM 用来存储微指令。求微地址位数也就是问所有微指令可以用几位来表示,而微指令的下地址位就可以表示所有微指令,所以也就是问下地址位数。
    本题类型同上面第 8 题,区别是上题求控制字段位数而本题是求下地址字段位数,所以需要用微指令字长度减去控制字段长度和判别测试字段长度得到下地址字段长度。每段留出一个状态,标识不发出任何微操作。
    控制字段位数:3+3+4+2=12
    判别测试位数:2
    下地址位数:24=14=10
    所以答案为 A

  1. 微地址寄存器有 6 位 (μA5-μA0),当需要修改其内容时, 可通过某一位触发器的强置端 S 将其置 “1”。现有三种情况:
    (1)执行 “取指” 微指令后,微程序按 IR 的 OP 字段 (IR3-IR0)进行 16 路分支 ; –需要修改微地址寄存器中 4 位
    (2) 执行条件转移指令微程序时,按进位标志 C 的状态进行 2 路分支 ; –需要修改微地址寄存器中 1 位
    (3) 执行控制台指令微程序时,按 IR4,IR5 的状态进行 4 路分支
    请按多路转移方法设计微地址转移逻辑
    解析:
    微地址寄存器就是μPC(CMAR),存储微地址形成部件送来的微指令的地址,为在 CM 中读取微指令做准备
    本题下一条微指令的形成方式是分路转移,微指令 = 控制字段 + 判别字段 + 转移地址
    由题干知修改 CMAR 有三种情况,所以微程序有三种判别测试,分别为 P1,P2,P3。 由于修改 CMAR 的μA5-μA0 内容具有很大灵活性,现分配如下:
    (1) 用 P1 和 IR3-IR0 修改μA3-μA0;
    (2) 用 P2 和 C 修改μA0;
    (3) 用 P3 和 IR5,IR4 修改μA5,μA4。
    另外还要考虑时间因素 T4(最后一个时钟周期更新微地址寄存器),故转移逻辑表达式如下:
    μA5=P3 IR5 T4
    μA4=P3 IR4 T4
    μA3=P1 IR3 T4
    μA2=P1 IR2 T4
    μA1=P1 IR1 T4
    μA0=P1 IR0 T4+ P2 C T4 (P1 或 P2 在一个微指令周期最多一位有效)
    * 与逻辑 + 或逻辑

  1. 某 32 位机共有微操作控制信号 52 个,构成 5 个相斥类的微命令组,各组分别包含 4 个,5 个,8 个,15 个和 20 个微命令。已知可判断的外部条件有 CY 和 ZF 两个,微指令字长 29 位。
    (1) 给出采用水平型微指令的格式。
    (2) 控制存储器的容量应为多少?
    解析
    (1)
    每段留出一个状态,标识不发出任何微操作
    控制字段位数:3+3+4+4+5=19
    判别测试位数:2
    下地址位数:29-19-2=8
    image.png
    (2) 控制存储器存储微指令。下地址 8 位,所以共有 28 条微指令,每个微指令 29 位。
    CM 容量:28×29=7424b

image.png
13. 已知某机采用微程序控制方式,其控制存储器容量为 512×48 位,微程序可在整个控制存储器中实现转移,可控制微程序转移的条件共 4 个 (每个条件需要一位测试位),微指令采用水平型格式,后继微指令地址采用断定格式,如图所示
1. 微指令中的三个字段分别应是多少位?
2. 画出对应这种微指令格式的微程序控制器逻辑框图
解析:
(1) 默认为直接编码。判别测试字段 4 位 (如采用字段译码只需 3 位),下地址字段 9 位,微命令字段 48-4-9=35 位,
(2) 对应上述微指令格式的微程序控制器逻辑框图如图所示, 其中微地址寄存器对应下地址字段,P 字段即为判别测试字段,控制字段即为微命令字段,后两部分组成微指令寄存器
地址转移逻辑的输入是指令寄存器的 OP 码,各种状态条件以及判别测试字段所给的判别标志(某一位为 1),其输出修改微地址寄存器的适当位数,从而实现微程序的分支转移。就是说,此处微指令的后继地址采用断定方式。(采用断定方式是通过微指令顺序控制字段控制产生后继微指令地址
image.png


  1. 某计算机的指令流水线由四个功能段组成,指令的流经各功能段的时间(忽略各功能段之间的缓存时间)分别是 90ns 、80ns 、70ns 和 60ns ,则该计算机的 CPU 时钟周期至少是()
    A. 90ns
    B. 80ns
    C. 70ns
    D. 60ns
    解析:
    为方便流水线的设计,将没给阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为 90ns。
    所以答案为 A

15.(统考 2013) 设 CPU 主频为 1.03GHz ,采用 4 级指令流水线,每个流水段执行需要一个时钟周期。假定 CPU 执行了 100 条指 令,其在执行过程中没有发生任何流水线阻塞,此时流水线的吞吐率为( )
A. 0.25 ×109 条指令 / 秒
B. 0.97 ×109 条指令 / 秒
C. 1.0 ×109 条指令 / 秒
D. 1.03 ×109 条指令 / 秒
解析:
吞吐率是指在单位时间内流水线所完成的任务数量。设 n 为任务数,处理完成 n 个任务所用的时间为 Tk=kt+(n-1)t,吞吐率 TP=n/Tk;
本题任务数 n 为 100,k=4,t=1/(1.03×109)s,Tk=kt+(n-1)t=10-7
TP=n/TK=109
所以答案为 C


16.(统考 2017-17) 下列关于超标量流水线特性的描述中,正确的是 I. 能缩短流水线功能段的处理时间 II. 能在一个时钟周期内同时发射多条指令 III. 能结合动态调度技术提高指令执行的并行性
A. 仅 II
B. 仅 I 、III
C. 仅 II 、III
D. I 、II 和 III
解析:
超标量流水线每个功能段的处理时间不变,I 错
超标量流水线能在一个时钟周期内同时发射多条指令,II 对
超标量流水线能结合动态调度技术提高指令执行的并行性,III 对
所以答案为 C


  1. 流水线中有三类数据相关冲突:写后读相关;读后写相关;写后写相关。判断以下三组指令各存在哪种类型的数据相关。 (1) I1: ADD R1 ,R2 ,R3 ; (R2) + (R3)->R1I2: SUB R4 ,R1 ,R5 ; (R1) - (R5)->R4(2) I3: STA M(x) ,R3 ; (R3)->M(x) ,M(x) 是存储器单元I4: ADD R3 ,R4 ,R5 ; ; (R4)+(R5)->R3(3) I5: MUL R3 ,R1 ,R2 ; ; (R1) ×(R2)->R3I6: ADD R3 ,R4 ,R5 ; ; (R4) + (R5)->R3

解析:
(1)I1 指令运算结果应先写入 R1 ,然后在 I2 指令中读出 R1 内容。由于 I2 指令进入流水线,变成 I2 指令在 I1 指令写入 R1 前 (WB 阶段) 就读出 R1 内容,发生 RAW 相关。 写后读 RAW read after write,I2 读出旧数据。
(2)I3 指令应先读出 R3 内容并存入存储单元 M(x) ,然后在 I4 指令中将运算结果写入 R3 。但由于 I4 指令进入流水线,寄存器的读写操作比 I3 指令中访存操作快得多,变成 I4 指令在 I3 指令读出 R3 内容前 (EX 阶段) 就写入 R3 ,导致了先写后读,实际应该是先读后写,产生了先读后写的相关,发生 WAR 相关。 读后写 WAR I3,读到新的数据。
(3)I6 指令的加法运算完成时间早于 I5 指令的乘法运算时间,变成指令 I6 在指令 I5 写入 R3 前 (WB 阶段) 就写入 R3 ,导致 R3 的内容错误,发生 WAW 相关 。 写后写 WAW 寄存器的值不是最新的


  1. 下列不会引起指令流水阻塞的是()
    A. 数据旁路
    B. 数据相关
    C. 条件转移
    D. 资源冲突
    解析:
    会引起指令流水阻塞的是:资源冲突、数据相关、条件转移
    数据旁路是解决数据相关的一种方式
    条件转移:执行转移指令时,依据转移条件的产生结果可能为顺序取下条指令,也可能转移到新的目标地址取指令,地址不定,流水线需要暂停、发生断流
    所以答案为 A

19.(统考) 下列给出的指令系统特点中,有利于实现指令流水线的是()
I. 指令格式规整且长度一致
II. 指令和数据按边界对齐存放
III. 只有 Load/Store 指令才能对操作数进行存储访问
A. 仅 I 、II
B. 仅 II 、III
C. 仅 I 、III
D. I 、II 、III
解析:
以上三个 RISC 特征都能有效降低取指令或执行指令的复杂度,从而有利于流水线操作
对于 RISC,只有 Load/Store 指令才能对操作数进行存储访问,其他指令不能访问存储器,这样可以把 Load/Store 指令的地址计算和指令的执行步骤规整的放在一个流水阶段,有利于减少操作步骤 (流水阶段个数),III 对
所以答案为 D


  1. 某 16 位计算机中,带符号整数用补码表示,数据 Cache 和指令 Cache 分离。表中给出了指令系统中部分指令格式,其中 RS ,RD 表示寄存器,MEM 表示存储器,(X)表示寄存器 X 或存储单元 X 的内容。

image.png
该计算机采用 5 段流水方式执行指令,各流水段分别是取指 (IF),译码 / 读寄存器(ID ),执行 / 计算有效地址(EX ),访问存储器(M )和结果写回寄存器(WB ),流水线采用“按序发射,按序完成” 方式, 没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内完成。 请回答下列问题。
(1)若 int 型变量 X 的值为-513 ,存放在寄存器 R1 中,则执行 “SHR R1” 后,R1 中的内容是多少?(用十六进制表示)
(2)在某个时间段中,有连续 4 条指令进入流水线,在其执行过程中没有发生指令阻塞,则执行这 4 条指令所需的时钟周期数为多少?
(3) 高级语言程序中某赋值语句为 X=A+B ,X 、A 和 B 均为 int 型变量,它们的存储单元地址分别表示为 [X] 、[A] 和 [B] 。该语句对应的指令序列及其在流水线中的执行过程如图所示。
I1: LOAD R1 ,[A]
I2 : LOAD R2 ,[B]
I3 : ADD R1 ,R2
I4 : STORE R2 ,[X] image.png
则这 4 条指令执行过程中,I3 的 ID 段被阻塞,I4 的 IF 段被阻塞原因各是什么?
(4) 若高级语言程序中,某赋值语句为 X=X*2+A ,X 和 A 均为 UNSIGNED INT 类型变量,它们的存储单元地址分别表示为 [X] 、[A] ,则执行这条语句至少需要多少时钟周期?要求模仿上图画出这条语句对应的指令序列及其在流水线中的执行过程示意图。
I1 LOAD R1,[X]
I2 LOAD R2,[A]
I3 SHL R1
I4 ADD R1,R2
I5 STORE R2,[X]
解析:
(1)
补码位数扩展 (移位):符号位不动,前面补符号位,后面补 0
-513=110 0000 0001=101 1111 1111=1111 1101 1111 1111
SHR 右移一位,1111 1110 1111 1111=FEFFH
(2)Tk=5t+(4-1)t=8t,即需要 8 个时钟周期
(3)I3 与 I1、I2 存在数据相关, I1、I2 的结果写到寄存器 R1、R2 后,I3 才能读寄存器 R1、R2 ,所以 I3 的 ID 段被 阻塞。先写后读。访存慢,寄存器读写快。 I3 的 ID 段被阻塞(因为 I3 占用 IF 部件, 资源相关 ),I4 不能完成取指,所以 I4 被阻塞
(4)image.png


21.(统考 2016-19) 在无转发机制的五段基本流水线 ( 取指、译码 / 读寄存器、运算、访存、写回寄存器) 中,下列指令序列存在 数据冒险 的指令对是 I1 :add R1 ,R2 ,R3 ;(R2)+(R3)→R1
I2 :add R5 ,R2 ,R4 ;(R2)+(R4)→R5
I3 :add R4 ,R5 ,R3 ;(R5)+(R3)→R4
I4 :add R5 ,R2 ,R6 ;(R2)+(R6)→R5
A.I1 和 I2
B.I2 和 I3
C.I2 和 I4
D.I3 和 I4
解析:
B.I2 还在 ID 时,I3 进入流水;I3WR 时,I2 在 EX,可能产生写后读
所以答案为 B


  1. 以下是一段 MIPS 指令序列:
    1 add t1,t0,t1 ; # t1 ← (t0)+(t1)
    2 lw t0,0(t1) ; # t0 ← ((t1)) 读后写 读到新的数据
    3 bne t0,s5,exit ; # if (t0)≠(s5) then go to exit 写后读 读出旧数据
    4 add s3,s5,s4 ; # s3 ← (s5)+(s4)
    5 exit:
    该指令序列采用流水线方式运行。其中 t0 、t1 、t2 、s3 、s4 、s5 均为通用寄存器,符号 “#” 后面的为注释,(X) 表示通用寄存器 X 的内容,((X)) 表示寄存器 X 的内容所指主存单元的数据。则以上 5 条指令序列中, 哪几个指令之间可能产生数据相关。
    A. 1 和 2 、2 和 3
    B. 1 和 2 、2 和 3 、3 和 4
    C. 1 和 2 、1 和 3
    D. 1 和 2 、1 和 3 、2 和 3
    解析:
    I2 要访存比 I3 慢,写后读,排除 C;3 和 4、1 和 3 无数据冲突,排除 BD
    所以答案为 A