Files
neulacpu/lacpu/README.md

143 lines
6.7 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 指令完成情况
![指令格式](./doc/pic/指令格式.png)
最新 op 划分不在遵循下列方式,请参考 **[chiplab/mycpu](https://gitee.com/loongson-edu/chiplab/tree/chiplab_diff/IP/myCPU)** 中的划分方式。
#### op6
- [x] `0 1 0` 开头,`0 1 1` - `1 1 1`。共 5 项:**jirl, b, bl, beq, bne**
- [x] `0 1 1` 开头,`0 0 0` - `0 1 1`。共 4 项:**blt, bge, bltu, bgeu**
#### op7
- [x] `0 0 0 1` 开头,`0 1 0`, `1 1 0`。共 2 项:**lu12i.w, pcaddu12i**
#### op10
- [x] `0 0 0 0 0 0 1` 开头, `0 0 0` - `1 1 1` 中间有缺项。 共 6 项:**slti, sltui, addi.w andi, ori, xori**
- [x] `0 0 1 0 1 0 0` 开头,`0 0 0` - `1 1 0`。共 6 项:**ld.b, ld.h, ld.w, st.b, st.h, st.w**
- [ ] `0 0 1 0 1 0 1` 开头,`0 0 0` - `0 0 1`。共 3 项:**ld.bu, ld.hu**, preld
#### op17
- [x] `0 0 0 0 0 0 0 0 0 0 0 1` 开头,`0 0 0 0 0` - `1 0 0 0 0` 中间有缺项。共 11 项:**add.w, sub.w, slt, sltu, nor, and, or, xor, sll.w, srl.w, sra.w**
- [x] `0 0 0 0 0 0 0 0 0 0 0 1` 开头,`1 1 0 0 0` - `1 1 0 1 0` 。共 3 项:**mul.w, mulh.w, mulh.wu**
- [x] `0 0 0 0 0 0 0 0 0 0 1 0` 开头,`0 0 0 0 0` - `0 0 0 1 1`。共 4 项:**div.w, mod.w, div.wu, mod.wu**
- [x] `0 0 0 0 0 0 0 0 0 1 0 0` 开头,`0 0` - `1 0` + `0 0 1`。共 3 项:**slli.w, srli.w, srai.w**
- [ ] `0 0 1 1 1 0 0 0 0 1 1 1` 开头,`0 0 1 0 0` - `0 0 1 0 1` 。共 2 项dbar, ibar
#### op22
- [ ] `0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0` 开头。共 3 项rdcntid.w, rdcntvl.w, rdcntvh.w
测试目前使用 **[CDP_EDE_local](https://gitee.com/loongson-edu/cdp_ede_local)** 进行,已测试通过 func 的 n1~n58
## 简单整理
### 算数运算类
| √ | 指令 | 格式 | 说明 |
| ---- | --------- | ------------------- | ------------------------------------------- |
| √ | ADD.W | add.w rd, rj, rk | |
| √ | SUB.W | sub.w rd, rj, rk | |
| √ | ADDI.W | addi.w rd, rj, si12 | si12 符号扩展 32 位 |
| √ | LU12I.W | lu12i.w rd, si20 | 将 si20 最低位连接 12'b0 符号扩展 |
| √ | SLT | slt rd, rj, rk | 如果前者小于后者 GR[rd] 置 1 |
| √ | SLTU | sltu rd, rj, rk | |
| √ | SLTI | slt i rd, rj, si12 | |
| √ | SLTUI | sltu i rd, rj, si12 | |
| √ | PCADDU12I | pcaddu12i rd, si20 | 最低位连接 12'b0 |
| √ | AND | and rd, rj, rk | |
| √ | OR | or rd, rj, rk | |
| √ | NOR | nor rd, rj, rk | |
| √ | XOR | xor rd, rj, rk | |
| √ | ANDI | and i rd, rj, ui12 | ui12 立即数零扩展 |
| √ | ORI | ori rd, rj, ui 12 | |
| √ | XORI | xori rd, rj, ui12 | |
| √ | NOP | andi r0, r0, 0 | |
| √ | MUL.W | mul.w rd, rj, rk | 操作数视为有符号数,结果符号扩展 |
| √ | MULH.W | mulh.w rd, rj, rk | 操作数视为有符号数,结果的 [63:32] 符号扩展 |
| √ | MULH.WU | mulh.wu rd, rj, rk | 操作数视为无符号数 |
| √ | DIV.W | div.w rd, rj, rk | 操作数视为有符号数,结果符号扩展 |
| √ | MOD.W | mod.w rd, rj, rk | |
| √ | DIV.WU | div.wu rd, rj, rk | 操作数视为无符号数 |
| √ | MOD,WU | mod.wu rd, rj, rk | |
### 移位运算类
| √ | 指令 | 格式 | 说明 |
| ------- | ------------------- | ----------------------------------- | ----------------------------------- |
| √ | SLL.W | sll.w rd, rj, rk | 逻辑左移结果符号扩展GR\[rk][4:0] |
| √ | SRL.W | srl.w r d, rj, rk | |
| √ | SRA.W | sra.w rd, rj, rk | 算数右移,结果符号扩展 |
| √ | SLLI.W | slli.w rd, rj, ui5 | |
| √ | SRLI.W | srli.w rd, rj, ui5 | |
| √ | SRAI.W | srai.w rd, rj, ui5 | |
### 转移指令
| √ | 指令 | 格式 | 说明 |
| ---- | ---- | -------------------- | ------------------ |
| √ | BEQ | beq rj, rd, offs16 | |
| √ | BNE | bne rj, rd, offs16 | |
| √ | BLT | blt rj, rd, offs16 | 操作数视为有符号数 |
| √ | BGE | bge rj, rd, offs16 | 操作数视为有符号数 |
| √ | BLTU | bltu rj, rd, of fs16 | |
| √ | BGEU | bgeu rj, rd, offs16 | |
| √ | B | | |
| √ | BL | | |
| √ | JIRL | | |
### 访存指令
| × | 指令 | 格式 | 说明 |
| ---------- | ---- | ---- | ---- |
| √ | LD.B | | |
| √ | LD.H | | |
| √ | LD.W | | |
| √ | LD.BU | | |
| √ | LD.HU | | |
| √ | ST.B | | |
| √ | ST.H | | |
| √ | ST.W | | |
| | PRELD | | |
### 原子访存指令
| × | 指令 | 格式 | 说明 |
| ---------- | ---- | ---- | ---- |
| | LL.W | | |
| | SC.W | | |
### 栅障指令
| × | 指令 | 格式 | 说明 |
| ---------- | ---- | ---- | ---- |
| | DBAR | | |
| | IBAR | | |
### 其他杂项指令
| √ | 指令 | 格式 | 说明 |
| ---------- | ---- | ---- | ---- |
| √ | SYSCALL | | |
| √ | BREAK | | |
| √ | RDTIMEL.W | | |
| √ | RDTIMEH.W | | |
| √ | RDCNTID | | |
特权类最开始没写进来,等啥时候勤快了在写进来。
特权类指令进度可以看测试点进行对照参考。