2013-07-31 24 views
1

我刚刚触及pipeline理论几个小时。也许这是一个简单的问题,但我真的需要你的帮助。我们为什么要将NPC存储在管道注册表中?

我知道我们应该存储mem[pc]IF/ID流水线寄存器中读取阶段,我们将在下一阶段对其进行解码,还应该更新获取阶段,我们将通过该更新PC下一个周期feteh下一条指令PC,但我真的不明白为什么我们也应该把NPC存入管道注册表。

下面

Computer Organization and Design衍生的解释,我不明白这一点。

This incremented address is also saved in the IF/ID pipeline register in case it is needed later for an instruction, such as beq

回答

3

原因在管道节省NPC是因为有时在管道中的下一个指令将要使用它。

看那beq定义。它必须计算分支的目标地址。有些分行使用目标地址的固定位置,如“分行至地址A”。这被称为“分支到绝对地址”。

另一种分支的是一个“相对”分支,在该分支目标不是绝对的地址,但偏移,即“分支向前X指令。” (如果X是负数,则最终成为后向分支。)现在考虑这一点:从哪里前进/后退?来自NPC。也就是说,对于一个相对分支指令,新的PC值的计算是:

NewPC = NPC + X 

为什么架构包括执行相对转移的能力吗?因为它占用更少的空间。让我们说,X具有一个小的值,像16,一种用于一个绝对分支到目标地址所需要的存储是:

sizeof(branch opcode) + sizeof(address) 

但对于偏移16的相对分支存储只有:

sizeof(branch opcode) + 1  ## number of bytes needed to hold the value 16! 

当然,可以通过增加用于保存偏移值的字节数来适应更大的偏移量。其他类型的节省空间,增加范围的表示也是可能的。

0

如果异常点位于分支延迟槽中,则需要两台PC重新启动执行: 指向异常指令(延迟槽),另一个指向下一条指令。第二台PC需要 ,因为延迟时隙后面的指令可能是下一个 顺序指令(如果分支未被采用)或分支目标(如果分支被采用)。 尽管MIPS具有相同的问题,但在重新启动执行之前,它依靠软件将异常点备份到先前的 指令(当它是分支时)这是可行的,因为分支机构是 idempotent。

Credits:http://www.cs.berkeley.edu/~kubitron/courses/cs252-S09/handouts/oldquiz/sp09-quiz1_soln.pdf

相关问题