文章前言五级流水线冒险/冲突(Hazards/Conflict )控制单元模块调度系列目录
前言
在前一章的单周期设计和多周期设计章节中提到了两种微体系结构模型。 本章介绍了基本流水线的工作原理、控制电路的形式以及功能模块的调度。
在开始本章之前需要复习计算机性能的指标。 指标很简单。 对应程序的长度除以执行所需的时间。 在这里程序长度的定义不明确,所以通常不会直接使用这个表达式。 实际上,我们寻找并参考基准和基准程序,让新计算机也运行此基准程序以获得新计算机的运行时间,并将其比值作为相对指标。 这种方法能比较准确地反映机器的实际性能,但不适合引导我们进行设计。 因为至少要先做原型/模拟器再做这个测试。 通常,使用instructionpercycle(IPC )近似表示机器的理想工作性能。
5级流水线在上一章末尾的多周期设计中发现,最长一个指令按照五个不同的小任务顺序执行。 这些任务的名称分别为取指,译码,计算,访存,写回在理想状态下,任何两个指令都是独立的,互不影响的,因此可以看到这五个步骤正好互不相关。 这样,一个指令不必占用所有功能单元,相反,五个不同的指令可以分别占用所需的模块,从而获得加速效果。
这里有误会。 在五阶段流水线中,每个指令执行五个周期,而在多循环机器中,只有最长的指令执行五个周期。 这不是更慢吗? 考虑到从指令n结束到指令n 1结束的时间,可以看出多循环机器至少需要3个循环,流水线机器只使用了1个循环。
当然这里的时钟周期是最长任务所需的时间。
冒险/冲突(Hazards/Conflict )在实际程序中,指令并不是完全无关的。 例如,情况如下:
跳转命令前后的命令使用共同数据的命令,使用共同结构的命令。 这三种情况分别对应。
出现“控制碰撞/冲突”(数据碰撞/结构碰撞)“结构碰撞”(Structrual Hazards/Conflict )这三种情况意味着指令不断地管道以下所有章节都是为了减轻这三个问题的影响。
控制单元的流水线和多周期设计有很大的区别。 管线中指令之间的距离是空间的,多周期设计是时间的。 换言之,流水线的控制信号逐级变化,而多周期的控制信号逐时间变化。
可以看出,在管线的各个阶段都会产生控制信号。 一种巧妙的方法是在解码时生成与指令操作相关的所有信号,只向下一级传递尚未使用的信号。
除了控制操作的信号以外,管线还存在各种冲突,因此也需要生成控制指令流程的信号。 这需要能够跨不同级别检查冲突的逻辑电路,以控制流水线寄存器中数据的行为。 是暂停(Stall )、冲洗(flushing )还是正常流程
在模块调度中,不仅刚才提到的全局控制电路跨越模块,而且一些电路也跨越不同的流水线级。 例如,有以下电路:
寄存器堆(Register File )内存(memory )在这里可以看到结构硬件。寄存器堆会在译码级读,写回级写。内存会在取指级读,访存级读写
nameofmoduleifidexmemwbregisterfile-- r-- wdatamemoryr-- w/r--可见对内存的访问与指令读取冲突。 除了暂停和优先访问指访问这一解决方案外,还可以复制端口/内存以提高内存模块的吞吐量并满足要求。