MIPS/README.md

84 lines
5.1 KiB
Markdown

Magically Improved Pipeline Stages
===
Our awesome `MIPS` CPU written in `SystemVerilog` for Loongson Cup
```
.
├── resources <-- 资源包
│ └── 2021 <-- 2021年资源包
│ ├── cpu132_gettrace <-- 性能测试基准(gs132)
│ ├── soc_axi_func <-- AXI功能测试
│ ├── soc_axi_perf <-- AXI性能测试
│ ├── soc_axi_system <-- AXI系统测试
│ └── soft <-- 测试用程序
│ ├── func <-- 功能测试
│ ├── memory_game <-- 记忆游戏
│ └── perf_func <-- 性能测试
├── src <-- CPU设计代码
│ ├── AXI <-- AXI总线交互
│ ├── Cache <-- Cache
│ ├── Core <-- CPU核心
│ ├── CP0 <-- CP0协处理器
│ ├── include <-- 头文件
│ ├── IP <-- 用到的IP
│ ├── MMU <-- 地址转换单元
│ └── testbench <-- 测试脚本
└── tools <-- controller生成器
```
## TODO & Notice
- [ ] 特权模式
- [x] `CP0`寄存器`Status.UM` :heavy_check_mark:
- [ ] 访存异常(考虑`in_kernel`状态切换带来的冒险) :hourglass:
- [ ] 特权指令异常 :clock3:
- [ ] 浮点运算单元
- [ ] ~~做一个真的`FPU`~~ :x:
- [ ] 浮点运算指令报`Coprocessor Unusable`,同时`CP0`中新增`Cause.CE` :clock3:
- [ ] 新增指令
| Status | Instruction | Type | Tier | Comment |
| :------: | :---------: | :------: | :--: | :-------------------------------------- |
| :clock3: | `Cache` | `SYS` | 3 | |
| :clock3: | `PREF` | `SYS` | 1 | Treat as `NOP` |
| :clock3: | `SYNC` | `SYS` | 1 | Treat as `NOP` (We're strongly ordered) |
| :clock3: | `WAIT` | `SYS` | 3 | |
| :clock3: | `TEQ` | `SYS` | 2 | |
| :clock3: | `TEQI` | `SYS` | 2 | |
| :clock3: | `TGE` | `SYS` | 2 | |
| :clock3: | `TGEI` | `SYS` | 2 | |
| :clock3: | `TGEIU` | `SYS` | 2 | |
| :clock3: | `TGEU` | `SYS` | 2 | |
| :clock3: | `TLT` | `SYS` | 2 | |
| :clock3: | `TLTI` | `SYS` | 2 | |
| :clock3: | `TLTIU` | `SYS` | 2 | |
| :clock3: | `TLTU` | `SYS` | 2 | |
| :clock3: | `TNE` | `SYS` | 2 | |
| :clock3: | `TNEI` | `SYS` | 2 | |
| :clock3: | `CLO` | `ARITH` | 2 | `RT == RD` |
| :clock3: | `CLZ` | `ARITH` | 2 | `RT == RD` |
| :clock3: | `MADD` | `ARITH` | 2 | |
| :clock3: | `MADDU` | `ARITH` | 2 | |
| :clock3: | `MSUB` | `ARITH` | 2 | |
| :clock3: | `MSUBU` | `ARITH` | 2 | |
| :clock3: | `MOVN` | `ARITH` | 1 | |
| :clock3: | `MOVZ` | `ARITH` | 1 | |
| :clock3: | `LL` | `MEM` | 3 | |
| :clock3: | `LWL` | `MEM` | 1 | |
| :clock3: | `LWR` | `MEM` | 1 | |
| :clock3: | `SC` | `MEM` | 3 | |
| :clock3: | `SWL` | `MEM` | 1 | |
| :clock3: | `SWR` | `MEM` | 1 | |
| :clock3: | `MOVF` | `FP` | 2 | |
| :clock3: | `MOVT` | `FP` | 2 | |
| :clock3: | `BEQL` | `BRANCH` | 3 | |
| :clock3: | `BGEZALL` | `BRANCH` | 3 | |
| :clock3: | `BGEZL` | `BRANCH` | 3 | |
| :clock3: | `BGTZL` | `BRANCH` | 3 | |
| :clock3: | `BLEZL` | `BRANCH` | 3 | |
| :clock3: | `BLTZALL` | `BRANCH` | 3 | |
| :clock3: | `BLTZL` | `BRANCH` | 3 | |
| :clock3: | `BNEL` | `BRANCH` | 3 | |