我正在阅读计算机组织和设计中的第 4.7 节:数据转发的硬件/软件接口(interface)。书中给出的例子中,有寄存器文件转发。(书中就是这样写的example)
为什么需要注册文件转发?寄存器中的数据在前半个时钟写入,在后半个时钟读取,所以不用转发应该是安全的。
只是为了阐明上面链接中给出的示例:Reg
的左侧阴影表示它被写入,右侧 - 被读取。
谢谢!
最佳答案
您需要寄存器文件转发以防止停顿。
如果仔细观察第二条指令(和$12、$2、$5
)需要使用寄存器$2
,但是在前一条指令()中计算的值sub $2, $1, $3
) 将在时钟周期 5 中写回到寄存器文件中。因此,如果不是因为寄存器文件转发,第二条指令将不得不暂停,直到寄存器 $2
被写回。转发在指令 1 的 ALU 运算结果和指令 2 的 ALU 运算的第一个参数之间用天蓝色线显示。
同样,第三条指令(或$13、$6、$2
)在第一条指令实际写回寄存器文件之前也需要使用$2。因此,再次为了防止停顿,寄存器转发用于将第一条指令的结果用作第三条指令的参数。
另一方面,第四条指令(add $14, $2, $2
)不需要使用流水线寄存器转发,因为第一条指令的结果在前半段写回周期 5,因此当第四条指令需要时,它的内容已经更新。
关于cpu - MIPS 中的注册文件转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354606/