Minerva is a CPU core that currently implements the RISC-V RV32IM instruction set. Its microarchitecture is described in plain Python code using the Amaranth toolbox.
Features
The microarchitecture of Minerva is largely inspired by the LatticeMico32 processor.
Minerva is pipelined on 6 stages:
- Address The address of the next instruction is calculated and sent to the instruction cache.
- Fetch The instruction is read from memory.
- Decode The instruction is decoded, and operands are either fetched from the register file or bypassed from the pipeline. Branches are predicted by the static branch predictor.
- Execute Simple instructions such as arithmetic and logical operations are completed at this stage.
- Memory More complicated instructions such as loads, stores and shifts require a second execution stage.
- Writeback Results produced by the instructions are written back to the register file.
The L1 data cache is coupled to a write buffer. Store transactions are in this case done to the write buffer instead of the data bus. This enables stores to proceed in one clock cycle if the buffer isn’t full, without having to wait for the bus transaction to complete. Store transactions are then completed in the background as the write buffer gets emptied to the data bus.
You can download the Minerva Processor core here
Leave A Comment
You must be logged in to post a comment.