coreblocks.scheduler package
Submodules
coreblocks.scheduler.scheduler module
- class coreblocks.scheduler.scheduler.Scheduler
Bases:
ElaboratableModule responsible for preparing an instruction and its insertion into RS. It supports multiple RS configurations, in which case, it will send the instruction to the first available RS which supports this kind of instructions.
In order to prepare instruction it performs following steps: - physical register allocation - register renaming - ROB entry allocation - RS selection - RS insertion
Warning
Instruction without any supporting RS will get stuck and block the scheduler pipeline.
- crat_active_tags: REQUIRED: 2>]
Gets information about tags that are on current speculation path from C-RAT.
- crat_commit_checkpoint: REQUIRED: 2>]
Handles tags and checkpoints in C-RAT while renaming..
- crat_rename: REQUIRED: 2>]
Renames the source register in C-RAT.
- crat_tag: REQUIRED: 2>]
Tags instructions to checkpoints in C-RAT.
- get_free_reg: REQUIRED: 2>]
Provides the ID of a currently free physical register.
- get_instr: REQUIRED: 2>]
Method providing decoded instructions to be scheduled for execution. It has layout as described by SchedulerLayouts.scheduler_in.
- rf_read_req: REQUIRED: 2>]
Requests value of a source register.
- rf_read_resp: REQUIRED: 2>]
Gets requested value of a source register and information if it is valid.
- rob_put: REQUIRED: 2>]
Gets a free entry in ROB.
- rs_insert: REQUIRED: 2>]
Inserts instruction into RS slot.
- rs_select: REQUIRED: 2>]
Selects RS slot.
coreblocks.scheduler.wakeup_select module
- class coreblocks.scheduler.wakeup_select.WakeupSelect
Bases:
ElaboratableSimple Wakeup Select unit. Works by firstly getting readiness vector from the method get_ready (it is a binary vector, where 1 on i-th position means i-th row is ready to be taken and 0 means it is not). In next step if any row is ready to be taken it calls take_row with i (position of last ready row) as an argument in order to get its value and then calls method issue with i-th row as argument. It is prepared to work with RS and functional unit interfaces.
- Attributes:
- get_readyMethod, required
Method which is invoked to get the vector of readiness. It uses RSLayouts.get_ready_list_out.
- take_rowMethod, required
Method which is invoked to get a single ready row. It uses RSLayouts.take_out.
- issueMethod, required
Method which is invoked to a push row down the pipeline. It uses FuncUnitLayouts.issue.
- __init__(*, gen_params: GenParams, rs_entries: int)
- Parameters:
- gen_paramsGenParams
Instance of GenParams with parameters describing the core.
- rs_entriesint
Number of entries of the RS connected to this instance of WakeupSelect.
- get_ready: REQUIRED: 2>]
- issue: REQUIRED: 2>]
- take_row: REQUIRED: 2>]