generates pipelined datapath that is dynamically scheduled. A dynamically scheduled portion of the datapath does not pass data to its successor until its successor signals that it is ready to receive it. This signaling is accomplished using handshaking control logic. For example, a variable latency load from memory may refuse to accept its predecessors' data until the load is complete.
Handshaking helps in removing bubbles in the pipeline, thereby increasing occupancy. For more information about bubbles, refer to
The following figure illustrates four regions of dynamically scheduled logic: