1 |
11 |
ultra_embe |
# MPX
|
2 |
|
|
|
3 |
|
|
Github: [https://github.com/ultraembedded/core_mpx](https://github.com/ultraembedded/core_mpx)
|
4 |
|
|
|
5 |
|
|
MPX is an open-source CPU which can execute code compiled for MIPS-I ISA (as per the MIPS R2000 / R3000 CPUs).
|
6 |
|
|
|
7 |
|
|
*Disclaimer: I am not associated with MIPs Technologies Inc.
|
8 |
|
|
The version of MIPS ISA implemented here is 30+ years old, so undoubtedly any patents related to it will have expired.
|
9 |
|
|
This core was implemented using only publically available ISA documentation.*
|
10 |
|
|
|
11 |
|
|
This core is not a good starting point for new designs. You should consider using RISC-V based designs instead, as RISC-V is a cleaned up and more modern RISC ISA that is also open-source.
|
12 |
|
|
|
13 |
|
|
I have designed multiple RISC-V cores that you should consider instead of MPX;
|
14 |
|
|
* [https://github.com/ultraembedded/biriscv](https://github.com/ultraembedded/biriscv)
|
15 |
|
|
* [https://github.com/ultraembedded/riscv](https://github.com/ultraembedded/riscv)
|
16 |
|
|
|
17 |
|
|
## Rationale
|
18 |
|
|
So why design this core? Well... There are some interesting real-world products that featured MIPS R3000 CPUs such as the Sony Playstation 1, and there are ongoing efforts to recreate them in modern FPGA technology.
|
19 |
|
|
|
20 |
|
|
## Overview
|
21 |
|
|
![](docs/mpx_pipeline.png)
|
22 |
|
|
|
23 |
|
|
## Features
|
24 |
|
|
* 32-bit MIPS-I ISA compatible CPU core.
|
25 |
|
|
* Simple 5-stage pipelined design.
|
26 |
|
|
* Support for external co-processors (COP1 - 3).
|
27 |
|
|
* Synthesizable Verilog 2001, Verilator and FPGA friendly.
|
28 |
|
|
|
29 |
|
|
Note: This core does not have a built-in floating-point unit (COP1), however, one can be implemented and connected to the top-level ports of the design.
|
30 |
|
|
|
31 |
|
|
## Status
|
32 |
|
|
This is a very early release of the RTL. There are likely to be bugs!
|
33 |
|
|
|
34 |
|
|
Known items on the TODO list are;
|
35 |
|
|
* Implement faults on invalid instructions (RI) and arithmetic overflow (OV).
|
36 |
|
|
* Optimise the instruction decoder to be smaller and have a shorter critical path.
|
37 |
|
|
* Re-implement various bugs and quirks found in actual MIPS R2000/3000 designs.
|
38 |
|
|
* Rework multiply/divide instructions to be non-blocking (the current implementation is faster than the original but blocking).
|
39 |
|
|
* Rework the co-processor interfaces to reduce the CPU critical path.
|
40 |
|
|
* More extensive verification is required.
|
41 |
|
|
|