一:指令周期的基本概念
(1)指令周期
CPU取出一条指令并执行该指令所需的时间称为指令周期。指令周期的长短与指令的复杂程度有关。
(2)CPU周期
指令周期常常用若干个CPU周期数来表示。
由于CPU内部的操作速度较快,而CPU访问一次主存所花的时间较长,因此通常用从主存读取一条指令的最短时间来规定CPU周期。CPU周期也称为机器周期。
(3)时钟周期
一个CPU周期包含有若干个时钟周期。时钟周期是处理操作的最基本时间单位,由机器的主频决定。一个CPU周期的时间宽度由若干个时钟周期的总和决定。
二:SEQ处理器流程:每个时钟周期执行一条完整的指令;所以它的时钟必须足够慢,以允许一个周期内完成所有的动作;
CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工,周而复始;其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数和结果写回;
1、取指令:CPU的控制器根据程序计数器中值从内存读取一条指令并放入指令寄存器。指令的格式一般是这个样子:
![](https://i-blog.csdnimg.cn/blog_migrate/f1a9b80fb3f7cd81550d3484a0bd3193.jpeg)
2、 指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
3、 执行指令,分两个阶段“取操作数”和“进行运算”。
4、 访存取数:有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。
此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算
6:更新PC值
三:流水线处理器
流水线化的一个重要的特征就是增加了系统的吞吐量,就是单位时间内服务多了;
如下图就是一个简单的非流水线化的硬件系统,它是由一些执行计算的逻辑记忆一个保存计算结果的寄存器组成,时钟信号控制在每一个特定的时间间隔加载寄存器;比如CD播放器中的译码器就是这样的系统,输入信号是从CD表面读出的位,逻辑电路对这些位进行译码,产生音频信号;图中的计算模块就是组合逻辑门来实现的,意味着信号经过一系列逻辑门,产出声音;
现在讲系统分为了三个阶段,每个阶段放上流水线寄存器,这样每条指令都会经过三步经过此系统,从头到尾需要三个时钟;
四:流水线的局限性
1:不一致划分 各个阶段划分不一致,比如下图,第一个阶段是50ps,第二阶段是150ps,第三阶段是100ps,通过所有阶段的延迟之和还是300ps,不过,运行时钟的速率是由最慢阶段的延迟限制的;下图流水线中,每个时钟周期,阶段A都会空闲;
2:流水线过深,收益反而下降 :寄存器更新会引起延迟
3:带反馈的流水线系统
相邻的指令之间都有数据相关(下一条指令会用到这一条指令计算出的结果),或控制相关(一条指令要确定下一条指令的位置,例如在执行跳转,调用,或返回指令;这些相关可能会导致流水线计算错误称为冒险;,这些相关都是由反馈路径来解决的,这些反馈将更新后的寄存器值向下传送寄存器稳重,更新的pc值传送到pc寄存器;
4:用暂停来避免数据冒险
暂停是避免冒险的一种常用技术,暂停时,处理器会停止流水线中的一条或多条指令,知道冒险条件不在满足;但会导致整体的吞吐量;
5:用转发来避免数据冒险 ---把结果值从一个流水线阶段传到较早阶段的技术为数据转发;