Instruction | Issue | Read operands | Execution | Write result |
LD F2,0(R1) | ||||
ADDD F6,F2,F4 | ||||
MULTD F8,F6,F0 | ||||
LD F10,-8(R1) | ||||
ADDD F12,F10,F4 | ||||
MULTD F14,F12,F0 | ||||
SUBI R1,R1,#16 | ||||
BNEZ R1,Loop |
Name | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Int1 | Yes | Load | F2 | R1 | No | ||||
Int2 | Yes | Load | F10 | R1 | No | ||||
Add1 | Yes | Add | F6 | F2 | F4 | Int1 | No | Yes | |
Add2 | Yes | Add | F12 | F10 | F4 | Int2 | No | Yes | |
Mult1 | Yes | Add | F8 | F6 | F0 | Add1 | No | Yes | |
Div1 | No |
F0 | F2 | F4 | F6 | F8 | F10 | F12 | F14 |
Int1 | Add1 | Mult1 | Int2 | Add2 |
The instruction status table indicates which stage a particular instruction is in. In this example, we assume that the table is large enough so it can fit all the instructions. The functional unit status table indicates the state of the functional unit. The fields are as follow:
In the tables above, we have filled out the initial status of the tables, assuming all the instructions had been fetched into the instruction status table. We issue instructions sequentially until we encounter a WAW hazard or we run out of functional units. In this case, we ran out of functional units. Note that we have issued five instructions at once. This may not be realistic depending on the particular machine. For now, we will assume this is legal.