课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间
目录
一、建立数据通路
(一)组合逻辑电路
1、指令周期
- Fetch(取得指令):从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。
- Decode(指令译码):根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J 中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址。
- Execute(执行指令):实际运行对应的 R、I、J 这些特定的指令,进行算术逻辑操作、数据传输或者直接的地址跳转。
- 重复进行 1~3 的步骤。
除了 Instruction Cycle,在 CPU 里还有另外两个常见的 Cycle。一个叫 Machine Cycle,机器周期或者 CPU 周期。CPU 内部的操作速度很快,但是访问内存的速度却要慢很多。每一条指令都需要从内存里面加载而来,所以我们一般把从内存里面读取一条指令的最短时间,叫作 CPU 周期。还有一个是Clock Cycle,也就是时钟周期以及机器的主频。一个 CPU 周期,通常会由几个时钟周期累积起来。一个 CPU 周期的时间,就是这几个 Clock Cycle 的总和。
2、数据通路
数据通路就是处理器单元,通常由两类原件组成:
第一类叫操作元件,也叫组合逻辑元件(Combinational Element),就是 ALU。ALU的功能就是在特定的输入下,根据下面的组合电路的逻辑,生成特定的输出。
第二类叫存储元件,也有叫状态元件(State Element)的。比如我们在计算过程中需要用到的寄存器,无论是通用寄存器还是状态寄存器,其实都是存储元件。
通过数据总线的方式,把它们连接起来,就可以完成数据的存储、处理和传输了,这就是所谓的建立数据通路。
控制器会重复“Fetch - Decode - Execute“循环中的前两个步骤,然后把最后一个步骤,通过控制器产生的控制信号,交给 ALU 去处理。
3、CPU所需硬件电路
- 首先需要ALU,它是一个没有状态的,根据输入计算输出结果的第一个电路。
- 第二,需要有一个能够进行状态读写的电路元件,也就是寄存器,能够存储到上一次的计算结果。
- 第三,需要有一个“自动”的电路,按照固定的周期,不停地实现 PC 寄存器自增,自动地去执行“Fetch - Decode - Execute“的步骤。
- 第四,需要有一个“译码”的电路。无论是对指令进行 decode,还是根据内存地址获取对应的数据或者指令,都需要通过一个电路去寻找数据。
CPU在空闲状态就会停止执行,具体来说就是切断时钟信号,CPU的主频就会瞬间降低为0,功耗也会瞬间降低为0。由于这个空闲状态是十分短暂的,所以你在任务管理器里面也只会看到CPU频率下降,不会看到降低为0。当CPU从空闲状态中恢复时,就会接通时钟信号,这样CPU频率就会上升。所以你会在任务管理器里面看到CPU的频率起伏变化。
(二)时序逻辑电路
1、时序逻辑电路可以解决的问题
- 自动运行问题。时序电路接通之后可以不停地开启和关闭开关,进入一个自动运行的状态,使得我们上一讲说的,控制器不停地让 PC 寄存器自增读取下一条指令成为可能。
- 存储问题。通过时序电路实现的触发器,能把计算结果存储在特定的电路里面,而不是像组合逻辑电路那样,一旦输入有任何改变,对应的输出也会改变。
- 各个功能按照时序协调。无论是程序实现的软件指令,还是到硬件层面,各种指令的操作都有先后的顺序要求。时序电路使得不同的事件按照时间顺序发生。
二、面向流水线的指令设计
(一)现代处理器的流水线设计
CPU 的指令执行过程,是由各个电路模块组成的。取指令的时候,需要一个译码器把数据从内存里面取出来,写入到寄存器中;指令译码的时候,需要另外一个译码器,把指令解析成对应的控制信号、内存地址和数据;到了指令执行的时候,需要的则是一个完成计算工作的 ALU。