PicoRV32支持的指令。
RV32I指令共有47条,如下表
RV32I指令
bit31 -bit25 | bit24 - bit20 | bit19 - bit15 | bit14 - bit12 | bit11 - bit7 | bit6 - bit0 | 指令类型 | 指令名称 | PicoRV32 |
立即数[31:12] | rd | 7'b011_0111 | U | lui | 支持 | |||
rd | 7'b001_0111 | U | auipc | |||||
立即数[20|10:1 |11 | 19:12] | rd | 7'b110_1111 | J | jal | ||||
立即数[11:0] | rs1 | 000 | rd | 7'b110_0111 | I | jalr | ||
立即数[12|10:5] | rs2 | 000 | 立即数[4:1 | 11] | 7'b110_0011 | B | beq | ||
001 | B | bne | ||||||
100 | B | blt | ||||||
101 | B | bge | ||||||
110 | B | bltu | ||||||
111 | B | bgeu | ||||||
立即数[11:0] | 000 | rd | 7'b000_0011 | I | lb | |||
001 | I | lh | ||||||
010 | I | lw | ||||||
100 | I | lbu | ||||||
101 | I | lhu | ||||||
立即数[11:5] | rs2 | 000 | 立即数[4:0] | 7'b010_0011 | S | sb | ||
001 | S | sh | ||||||
010 | S | sw | ||||||
立即数[11:0] | 000 | rd | 7'b001_0011 | I | addi | |||
010 | I | slti | ||||||
011 | I | sltiu | ||||||
100 | I | xori | ||||||
110 | I | ori | ||||||
111 | I | andi | ||||||
7'h0 | shamt | 001 | I | slli | ||||
101 | I | srli | ||||||
7'b010_0000 | 101 | I | srai | |||||
7'h0 | rs2 | 000 | 7'b011_0011 | R | add | |||
7'b010_0000 | 000 | R | sub | |||||
7'h0 | 001 | R | sll | |||||
010 | R | slt | ||||||
011 | R | sltu | ||||||
100 | R | xor | ||||||
101 | R | srl | ||||||
7'b010_0000 | 101 | R | sra | |||||
7'h0 | 110 | R | or | |||||
111 | R | and | ||||||
5'b00000 | 000 | 5'b00000 | 7'b000_1111 | I | fence | 不支持 | ||
0000000 | 00000 | 001 | I | fence.i | ||||
12'h00 | 000 | 7'b111_0011 | I | ecall | 支持 | |||
000 | I | ebreak | ||||||
CSR | rs1 | 001 | rd | I | csrrw | 不支持 | ||
010 | I | csrrs | ||||||
011 | I | csrrc | ||||||
立即数 | 101 | I | csrrwi | |||||
110 | I | cssrrsi | ||||||
111 | I | csrrci |
PicoRV32添加的指令
添加10条指令,不包括乘法和除法指令
rdcycle, rdcycleh
rdinstr, rdinstrh
getq, setq, retirq, maskirq, waitirq
timer
bit31 - bit25 | bit24 - bitbit20 | bit19 - bit15 | bit14 - bit12 | bit11 - bit7 | bit6-0 | 指令类型 | 指令名称 |
20'b1100_0000_0000_0000_0010 | 单元格无法合并 | rd | 7'b1110011 | I | rdcycle | ||
20'b1100_0000_0001_0000_0010 | |||||||
20'b1100_1000_0000_0000_0010 | I | rdcycleh | |||||
20'b1100_1000_0001_0000_0010 | |||||||
20'b1100_0000_0010_0000_0010 | I | rdinstr | |||||
20'b1100_1000_0010_0000_0010 | I | rdinstrh | |||||
7'b0000000 | rs2 | 000xx | --- | rd | 7'b000_1011 | R | getirq |
7'b0000001 | rs2 | rs | --- | 000xx | R | setirq | |
7'b0000010 | rs2 | rs | --- | rd | R | retirq | |
7'b0000011 | rs2 | rs | --- | rd | R | maskirq | |
7'b0000100 | rs2 | rs | --- | rd | R | waitirq | |
7'b0000101 | rs2 | rs | --- | rd | R | timer |
还有可选的乘法指令和除法指令
PicoRV32中添加的指令
rdcycle, rdcycleh
rdinstr, rdinstrh
其实是CSR指令的的几个特殊实现,RISC-V定义了CSR空间,但是PicoRV32没有实现CSR这里空间,只实现几个特殊寄存器
就是通过这几条指令 rdcycle, rdcycleh,rdinstr, rdinstrh。