Definition
Static In-order Scheduling with Pipelined Functional Units
Static in-order scheduling with pipelined functional units is a variant of static in-order scheduling in which a pipelined multi-cycle functional unit can accept a new instruction every initiation interval, even while an earlier instruction is still occupying a later stage of the same unit.
Consecutive independent instructions that target the same pipelined functional unit can therefore overlap in the execute stage, without violating the at-most-one rule for non-pipelined functional units.
Pipelined multiplier
A pipelined multiplier splits multiplication into multiple stages. Once the first stage is free, a second multiply can enter while the first multiply is still in a later stage.
Two consecutive independent multiplies can thus issue back-to-back. A RAW dependency between them still forces a stall, because the second multiply needs the result of the first.
Non-pipelined units
Functional units that are not pipelined still follow the original rule: at most one instruction occupies the unit at any time. Stalls back-propagate through earlier pipeline stages when such a unit is busy.
A further extension is static in-order scheduling with load-store optimization, which adds non-blocking loads and a store buffer.