问答题 现有4级流水线,分别完成取指、指令译码并取数、运算、回写4步操作,假设完成各部操作的时间依次为100ns、100ns、80ns、50ns。试问:
问答题 流水线的操作周期应设计为多少?
【正确答案】流水线操作的时钟周期T应按4步操作中所需时间最长的一个步骤来考虑,所以T=100ns。
【答案解析】
问答题 试给出相邻两条指令发生数据相关的例子(假设在硬件上不采取措施),试分析第2条指令要推迟多少时间进行才不会出错?
【正确答案】两条指令发生数据相关冲突的例子如下:
ADD R1,R2,R3 (R2)+(R3)→R1
(将寄存器R2和R3的内容相加存储到寄存器R1)
SUB R4,R1,R5 (R1)-(R5)→R4
(将寄存器R1的内容减去寄存器R5的内容,并将相减的结果存储到寄存器R4)
分析如下:
首先这两条指令发生写后读(RAW)相关。两条指令在流水线中的执行情况见表1。
表1
[*]

ADD指令在时钟4时将结果写入寄存器堆(R1),但SUB指令在时钟3时读寄存器堆(R1)。本来ADD指令应先写入R1,SUB指令后读R1,结果变成SUB指令先读R1,ADD指令后写R1,因而发生数据冲突。如果硬件上不采取措施,则第2条指令SUB至少应该推迟两个时钟周期(2×100ns),即SUB指令中的指令译码并取数周期应该在ADD指令的写回周期之后才能保证不会出错,见表2。
表2
[*]
【答案解析】
问答题 如果在硬件设计上加以改进,至少需要推迟多少时间?
【正确答案】如果硬件上加以改进,则只延迟一个时钟周期即可(100ns)。因为在ADD指令中,运算周期就已经将结果得到了,可以通过数据旁路技术在运算结果得到的时候将结果快速地送入寄存器R1,而不需要等到写回周期完成,见表3。
表3
[*]
【答案解析】