Skip to content

Overview

kuznia-rdzeni edited this page Dec 13, 2022 · 2 revisions

Scheduler overview

Description

The scheduler is the middle part of our processor. It is located after the frontend and before execution units. Its main tasks are:

  • register allocation
  • renaming
  • ROB entry allocation
  • dispatching instructions to RSs

Schema

graph
    Reg;
    Reg[<b>REGISTER ALLOCATION</b><br>-get free register from FREE RF list]
    Reg --> Rename;
    Rename[<b>RENAMING</b><br>-rename source registers using F-RAT<br>-save mapping to allocated output register in F-RAT]
    Rename --> AlocRob;
    AlocRob[<b>ROB ALLOCATION</b><br>-get ID of free entry in ROB<br>-save instruction in ROB entry]
    AlocRob --> Select;
    Select[<b>RS SELECTION</b><br>-choose RS to which instruction should be send<br>-reserve entry in that RS]
    Select --> Insert;
    Insert[<b>RS INSERTION</b><br>-insert instruction to selected RS<br>-get operands from RF<br>-save them in RS field of new instruction]

Structure

We decided to split the scheduler into 5 phases:

  • register allocation
  • renaming
  • ROB entry allocation
  • choosing the RS to which instruction should be dispatched
  • inserting instruction to RS

Each phase can potentially take one clock cycle, but they can be merged as a potential future optimization. During implementation each phase should be treated as a separate hardware block for future flexibility.

More detailed description of each block

TODO

Clone this wiki locally