coreblocks.scheduler package

Submodules

coreblocks.scheduler.scheduler module

class coreblocks.scheduler.scheduler.Scheduler

Bases: Elaboratable

Module 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.

__init__(*, gen_params: GenParams)
Parameters
gen_params: GenParams

Core generation parameters.

crat_active_tags: Method

Gets information about tags that are on current speculation path from C-RAT.

crat_rename: Method

Renames the source register in C-RAT.

crat_tag: Method

Tags instructions to checkpoints in C-RAT.

get_free_reg: Method

Provides the ID of a currently free physical register.

get_instr: Method

Method providing decoded instructions to be scheduled for execution. It has layout as described by SchedulerLayouts.scheduler_in.

rf_read_req1: Method

Requests value of first source register.

rf_read_req2: Method

Requests value of second source register.

rf_read_resp1: Method

Gets requested value of first source register and information if it is valid.

rf_read_resp2: Method

Gets requested value of second source register and information if it is valid.

rob_put: Method

Gets a free entry in ROB.

rs_insert: Sequence[Method]

Inserts instruction into RS slot.

rs_select: Sequence[Method]

Selects RS slot.

coreblocks.scheduler.wakeup_select module

class coreblocks.scheduler.wakeup_select.WakeupSelect

Bases: Elaboratable

Simple 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: Method
issue: Method
take_row: Method

Module contents