三、实验内容和步骤 (1)学会使用Tomasulo算法。假设浮点功能部件的延迟时间为加减法2个周期,乘法10个时钟周期,除法40个时钟周期,load部件2个时钟周期。 
- 对于下面的代码段,给出当指令MUL.D写结果时,保留站、load缓冲器以及寄存器状态表中的内容。
L.D F6, 24(R2) L.D F2, 12(R3) MUL.D F0, F2,F4 SUB.D F8,F6,F2 DIV.D F10,F0,F6 ADD.D F6,F8,F2 指令执行状态为:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP 1 | CP 2-3 | CP 4 | L.D F2,45(R3) | CP 2 | CP 3-4 | CP5 | MUL.D F0,F2,F4 | CP 3 | CP 6-15 | CP 16 | SUB.D F8,F2,F6 | CP 4 | CP 6-7 | CP 8 | DIV.D F10,F0,F6 | CP 5 | | | ADD.D F6,F8,F2 | CP 6 | CP 9-10 | CP 11 |
保留站内容为:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | No | | | | | | | Add2 | No | | | | | | | Add3 | No | | | | | | | Mult1 | No | | | | | | | Mult2 | Yes | DIV.D | D3 | D1 | 0 | 0 |
load缓冲器内容:
名称 | Busy | 地址 | 值 | Load1 | No | | | Load2 | No | | | Load3 | | | |
寄存器内容:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | 0 | 0 | | 0 | 0 | Mult2 | | 值 | D3 | D2 | | D6 | D4 | | |
②按步进方式执行上述代码,利用模拟器的“小三角按钮”的对比显示功能,观察每一个时钟周期前后各信息表中内容的变化情况。 (2)对于与上面相同的延迟时间和代码段。 ①给出在第3个时钟周期时,保留站、load缓冲器以及寄存器状态表中的内容。 指令状态:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP 1 | 执行完成 | | L.D F2,45(R3) | CP 2 | 剩余1 CP | | MUL.D F0,F2,F4 | CP 3 | | | SUB.D F8,F2,F6 | | | | DIV.D F10,F0,F6 | | | | ADD.D F6,F8,F2 | | | |
保留站内容:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | No | | | | | | | Add2 | No | | | | | | | Add3 | No | | | | | | | Mult1 | Yes | MUL.D | | R[F4] | Load2 | 0 | | Mult2 | No | | | | | |
load缓冲器内容:
名称 | Busy | 地址 | 值 | Load1 | Yes | L.D | R[R2]+24 | Load2 | Yes | L.D | R[R3]+12 | Load3 | | | |
寄存器:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | Mult1 | Load2 | | Load1 | | | | 值 | | | | | | | |
- 步进5个时钟周期,给出这时保留站、load缓冲器以及寄存器状态表中的内容。
指令状态:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP 1 | CP 2-3 | CP 4 | L.D F2,45(R3) | CP 2 | CP 3-4 | CP 5 | MUL.D F0,F2,F4 | CP 3 | 剩余7 CP | | SUB.D F8,F2,F6 | CP 4 | CP 6-7 | CP 8 | DIV.D F10,F0,F6 | CP 5 | | | ADD.D F6,F8,F2 | CP 6 | | |
保留站内容:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | No | | | | | | | Add2 | Yes | ADD.D | D4 | D2 | 0 | 0 | | Add3 | No | | | | | | | Mult1 | Yes | MUL.D | D2 | R[F4] | 0 | 0 | | Mult2 | Yes | DIV.D | | D1 | Mult1 | 0 |
load缓冲器内容:
名称 | Busy | 地址 | 值 | Load1 | No | | | Load2 | No | | | Load3 | | | |
寄存器内容:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | Mult1 | 0 | | Add2 | 0 | Mult2 | | 值 | | D2 | | D1 | D4 | | |
- 再步进10个时钟周期,给出这时保留站、load缓冲器以及寄存器状态表中的内容。
指令状态:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP1 | CP 2-3 | CP 4 | L.D F2,45(R3) | CP 2 | CP 3-4 | CP 5 | MUL.D F0,F2,F4 | CP 3 | CP 6-15 | CP 16 | SUB.D F8,F2,F6 | CP 4 | CP 6-7 | CP 8 | DIV.D F10,F0,F6 | CP 5 | 剩余38 CP | | ADD.D F6,F8,F2 | CP 6 | CP 9-10 | CP 11 |
保留站:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | No | | | | | | | Add2 | No | | | | | | | Add3 | No | | | | | | | Mult1 | No | | | | | | | Mult2 | Yes | DIV.D | D3 | D1 | 0 | 0 |
Load缓冲器:
名称 | Busy | 地址 | 值 | Load1 | No | | | Load2 | No | | | Load3 | No | | |
寄存器:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | 0 | 0 | | 0 | 0 | Mult2 | | 值 | D3 | D2 | | D6 | D4 | | |
(3)假设浮点功能部件的延迟时间为加减法3个时钟周期,乘法8个时钟周期,除法40个时钟周期。对于下面的代码重复实验一中步骤(2)的内容。编写代码如下: L.D F6, 28(R2) ADD.D F2,F4,F8 MUL.D F0, F2,F4 SUB.D F8,F6,F2 DIV.D F12,F0,F6 ADD.D F10,F8,F2 浮点功能部件的延迟时间为加减法3个周期,乘法8个时钟周期,除法40个时钟周期,load部件2个时钟周期。根据实验结果可知该程序需要56个周期执行完成。  第3个时钟周期时,保留站、load缓冲器以及寄存器状态表中的内容。 指令状态:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP 1 | 执行完成 | | L.D F2,45(R3) | CP2 | 剩余2 CP | | MUL.D F0,F2,F4 | CP 3 | | | SUB.D F8,F2,F6 | | | | DIV.D F10,F0,F6 | | | | ADD.D F6,F8,F2 | | | |
保留站:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | Yes | ADD.D | R[F4] | R[F8] | 0 | 0 | | Add2 | No | | | | | | | Add3 | No | | | | | | | Mult1 | Yes | MUL.D | | R[F4] | Add1 | 0 | | Mult2 | No | | | | | |
load缓冲器内容:
名称 | Busy | 地址 | 值 | Load1 | Yes | L.D | R[R2]+28 | Load2 | No | | | Load3 | | | |
寄存器内容:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | Mult1 | Add1 | | Load1 | | | | 值 | | | | | | | |
步进5个时钟周期,给出这时保留站、load缓冲器以及寄存器状态表中的内容。 指令状态:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP 1 | CP 2-3 | CP 4 | L.D F2,45(R3) | CP 2 | CP 3-5 | CP 6 | MUL.D F0,F2,F4 | CP 3 | 剩余6 CP | | SUB.D F8,F2,F6 | CP 4 | 剩余1 CP | | DIV.D F10,F0,F6 | CP 5 | | | ADD.D F6,F8,F2 | CP 6 | | |
保留站内容:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | No | | | | | | | Add2 | Yes | SUB.D | D1 | D2 | 0 | 0 | | Add3 | Yes | ADD.D | | D2 | Add2 | 0 | | Mult1 | Yes | MUL.D | D2 | R[F4] | 0 | 0 | | Mult2 | Yes | DIV.D | | D1 | Mult1 | 0 |
Load部件内容:
名称 | Busy | 地址 | 值 | Load1 | No | | | Load2 | No | | | Load3 | | | |
寄存器部件内容:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | Mult1 | 0 | | 0 | Add2 | Add3 | Mult2 | 值 | | D2 | | D1 | | | |
再步进10个时钟周期,给出这时保留站、load缓冲器以及寄存器状态表中的内容。 指令状态:
指令 | 流出 | 执行 | 写结果 | L.D F6,24(R2) | CP 1 | CP 2-3 | CP 4 | L.D F2,45(R3) | CP 2 | CP 3-5 | CP 6 | MUL.D F0,F2,F4 | CP 3 | CP 7-14 | CP 15 | SUB.D F8,F2,F6 | CP 4 | CP 7-9 | CP 10 | DIV.D F10,F0,F6 | CP 5 | 剩余37 CP | | ADD.D F6,F8,F2 | CP 6 | CP 11-13 | CP 14 |
保留站内容:
Time | 名称 | Busy | Op | Vj | Vk | Qj | Qk | | Add1 | NO | | | | | | | Add2 | NO | | | | | | | Add3 | NO | | | | | | | Mult1 | NO | | | | | | | Mult2 | Yes | DIV.D | D3 | D1 | 0 | 0 |
Load部件内容:
名称 | Busy | 地址 | 值 | Load1 | No | | | Load2 | No | | | Load3 | | | |
寄存器部件内容:
字段 | F0 | F2 | F4 | F6 | F8 | F10 | F12 | Qi | 0 | 0 | | 0 | 0 | 0 | Mult2 | 值 | D3 | D2 | | D1 | D4 | D6 | | |