Tomasulos Algorithm


Java-API of our Classes.

Erkl?rung des Algorithmus.


Note:
This applet can only be viewed with Java Swing compatible Browsers.
You will propable need the Java 1.2 Plug-In from Sun for your Browser.
If you don?t want to install the Plug-In just use the appletviewer that is part of the JDK Distrubution.
</COMMENT>

Tomasulo algorithm:

This pattern was created by R.Tomasulo and named after him. It uses register renaming around RAW-WAR Hazards to escape. The hazard detection und execution control are distributed: The reservation station at each functional unit control when an instruction can begin executing at that unit. The results are passed directly to functinal units (ALU) from the reservation station, where they are buffered, as soon as they are available. This is done with the CDB (Common Data Bus),which allows all units waiting for an operand to be loaded simultaneously. Note: The CDB (in our Applet) can only transmit one result per Clock . The execution of each instruction includes three phases:
1. Issue:
The instruction is taken from the instruction queue to the reservation station or load buffer,If there is an empty reservation station for it, and the operands are sent to the resevation station too if they are in the registers. If there is no empty resevation station (or load buffer) we have a structural hazard and we must stall untill workstation in the appropriate reservation station is available.
2. Execute:
When both operands are available and the ALU is not busy, the instruction will be executed.
Note:
Although each reservation station has several workstations (ADDS: 3 workstations, MULT: 2 workstations, Loadbuffer: 5 workstations) however there is only one functional unit per reservation station. If one of the two operands is missing, then is the CDB to monitor, while one for the results waits. Once both operands are available and the ALU is free the instruction will be executed.
3. Write result:
When the result from the functional unit is available, it is send through the CDB to the registers and to all functional units, which need it. In our applet you kann see in each reservation station these informations:
Qj, Qk are reservation stations, which will support the source operands, when both are empty, that means the two operands are available.
Vj, Vk contain the values of the two operands.
Notice: At the same time only one can be initialized qj(qk) or vj(vk).
Qi is the address of the reservation station,which will produce the value of the target register.

Lukasz Pekacki
Last modified: Thu Aug 10 17:33:39 CEST 2000