User:Squirem

Reservation stations are central components to an out-of-order processor implementing Tomasulo’s algorithm. A reservation station acts as a temporary buffer for instructions awaiting execution. A processor's reservation station allow independent instructions to continue execution without unnecessary stalling.

Placement
Based on the placement of the reservation station relative to the instruction dispatching, three types of reservation station implementations are possible. If a single buffer is used as the source side of dispatching, this is known as a centralized reservation station. If multiple buffers are placed at the destination side of dispatching, i.e. before each functional unit, then they are known as distributed reservation stations. Hybrid implementations are identified as clustered reservation stations.

Operation
There are three tasks associated with the operation of a reservation station: dispatching, waiting, and issuing.

Fields
A reservation station, depending upon implementation, can have the following field: The register file has a field Qi:
 * Op - The operation to perform on source operands S1 and S2
 * Qj, Qk - The reservation stations or instructions that will produce the corresponding source operand; a value of zero indicates that the source operand is already available in Vj or Vk, or is unnecessary.
 * Vj, Vk - The value of the source operands. Note that only one of the V fields or the Q field is valid for each operand. For loads, the Vk field is used to hold the offset field.
 * A - Used to hold information for the memory address calculation for a load or store. Initially the immediate field of the instruction is stored here; after the address calculation, the effective address is stored here.
 * Busy - Indicates that this reservation station and its accompanying functional units are occupied.
 * Ready - Indicates that the instruction stored in this reservation station is ready for execution.
 * Qi - the number of the reservation station or instruction that contains the operation whose result should be stored into this register. If the value of Qi is blank (or 0), no currently active instruction is computing a result destined for this register, meaning the value is simply the register contents.

Example
Given the following instruction sequence:
 * 1) L.D
 * 2) L.D
 * 3) MUL.D
 * 4) SUB.D
 * 5) DIV.D
 * 6) ADD.D