I am currently researching instruction level parallelism in CPUs and have come across Tomasulo's algorithm for dynamic scheduling.
As I understand it so far, once a functional unit computes a result, it is sent on the CDB from which it can be received by reservation stations waiting for this result. How do these reservation stations recognise that the result is one they are waiting for? I assume results sent on the CDB are tagged with the ID of the reservation station involved in computing them, but then how is this implemented where the functional units are pipelined or there are multiple reservation stations per functional unit? Is the ID of the reservation station corresponding to the instruction being executed passed through the functional unit's pipeline to be used as a tag when the result is sent?