2012-12-30 120 views
6

我需要多少个摊位才能正确执行以下说明。我对我所做的有点困惑,所以我在这里看到专家的答案。装配流水线

lw $1,0($2); 

beq $1,$2,Label; 

请注意,检查分支是否会发生将在解码阶段完成。但是在这种情况下$ 1的beq的源寄存器rs将在lw指令的写回阶段后更新。所以我们需要在存储器阶段将新数据从存储器转发到beq指令的解码阶段。

阶段是这样的:

enter image description here

IF:指令的读取; ID:指令解码 例如:执行/ ALU阶段 MEM:在目的地存储数据寄存器

这是我迄今所做的:从内存 WB读取数据。

当lw处于执行阶段并且在解码阶段beq时,失速条件变为真并且产生气泡。现在lw处于Mem阶段,由于气泡,beq仍处于解码阶段,失速状态再次变为真,第二个失速发生。现在lw处于WB(写回)状态,beq处于解码阶段,但仍然是数值1美元将在WB阶段结束时更新,这最终意味着beq仍然会以1美元的错误价值工作。

+0

“检查分支是否会发生” - 您的意思是检查。根据http://www.csc.gatech.edu/~copeland/3055-00/lab/lab-2/MIPS_pipes.JPEG分支在EX中完成;并且新的PC被转发到MEM的PC寄存器。 – osgx

+0

由于延迟分支,您需要添加1个额外的摊位。所以你需要7个摊位。 – Blood

+0

它如何成为7档?最多的摊位可以是2 – Alfred

回答

2

看起来您需要第三个暂停以允许在解码之前将寄存器写回寄存器文件,或将数据从写回阶段转发到解码阶段。无论哪种方式,如果要写入的寄存器等于rs,则应该执行该操作。

你似乎是因为在解码阶段,这是良好的早期检测的分支,因为它节省了获取这无论如何都会被清空不必要的指令,需要太多的摊位,但你必须有正确的危险探测去这一点。

+0

好。那就是我所想的。我和我的教授发生了争执,他说我只需要两个摊位,而不是为了上面的情况而回信。这就是我感到困惑的原因 – Alfred

+0

@Alfred你的教授可能假设寄存器文件是异步的,它会在下一个时钟之前更新,但这可能不是你正在使用或想要使用的内存类型。 – iabdalkader