instruction types
R:寄存器 – 寄存器操作
I:短立即数和访存 load
S:访存 store
B:条件跳转
U:长立即数
J:无条件跳转
opcode
指令不仅仅由 opcode 区分,还有子 opcode.
主 opcode:
R 型全是 0110011
计算 I 型全是 0010011
lui 是 0110111
auipc 是 0010111
读内存 I 型都是 0000011
写内存型都是 0100011
jalr 是 1100111
jal 是 1101111
B 型是 1100011
细分 opcode
12 – 14 位是细分 opcode
R 型与计算 I 型:
| op | code |
|---|---|
| add, sub | 000 |
| sll | 001 |
| slt | 010 |
| sltu | 011 |
| xor | 100 |
| srl, sra | 101 |
| or | 110 |
| and | 111 |
随后,sub 和 sra 和 srai 要将第 30 位置为 1,其它的此位置无立即数的是 0,有立即数的是立即数。
ALU 操作码设计
以上 10 个操作加上直接输出 A, B 共 12 个操作,用 4 位就够了。由于不确定透传 A, B 是否需要配合其它译码电路,先给它们两个单独划分一个位,后续再根据需求修改操作码。
| op | code |
|---|---|
| add | 00000 |
| sub | 01000 |
| sll | 00001 |
| slt | 00010 |
| sltu | 00011 |
| xor | 00100 |
| srl | 00101 |
| sra | 01101 |
| or | 00110 |
| and | 00111 |
| srcA | 10000 |
| srcB | 10001 |
发表回复