在Hamacher(着名的计算机组织书)中,指令处理被分为5个阶段,每个阶段以一个时钟周期运行。第一阶段是指令获取阶段,如下:
Stage 1--Memory address<--[PC], Read memory, IR<--Memory data, PC<--[PC] + 4
Stage 2--Decode instruction, RA [R4], RB [R5]
Stage 3--RZ [RA] + [RB]
Stage 4--RY [RZ]
Stage 5--R3 [RY]
我可以看到PC的增量可以使用组合ciucuits来完成,但经过这么多的努力无法找到内存读取,PC对内存地址寄存器的分配和IR中的指令加载都可以在一个时钟周期完成。
答案 0 :(得分:1)
首先,流水线操作的目的是减少CPU在一个周期内需要完成的工作量。当每个阶段花费大致相同的时间量时,流水线技术将是最有效的,但是不可避免地某个阶段将花费最长的时间并且这将决定处理器的最大频率。
所以这并不是一个问题,即取指令阶段的所有内容是否可以在1个周期内完成,而不是问题是这项工作是否需要相同的时间来完成其他周期。
5级流水线是一种经典设计,但目前大多数CPU都没有使用。大多数现代高性能CPU都有更多的流水线阶段。
我已经将下面列出的各个阶段与他们通常命名的内容进行了复制,我将用一个字母来引用它们。
Fetch --Memory address<--[PC], Read memory, IR<--Memory data, PC<--[PC] + 4
Decode --Decode instruction, RA [R4], RB [R5]
Execute --RZ [RA] + [RB]
Memory --RY [RZ]
Writeback --R3 [RY]
在Fetch阶段,CPU必须使用当前PC从内存中读取(通常读取指令缓存)。并行地,它可以具有计算下一台PC的ALU。在周期结束时,从存储器读取的数据被锁存在IR中,并且已经计算的下一个PC被锁存在PC中。所以这个循环实际上只需要足够的时间从指令缓存中读取并将结果存储在寄存器中。其他步骤并行完成,花费的时间更短。
Decode阶段接受指令并确定它是什么类型,并为指令在其余管道中的执行方式设置一堆控制逻辑。这包括确定哪些寄存器具有操作源并从这些寄存器读取值。还有其他一些方法可以检查指令之间的冲突。
在大多数情况下,Execute阶段实际执行操作(例如进行添加)。
Memory阶段与Execute是分开的,因为它可能依赖于Execute来计算加载/存储将访问的内存中的地址。
最后,Writeback阶段将最终结果写入寄存器文件。这取决于是否有前几个阶段的结果。
总的来说,每个阶段的工作量大致相等,而且很难将部分工作从一个阶段转移到另一个阶段。同样在现代系统中,这些阶段中的每一个通常进一步细分为更多阶段。但是,5阶段管道是了解流水线技术如何工作的良好起点,并且流程中的每个阶段都需要相似的时间,并且各阶段之间存在逻辑依赖性排序。