计算机组成原理-CPU组成

1、指令周期

   计算机每执行一条指令的过程,可以分解成这样几个步骤。

    (1).Fetch(取得指令),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。

    (2).Decode(指令译码),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是 R、I、J 中的哪一种指令,具体要操作哪些寄存器、数据或者内存地址。

    (3).Execute(执行指令),也就是实际运行对应的 R、I、J 这些特定的指令,进行算术逻辑操作、数据传输或者直接的地址跳转。

    (4). 重复进行 1~3 的步骤。

    这样的步骤,其实就是一个永不停歇的“Fetch - Decode - Execute”的循环,这个循环称之为指令周期(Instruction Cycle)。

    在取指令的阶段,指令是放在存储器里的,通过 PC 寄存器和指令寄存器取出指令的过程,是由控制器操作的。指令的解码过程,也是由控制器进行的。一旦到了执行指令阶段,无论是进行算术操作、逻辑操作的 R 型指令,还是进行数据传输、条件分支的 I 型指令,都是由算术逻辑单元(ALU)操作的,也就是由运算器处理的。一个简单的无条件地址跳转,可以直接在控制器里面完成,不需要用到运算器。

 

2、数据通路

    数据通路就是处理器单元。它通常由两类原件组成。

    第一类叫操作元件,也叫组合逻辑元件(Combinational Element),就是 ALU。功能是在特定的输入下,根据下面的组合电路的逻辑,生成特定的输出。

    第二类叫存储元件,也有叫状态元件(State Element)的。比如计算过程中需要用到的寄存器,无论是通用寄存器还是状态寄存器,其实都是存储元件。

    通过数据总线的方式,把它们连接起来,就可以完成数据的存储、处理和传输了,这就是所谓的建立数据通路

3、控制器

    可以看成只是机械地重复“Fetch - Decode - Execute“循环中的前两个步骤,然后把最后一个步骤,通过控制器产生的控制信号,交给 ALU 去处理。

4、CPU需要的硬件电路

    1)ALU 这样的组合逻辑电路,实际就是一个没有状态的,根据输入计算输出结果的第一个电路。

    2) 用来存储数据的锁存器和 D 触发器电路,能够进行状态读写的电路元件,也就是寄存器。这个电路能够存储到上一次的计算结果。这个计算结果并不一定要立刻拿到电路的下游去使用,但是可以在需要的时候拿出来用。常见的能够进行状态读写的电路,就有锁存器、D 触发器电路。

    3)用来实现 PC 寄存器的计数器电路,需要有一个“自动”的电路,按照固定的周期,不停地实现 PC 寄存器自增,自动地去执行“Fetch - Decode - Execute“的步骤。

    4)用来解码和寻址的译码器电路,无论是对于指令进行 decode,还是对于拿到的内存地址去获取对应的数据或者指令,都需要通过一个电路找到对应的数据。

    这四类电路,通过各种方式组合在一起,就能最终组成功能强大的 CPU 了。

5、时序逻辑电路

    1)实现自动运行。时序电路接通之后可以不停地开启和关闭开关,进入一个自动运行的状态。

    2)通过时序电路实现的触发器,能把计算结果存储在特定的电路里面,而不是像组合逻辑电路那样,一旦输入有任何改变,对应的输出也会改变。

    3)解决了各个功能按照时序协调的问题。无论是程序实现的软件指令,还是到硬件层面,各种指令的操作都有先后的顺序要求。时序电路使得不同的事件按照时间顺序发生。

6、反馈电路

 

   看图,合上开关 A,磁性线圈就会通电,产生磁性,开关 B 就会从合上变成断开。一旦这个开关断开了,电路就中断了,磁性线圈就失去了磁性。于是,开关 B 又会弹回到合上的状态。这样一来,电路接通,线圈又有了磁性。电路就会来回不断地在开启、关闭这两个状态中切换。这个不断切换的过程,对于下游电路来说,就是不断地产生新的 0 和 1 这样的信号。如果在下游的电路上接上一个灯泡,就会发现这个灯泡在亮和暗之间不停切换。这个按照固定的周期不断在 0 和 1 之间切换的信号,就是时钟信号(Clock Signal)。这种电路,其实就相当于把电路的输出信号作为输入信号,再回到当前电路。这样的电路构造方式,叫作反馈电路(Feedback Circuit)。

7、程序计数器

    时钟信号提供定时的输入; D 型触发器可以在时钟信号控制的时间点写入数据。把这两个功能组合起来,就可以实现一个自动的计数器了。加法器的两个输入,一个始终设置成 1,另外一个来自于一个 D 型触发器 A。加法器的输出结果,写到这个 D 型触发器 A 里面。于是,D 型触发器里面的数据就会在固定的时钟信号为 1 的时候更新一次。这样就有了每过一个时钟周期,就能固定自增 1 的自动计数器了。这个自动计数器,可以拿来当PC 寄存器。也就是程序计数器(Program Counter)。

    每次自增之后,可以去对应的 D 型触发器里面取值,这也是下一条需要运行指令的地址。加法计数、内存取值,乃至后面的命令执行,最终其实都是由时钟信号,来控制执行时间点和先后顺序的,这也是需要时序电路最核心的原因。

8、译码器

   来完成“寻址”的电路,就是译码器。在现在实际使用的计算机里面,内存所使用的 DRAM,并不是通过上面的 D 型触发器来实现的,而是使用了一种 CMOS 芯片来实现的。还是可以把内存芯片,当成是很多个连在一起的 D 型触发器来实现的。

    通过一个反相器、两个与门和一个或门,就可以实现一个 2-1 选择器。通过控制反相器的输入是 0 还是 1,能够决定对应的输出信号,是和地址 A,还是地址 B 的输入信号一致。译码器的本质,就是从输入的多个位的信号中,根据一定的开关和电路组合,选择出自己想要的信号。

9、构造CPU过程

  D 触发器、自动计数以及译码器、 ALU,凑齐了一个拼装一个 CPU 必须要的零件了。

 

    1)自动计数器,这个自动计数器会随着时钟主频不断地自增,来作为 PC 寄存器。

    2)译码器,连在计数器后面。译码器还要同时连着内存(通过大量的 D 触发器组成的)。

    3)自动计数器会随着时钟主频不断自增,从译码器当中,找到对应的计数器所表示的内存地址,然后读取出里面的 CPU 指令。

    4)读取出来的 CPU 指令会通过CPU 时钟控制,写入到一个由 D 触发器组成的寄存器,也就是指令寄存器当中。

    5)在指令寄存器后面,再跟一个译码器。这个译码器是把拿到的指令,解析成 opcode 和对应的操作数。

    6)opcode 和操作数,对应的输出线路就要连接 ALU,开始进行各种算术和逻辑运算。对应的计算结果,则会再写回到 D 触发器组成的寄存器或者内存当中。

 

猜你喜欢

转载自www.cnblogs.com/pangchunlei/p/12408033.html