计算机系统结构-MIPS指令流水线冲突

以下是一段MIPS指令序列,

loop:   
add   $t1,  $s3,  $s3   //t1=s3+s3
add   $t1,  $t1,  $t1   //t1=t1+t1
add   $t1,  $t1,  $s6   //t1=t1+s6
lw    $t0,   0($t1)  //lw 从存储器中读取一个字的数据到寄存器中,从t1中读取一个数给t0
bne   $t0,  $s5,  exit  //条件转移指令,当两个寄存器中内容不等时转移发生,转移到exit中去
add   $s3,  $s3,  $s4  //s3=s3+s4
j  loop //直接跳转指令,跳转到loop

MIPS指令集

假如在实验的五段流水线中执行上述指令序列,在数据通路中,寄存器写口和寄存器读口分别安排一个时钟周期的前、后半个周期内独立工作,请思考:
(1)哪些指令之间发生数据相关?哪些指令之间发生控制相关?

答:
数据冲突:
add $t1, $s3, $s3add $t1, $t1, $t1
add $t1, $t1, $t1add $t1, $t1, $s6
add $t1, $t1, $s6lw $t0, 0($t1)
lw $t0, 0($t1)bne $t0, $s5, exit
add $s3, $s3, $s4add $t1, $s3, $s3
控制相关:
bne $t0, $s5, exitj loop

(2)如果不采用“直通”技术进行数据冲突处理,那么应该在何处、加入几条nop指令才能避免数据冲突?假定采用“直通”技术处理,是否可以完全解决数据冲突?不行的话,需要在发生数据冲突的指令前加入几条nop指令,才能使这段指令序列的执行避免数据冲突?

答:在第1,2,3,4,5条指令前各加入2条nop指令可以避免数据冲突,采用直通技术后,除了lw $t0, 0($t1)bne $t0, $s5, exit之间的数据冲突,都能解决(因为lw是把存储器的内容存到寄存器里面,所以执行WB后寄存器才能有值),需要在bne $t0, $s5, exit前加2条nop指令

(3)对于第5条分支指令引起的控制冲突,假定将检测结果是否为“零”并更新PC的操作放在“访存(Mem)”执行,则分支延迟损失时间片为多少?在何处、加入几条nop指令可以消除控制冲突?若检测结果是否为“零”并更新PC的操作在“执行(EX)”执行,则分支延迟损失时间片为多少?

答:分支延迟损失时间片2,在bne $t0, $s5, exit前面加2条nop可以消除控制冲突,若检测结果是否为“零”并更新PC的操作在“执行(EX)”执行,则分支延迟损失时间片为1。

(4)对于第7条指令“j loop”,假定更新PC的操作在“执行(EX)”阶段执行,则流水线会被阻塞几个时钟周期?需要在何处、加入几条nop指令可以消除该控制冲突?假定更新PC的操作在“译码(ID)”阶段执行,则流水线又将被阻塞几个时钟周期?

答:阻塞1个时钟周期,在j loop前面加1个nop指令可以消除该控制冲突,假定更新PC的操作在“译码(ID)”阶段执行,则流水线又将被阻塞0个时钟周期。

你可能感兴趣的:(计算机系统结构-MIPS指令流水线冲突)