我想我理解第一部分 (一世)。我至少有这个答案。对于第二部分,我不确定这个实现会失败的地方吗?第二部分让我完全难过。有谁知道这会失败的情况?
如果你想对第三部分有所启发,那么你将成为我整个班级的英雄。都被难住了。感谢您的任何意见。
MN-4363处理器的臭名昭着的架构师Tim FlimFlam正在努力实现基本MIPS ISA的流水线实现。
(i)为了实现转发,Tim将来自EX和MEM级的逻辑输出(这些逻辑输出分别代表EXMEM和MEMWB锁存器的输入)连接到IDEX寄存器的输入。他声称他将能够以这种方式掩盖任何依赖 •这种实施是否有效? •他是否需要插入任何多路复用器?解释为 1.生产者指令是一种负担 2.生产者指令属于R型。 3.消费者指令属于R型。 4.消费者指令是一个分支。 5.消费者指令是商店。
(ii)Tim声称转发到EX阶段只能覆盖所有依赖关系。 •提供两个实施失败的例子 •在这种情况下“失败”是否与破坏正确性约束相对应?
(iii)蒂姆试图确定管道阶段的最低信息量。考虑R型,数据传输和分支指令,解释每个流水线寄存器应该有多宽,划分每个锁存器的不同字段。
答案 0 :(得分:0)
不确定这是否迟到,但答案在于第2部分中的“所有依赖关系”。依赖关系/危害有多种类型,即控制,数据。一些数据危险可以通过转发来解决(从MEM&amp;&amp; WB阶段到执行阶段。其他数据危害如LOAD依赖性无法通过转发来解决。要了解为什么会发生这种情况,请注意MEM中的LOAD指令只有在该时钟周期结束时,stage才能从存储器中准备好输出。在同一个时钟周期,执行阶段中任何需要LOAD指令值的输入将得到不正确的值。在这种情况下,在时钟周期内的任何时刻说开始,alu开始执行而内存“开始”以获取数据。在周期结束时,当内存已完成获取数据时,alu也已完成为了防止危险,你需要alu在数据存储器完成读取时开始计算(即alu必须停止1个周期或者你必须在LOAD和ALU instrcution之间有一个nop。希望这有帮助!< / p>