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 inLoad, 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.
  • completed
    • Completed and arbitered instructions from the Load, Store, and Execute modules.
    • Note that this signal comes from the egress of the Load, Store, and Execute modules.
    • This implementation preassumes that module_split will be applied to this module.
    • For more information, see the mod.rs file in the crate::gemmini.

Outputs

  • RsIssues
    • Instructions to be issued to the Load, Execute, and Store modules.
  • RsCompleted
    • Completed instruction IDs from the Reservation Station.
    • This is sent to LoopMatmul and LoopConv modules.
  • busy
    • Reservation station is busy or not.