some trivial modifications.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
|
||||
指令部分首先要关注的点是指令的设计,即如何合理组织`操作码`(opcode),使它代表不同长度的各种指令,本质上就是一个编码的问题。此外要了解具体的`MIPS`指令集的三种指令类型,即`R`型,`I`型,`J`型指令,它们各自的格式,以及实例。还需要关注一个`寻址方式`的问题。
|
||||
|
||||
不同的指令执行的步骤也不相同,不过大体上还是存在一些共性,比如都存在`取指`(Instruction Fetch),`指令译码`(Instruction Decode)操作。可以将`MIPS`指令集的指令都划分为五个基本操作,除了上面两个以外,还有`指令执行EXE`,`存储器读写MEM`,以及`结果写回`(Write Back)。在此基础上,可以给出`单周期CPU`的设计方案,即每条指令都执行一个时钟周期(`CPI = 1`),时钟周期与执行时间最长的指令一直,并且将一个时钟周期划分为上述五个子段,分别执行相应的功能。控制信号在`指令译码`阶段全部给出,并且在整个时钟周期内保持。`单周期CPU`控制器的设计方案如下图所示:
|
||||
不同的指令执行的步骤也不相同,不过大体上还是存在一些共性,比如都存在`取指`(Instruction Fetch),`指令译码`(Instruction Decode)操作。可以将`MIPS`指令集的指令都划分为五个基本操作,除了上面两个以外,还有`指令执行EXE`,`存储器读写MEM`,以及`结果写回`(Write Back)。在此基础上,可以给出`单周期CPU`的设计方案,即每条指令都执行一个时钟周期(`CPI = 1`),时钟周期与执行时间最长的指令一致,并且将一个时钟周期划分为上述五个子段,分别执行相应的功能。控制信号在`指令译码`阶段全部给出,并且在整个时钟周期内保持。`单周期CPU`控制器的设计方案如下图所示:
|
||||
|
||||

|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
在指令集比较大的时候,`单周期CPU`的效率会比较低下,这是因为此时不同指令执行所需要的时间往往有很大差异,在`单周期CPU`中,所有指令的执行时间都与最长的指令相同。为了解决这个问题,产生了`多周期CPU`的设计方案,即指令的每一个阶段都执行一个时钟周期,不同的指令具有不同的时钟周期数,例如`jump`指令只需要两个时钟周期,而`lw`执行需要五个时钟周期。
|
||||
|
||||
容易看到,`多周期CPU`设计的难点在于一个时序的问题,即在指令执行的不同周期内,需要给到数据通路不同的控制信号。这里有两种实现方法,一种是`硬布线控制器`,它是通过引入一个`节拍发生器`来指示当前指令执行到了哪一个阶段,所以控制信号是`操作码`和`节拍`的函数,通过复杂的组合逻辑电路来实现。另一种方案是`微程序控制器`,它是将控制信号全部存储在`控制存储器`当中,通过`微指令`和`下地址逻辑`来给出当前阶段的控制信号。需要关注一下`多周期CPU`的各条执行的`有限状态机`。
|
||||
容易看到,`多周期CPU`设计的难点在于一个时序的问题,即在指令执行的不同周期内,需要给到数据通路不同的控制信号。这里有两种实现方法,一种是`硬布线控制器`,它是通过引入一个`节拍发生器`来指示当前指令执行到了哪一个阶段,所以控制信号是`操作码`和`节拍`的函数,通过复杂的组合逻辑电路来实现。另一种方案是`微程序控制器`,它是将控制信号全部存储在`控制存储器`当中,通过`微指令`和`下地址逻辑`来给出当前阶段的控制信号。需要关注一下`多周期CPU`的各条指令的`有限状态机`。
|
||||
|
||||
实际上,无论是`单周期CPU`还是`多周期CPU`,它们的元件利用率都还有很大的提升余地,一个洗衣房的例子可以很好地说明`流水线`的优势,`流水线`的本质是`时间并行`,而非`空间并行`,后者是指同时存在多套硬件系统并行运行。`流水线`将一个指令的执行过程划分为若干个`流水级`(piped stages),流水级的长度需要与最耗时的操作一致,在这个方面`流水线`是类似于`多周期CPU`的,即每一条执行的执行都需要多个周期;但是为了避免`结构冲突`,不同的指令的流水级数仍然是相同的,这个方面`流水线`类似于`单周期CPU`。`流水线`实现的难点在于任一时刻,数据通路的不同部件是在执行不同的指令,因此需要给到不同执令的控制信号,因此需要设置`流水线寄存器`来传递这些控制信号,除此以外还要传递各条执行的参数,目标操作数,中间结果等。`流水线`实现的关键就在于`流水线寄存器`。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user