pub fn reservation_station(
alloc: Vr<GemminiCmd>,
completed: Valid<U<{ _ }>>
) -> (RsIssues, RsCompleted, Valid<bool>)
Expand description
Reservation Station
Due to Gemmini’s decoupled access-execute architecture, instructions in the Load``,
Store, and
Executemay operate concurrently and out-of-order with respect to instructions in other modules. This module detects hazards between instructions in
Load,
Store, and
Execute`
The instructions in the Reservation Station are only issued to their respective modules once they have no dependencies on instructions in other modules.
Note:
Instructions that are destined for the same modules are issued in-order.
Reservation Station does not check hazards between instructions within the same module(Load
, Store
, and Execute
)
Each module is obligated to handle it’s own dependencies and hazards internally, assuming that it receives it’s own instructions in program-order.
Inputs
alloc
- Allocated instructions from the
LoopMatmul
module.
- Allocated instructions from the
completed
- Completed and arbitered instructions from the
Load
,Store
, andExecute
modules. - Note that this signal comes from the egress of the
Load
,Store
, andExecute
modules. - This implementation preassumes that
module_split
will be applied to this module. - For more information, see the
mod.rs
file in thecrate::gemmini
.
- Completed and arbitered instructions from the
Outputs
RsIssues
- Instructions to be issued to the
Load
,Execute
, andStore
modules.
- Instructions to be issued to the
RsCompleted
- Completed instruction IDs from the Reservation Station.
- This is sent to
LoopMatmul
andLoopConv
modules.
busy
- Reservation station is busy or not.