我们知道,CPU= 指令 + 运算。只有把“指令”和“运算”这两部分联通起来,才能构成一个完整的CPU
指令周期
计算机每执行一条指令的过程,可以分解成这样几个步骤:
- Fetch(取得指令):也就是从PC寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把PC寄存器自增,好在未来执行下一条指令。
- Decode(指令译码):也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是R、I、J中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址
- Execute(执行指令):也就是实际运行对应的R、I、J这些特定的指令,进行算术逻辑操作、数据传输和直接的跳转地址。
- 重复进行上面三个步骤
这样的步骤,其实就是一个永不停歇的Fetch-Decode-Execute的循环,我们把这个循环称之为指令周期。
在这个循环过程中,不同部分其实是由计算机中的不同组件完成的。
- 在取指令的阶段,指令是放在存储器里的。实际上,通过PC寄存器和指令寄存器取出指令的过程,是由控制器(control unit)操作的
- 指令解码的过程,也就由控制器进行的
- 一旦到来执行指令的计算,无论是算术操作、逻辑操作的R型指令,还是进行数据传输、条件分支的I型指令,都是有算术逻辑单元(ALU)操作的,也就是由运算器处理的
- 不过,如果是一个简单的无条件地址跳转,可以直接在控制器里面完成,不需要用到计算器
除了Instruction Cycle这个指令周期,在CPU里面还有两个常见的cycle。
- Machine Cycle,机器周期/CPU周期。
- CPU内部的操作速度很快,但是访问内存的速度却要慢很多。
- 每一条指令都需要从内存里面加载而来,所以一般把从内存里面读取一条指令的最短时间,叫做CPU周期
- Clock Cycle,时钟周期/主频
- 一个CPU周期,通常由几个时钟周期累积起来
- 一个CPU周期的时间,就是这几个clock cycle的总和
对于一个指令周期来说,我们取出一条指令,然后去执行它,至少需要两个CPU周期。取出指令至少需要一个CPU周期,执行至少也需要一个CPU周期,复杂的指令需要更多的CPU周期。
所以,一条指令周期,包含多个CPU周期;一个CPU周期,包括多个时钟周期
建立数据通路
一般来说,我们可以认为,数据通路就是我们的处理器单元。它通常由两类原件组成:
- 第一类叫做操作元件,也叫做组合逻辑元件件(Combinational Element),其实就是ALU。ALU的功能就是在特定的输入下,根据组合电路的逻辑,生成特定的输出
- 第二类叫做存储元件,也叫做状态元件(State Element)。比如我们在计算过程中需要用到的寄存器,无论是通用寄存器还是状态寄存器,其实就是存储元件
我们通过数据总线的方式,把它们连接起来,就可以完成数据的存储、处理和传输了,也就是所谓的建立数据通路了
控制器
我们可以把它看成只是机械的重复“Fetch - Decode - Execute“循环中的前两个捕捉,然后把最后一个步骤,通过控制器产生的控制信号,交给ALU去处理