第4-6章 指令系统,CPU,流水线
一、指令系统设计
-
指令结构与设计思想
-
操作码:指定操作类型 (操作码长度:固定/可变)
-
源操作数或其地址:一个或多个源操作数所在的地址 (操作数来源:主(虚)存/寄存器/I/O端口/指令本身)
-
结果的地址:产生的结果存放何处(目的操作数) (结果地址:主(虚)存/寄存器/I/O端口)
-
下一条指令地址:下条指令存放何处(下条指令地址 :主(虚)存的地址) (正常情况隐含在PC中,改变顺序时由指令给出)
-
指令格式设计的几个基本原则
-
应尽量短
-
要有足够的操作码位数
-
指令编码必须有唯一的解释,否则是不合法的指令
-
指令字长应是字节的整数倍
-
合理地选择地址字段的个数
-
指令尽量规整
-
-
-
寻址
-
概念:指令或操作数地址的指定方式。
-
指令中的地址码编码由操作数的寻址方式决定
-
地址码编码的三个原则:
- 地址码尽量短
- 操作数存放位置灵活,空间应尽量大
- 地址计算过程尽量简单
-
指令的寻址方式----简单
- 顺序执行:PC增值
- 跳转 ( jump / branch / call / return ):与操作数的某些寻址方式相同
-
操作数的寻址方式----复杂(想象一下高级语言程序中操作数情况多复杂)
- 操作数来源:寄存器 / 主(虚)存 /外设端口 / 栈顶
- 操作数结构:位 / 字节 / 半字 / 字 / 双字 / 一维表 / 二维表 /…
-
通常寻址方式特指“操作数的寻址”
-
八种寻址方式
-
偏移寻址
-
相对寻址:指令地址码给出一个偏移量(带符号数),基准地址隐含由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机器不提供自动变址寻址,并将变址和基址寻址统一成一种偏移寻址方式。
-
-
-
操作码编码
-
操作码的编码的两种方式
-
Fixed Length Opcodes (定长操作码编码)
- 指令的操作码部分采用固定长度的编码
- 例如:设操作码固定为6位,则系统最多可表示64种指令
- 特点:译码方便,但可能有信息冗余。
-
Expanding Opcodes (扩展操作码编码,也叫变长操作码编码)
-
-
选择依据
- 代码长度更重要时:采用变长指令字、变长操作码
- 性能更重要时:采用定长指令字、定长操作码
- 变长指令字和变长操作码使机器代码更紧凑;定长指令字和定长操作码便于快速访问和译码。
-
-
条件测试方式
- 无符号数A-B>0的条件:ZF=0 && CF = 0
- 有符号数A-B>0的条件:ZF=0 && SF = OF
- 如果OF=0,显然应该有SF=0
- 如果OF=1,只能是上溢出,此时有SF=1
-
指令系统设计风格
-
操作数指定方式
-
复杂指令集计算机CISC与精简指令集计算机RISC
-
二、程序的机器级表示 :MIPS
-
MIPS指令格式
-
所有指令都是32位宽(字长)
-
按字地址对齐存储,字地址为4的倍数
-
有R型、I型和J型三种指令格式
-
R型指令
-
I型指令
-
J型指令
-
-
-
寻址方式
-
掌握MIPS计算机的R型、I型和J型三种指令格式。
(1)清楚RR型指令、移位指令、寄存器跳转指令三种类型指令格式的区别和特点;R型指令采用了什么寻址方式?
(2)I型指令可能会出现寄存器寻址、立即数寻址、相对寻址和偏移寻址(基址或变址)几种寻址方式,这些寻址方式在每条指令都会出现吗?I型指令有哪些类型的指令?(双目运算、分支、存储访问),掌握分支型和存储访问型指令的地址形成方法、双目运算型指令中对立即数的扩展方法。
(3)J型指令中会出现哪些寻址方式?掌握J和Jal两条指令的功能
-
汇编与反汇编
-
高级语言语句的汇编指令表示
三、单周期数据通路的设计
-
数据通路
-
操作元件
-
存储元件
-
特点:具有存储功能,在时钟控制下输入被写到电路中,直到下个时钟到达。输入端状态由时钟决定何时被写入,输出端状态随时可以读出。
-
定时方式:边沿触发。在时钟上升/下降沿读写。
-
Setup/Hold/Clock-to-Q
-
分类:
-
寄存器(组)
-
理想存储器
-
-
-
时序控制
-
总线式数据通路
-
单总线
-
三总线
-
-
单周期MIPS处理器数据通路
-
设计步骤
-
取值部件
-
R型指令
-
I型指令
-
lw指令
-
sw指令
-
B型指令
-
下地址部件
-
J型指令
-
完整数据通路
-
关键路径
熟练掌握课件中的最基本的7条指令执行时数据通路中信息的流动过程,以及在取指令部件中的信息处理,包括元件的连接和所需要的各种控制信号的取值等。同时也能够在前述基本结构上扩展指定功能和格式的一些指令。
-
四、单周期控制器的设计
-
运算器的功能是如何控制的?
- ALU局部控制器是为R型指令产生ALU的控制信号,其输入为func字段;
- 主控制器产生非R型指令的所有控制信号,以及R型指令的除ALU控制信号外的其他控制信号,其输入为op字段;
- 将主控制器产生的ALU控制信号与ALU局部控制器的输出信号通过一个多路选择器合并后作为最终的ALU控制信号。多路选择器的选择信号(R-Type)由主控制器产生。
-
掌握指令译码的基本原理,OP和func字段如何与指令功能对应?
- R型指令:所有指令的op字段都为000000,各指令的func字段用来产生ALU的控制信号,决定执行的操作(加、减、逻辑与…),其它数据通路的控制信号各指令都相同(仅考虑三寄存器操作数)。
- 其他类型指令:没有func字段,各指令的op字段不同,它产生包括ALU的所有数据通路的控制信号。
-
明白每个控制信号与指令译码的对应关系。
-
ALU控制信号
-
总表(附数据通路)
- 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。
-
-
单周期CPU的周期长度是由什么指令、哪些因素决定的?
-
通过分析每条指令的执行过程,明确所传输和处理的信息的流动路径,然后根据各个部件的延时(操作元件的延迟或存储元件的三个时间setup time、hold time和clock to Q time)算出指令执行所必需的最短时间。
- give up
五、微程序控制原理
-
微程序控制器的基本思想和结构
-
仿照程序设计的方法,编制每条指令对应的微程序
-
每个微程序由若干条微指令构成,一条微指令包含若干个微命令
-
所有指令对应的微程序放在只读存储器中,执行某条指令就是取出对应微程序中的各条微指令,对微指令译码产生对应的微命令(即控制信号)。
-
这个只读存储器称为控制存储器(Control Storage),简称控存CS 。
-
-
比较硬连线控制器和微程序控制器的优缺点。
- 硬连线控制器
- 优点:速度快,适合于简单或规整的指令系统,例如,MIPS指令集。
- 缺点:设计周期长、繁琐、不灵活、不易修改和增删指令
- 微程序控制器:简化设计、灵活、易修改、易维护,但速度慢。
- 硬连线控制器
-
指令、微程序、微指令、微命令、微操作它们之间的关系
-
了解水平型微指令和垂直型微指令的概念
-
水平型微指令
- 基本思想:相容微命令尽量多地安排在一条微指令中。
- 优点:微程序短,并行性高,适合于较高速度的场合。
- 缺点:微指令长,编码空间利用率较低,并且编制困难。
-
垂直型微指令
-
基本思想:一条微指令只控制一、二个微命令。
-
优点:微指令短,编码效率高,格式与机器指令类似,故编制容易。
-
缺点:微程序长,一条微指令只能控制一、二个操作,无并行,速度慢。
-
-
六、异常和中断处理
-
异常和中断(外部)的区别
-
*处理机制
-
掌握计算机中对异常/中断的软件识别(MIPS计算机)和硬件识别这两种不同方式的基本过程。
- 软件识别(MIPS采用)
- 设置一个异常状态寄存器(MIPS中为Cause寄存器),用于记录异常原因。
- 操作系统中有一个统一的异常处理程序,该程序按优先级顺序查询异常状态寄存器的各位,识别出异常事件。
- 例如:MIPS中位于内核地址0x8000 0180处有一个专门的异常处理程序,用于检测异常的具体原因,然后转到内核中相应的异常处理程序段中进行具体的处理。
- 硬件识别(向量中断)(80x86采用)
- 用专门的硬件查询电路按优先级顺序识别异常,得到“中断类型号”,根据此号,到中断向量表中读取对应的中断服务程序的入口地址。
- 软件识别(MIPS采用)
七、流水线数据通路和控制
-
单周期指令模型与流水模型的性能比较:
-
单周期指令模型下时钟周期如何确定?
-
流水模型下时钟周期如果确定?
-
为什么流水线方式下单条指令执行时间不能缩短,但能大大提高指令吞吐率?
-
-
具有哪些特征的指令集有利于流水线执行?(四个特征)
-
能对常见的7条指令的各个流水阶段的划分及其所使用的功能部件情况进行分析。
- give up
-
对于五阶段流水线数据通路,能分析7条指令执行时的各流水段寄存器存储了哪些信息。
八、流水线冒险处理
-
什么是流水线冒险,它分为哪些类型?
- 在指令流水线中,当遇到某些情况使得流水线无法正确执行后续指令,而引起流水线阻塞或停顿,这个现象称为流水线冒险。
- 根据引起冒险的原因不同,分为结构冒险、数据冒险和控制冒险三种。
-
结构冒险的现象是什么?如何处理结构冒险?
- 一个部件同时被不同指令所用,即在使用硬件资源时发生了冲突。
- 处理方法
- 每个部件安排在特定的阶段使用
- 将Instruction Memory (Im) 和 Data Memory (Dm)分开
- 将寄存器读口和写口独立开来
-
数据冒险的现象是什么?对给出一个指令序列,能分析会在哪里产生了冒险现象。
-
后面指令用到前面指令结果时,前面指令的结果还没产生。
-
解决方法
-
方法1:硬件阻塞(stall)
- 控制比较复杂,需要改数据通路;指令被延迟三个时钟执行。
-
方法2:软件插入“NOP”指令
- 浪费三条指令的空间和时间。好处是无需修改数据通路。
-
方法3:同一周期内寄存器组先写后读
-
方法4:转发(Forwarding或Bypassing 旁路)技术(注意load-use需要一个nop)
-
方法5:编译优化--调整指令顺序(不能解决所有数据冒险)
-
-
-
控制冒险的现象是什么?了解常见的四种处理方法。
-
现象
-
解决
-