# Introduction
CoreBlocks is going to be an out-of-order processor which will implement a RISC-V microarchitecture.
The project will focus on flexibility, which should allow to easily make experiments with different
component implementations.
## Documentation
Documentation located in the `docs/` directory collects description of the whole processor.
In `Overview` a high level overview of CoreBlocks can be found.
Html versions of these pages and API documentation generated from code are available at [kuznia-rdzeni.github.io/coreblocks/](https://kuznia-rdzeni.github.io/coreblocks/)
```{mermaid}
graph
F[FRONTEND
-get instruction
-decode]
F -->|FIFO| S
S[SCHEDULER
-allocate register
-rename
-allocate ROB
-send to RS]
S --RS--> E
E[EXEC
-listen to incoming operands
-select instruction to execute
-send to FU
-deallocate RS]
E --FU--> B
B[BACKEND
-listen for results from FU
-announce results to RF and RS
-mark done in ROB]
B --> R
R[RETIREMENT
-check rediness of instruction from the end of ROB
-update RAT
-deallocate old register
-deallocate ROB]
ROB((ROB))
RF((RF))
FREE_RF((FREE RF))
RAT((RAT))
R --> FREE_RF --> S
S & R & B <--> ROB
B --> RF --> S
S <--> RAT <--> R
```