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: - [x] 访存异常(考虑`in_kernel`状态切换带来的冒险) :heavy_check_mark: - [ ] 特权指令异常 :hourglass: - [ ] 浮点运算单元 - [ ] ~~做一个真的`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 | |