绘制5阶段管道图时,如何绘制数据依赖性等待?

时间:2017-01-02 08:11:05

标签: pipeline cpu-architecture

绘制5阶段管道图时如何绘制数据依赖性等待?我的回答是否正确?

说明

1. ADD X, Y, Y
2. ADD Z, Y, X
3. SUB V, X, W
4. ADD Z, Z, V

这是管道图

Pipeline diagram

我的管道图是否正确?

1 个答案:

答案 0 :(得分:0)

我假设指令格式为op <dest>, <src1>, <src2>

我们可以明确跟踪依赖

1. ADD X, Y, Y    Depends on: Y     Produces: X
2. ADD Z, Y, X    Depends on: Y, X  Produces: Z
3. SUB V, X, W    Depends on: X, W  Produces: V
4. ADD Z, Z, V    Depends on: Z, V  Produces: Z

知道没有操作数转发,并且指令 i 只能在 j <之后读取指令 j 的结果/ em>完成 WR 阶段。

ADD X, Y, Y取决于 Y ,但没有指令产生它,它已经准备好了。因此,它可以在获取和解码后立即开始执行 所以它从第1周期开始,到第5周结束

Pipeline until instruction 1

一旦获取单元空闲,就会取出

ADD Z, Y, X,这发生在第2周期。然后在解码单元释放后立即解码,在第3周期。 它不能在第4周期之后立即执行,因为它取决于 Y X ,后者由指令1产生,因此仅在第6周时可用。 /> 注意这里停止的阶段不是 IF 而是 ID 。正是这个阶段无法在下一个阶段移动数据。想象一下,每个舞台之间都有一个锁扣 IF 可以在下一个周期开始获取新指令,但它无法完成(即必须停止),直到 ID 被允许写入其输出(否则输入< em> ID 会改变,输出也会改变。

Pipeline until instruction 2

SUB V, X, W可以在周期3获取,因为指令2的获取在周期3结束,因此获取单元是空闲的。
但是,获取单元无法将结果写入其自身与解码单元之间的锁存器中,因为解码单元已停止并且必须保持其当前输入值(或解码将改变)。 因此,取出也必须停止,直到解码单元在周期6写入其输出锁存器 因此,解码可以在周期6开始 该指令取决于 X W ,前者在第6周期可用,后者在第1周期可用;因此 EX 可以在 ID 之后开始,即在第7周。

Pipeline until instruction 3

当获取单元将其结果写入解码单元的锁存器时,

ADD Z, Z, V可以在周期6开始取出。
执行只能在第10周期开始,因为该指令取决于指令3在周期10产生的 V
Z 的依赖性不是问题,因为此数据在第9周可用。

Pipeline until instruction 4