2016-07-10 34 views
0
   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | | 
SUB R4,R1,R3 | | IF | ID | EX | MA | WB | | | | | | 
AND R6,R1,R7 | | | IF | ID | EX | MA | WB | | | | | 
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | | 
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | | 

所以我明白,看这个所有后续指令取决于R1值被写入。所以要解决这个问题,我需要插入摊位。MIPS指令时序和固定危险

AFTER (Using Stalls) 
       | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | | 
SUB R4,R1,R3 | | IF | ID | * | * | EX | MA | WB | | | | 
AND R6,R1,R7 | | | IF | ID | EX | MA | WB | | | | | 
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | | 
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | | 

这样做还是需要在内存访问发生后插入另一个停顿?

如果我使用转发,时间会是什么样子?我怎么做?

+0

AFAICT,'SUB'档位直到后期才会启动。它会在'T2'处做'IF',因为它甚至不知道它需要一个摊位,直到在'T3'处的'ID'之后。也就是说,'SUB'应该看起来像' - IF ID * * EX MA WB',因为它只是'SUB'的'EX',必须停止到'T6'(在ADD的'WB'后面]在'T5')。其他指令的“IF”和“ID”没有任何延迟,所以它们也“按期”启动。如果您同意,我会在继续分析之前修改第二个图表。 –

+0

我认为,我提出了建议。那是你在说什么? – brandenwagner

+0

关闭。现在重复其他人。 “IF”和“ID”不会失速,所以他们会进入正常的位置。因此,'AND'的'IF'是'T3'(_not_'T5')等等...... –

回答

0

摊位,时间是这样的:

   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | | 
SUB R4,R1,R3 | | IF | ID | * | * | EX | MA | WB | | | | 
AND R6,R1,R7 | | | IF | ID | * | EX | MA | WB | | | | 
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | | 
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | | 

这是因为只有初始ADD写入R1。而且,指令的目标寄存器和后续指令的源寄存器之间不再有重叠。

随着转发的ADD(即R1)的输出将可其在T3EX阶段(即它是提供给任何后续指令在T4开始)

所以,即使是最由于转发,硬按下指令(SUB)的EX阶段的值可用于T4

因此,转发时,时间与初始图(即转发修复危险)相同。