认识RISC-V
文章目录
一、RISC-V指令集特点
RISC-V拥有规整的指令编码,能在流水线中今早尽快地读取通用寄存器。
RISC-V指令编码基本方式(举例):
- 三操作数指令:
(R-type)
31 - 25 | 24 - 20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|---|
function7 | rs2 | rs1 | funct3 | rd | opcode |
- 双操作数指令:
(S-type)
31 - 25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|---|
Imm[11:5] | rs2 | rs1 | funct3 | Imm[4:0] | opcode |
(I-type)
31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|
Imm[11:0] | rs1 | funct3 | rd | opcode |
- 单操作数指令
(U-type)
31 - 12 | 11-7 | 6-0 |
---|---|---|
Imm[31:12] | rd | opcode |
二、设计简单的RISC-V指令
a d d i x 18 , x 0 , 5 s w x 18 , 8 ( x 0 ) l w x 19 , 8 ( x 0 ) o r x 20 , x 18 b e q x 19 , x 20 , − 16 addi \quad x18,x0,5\\ sw\quad x18,8(x0)\\ lw\quad x19,8(x0)\\ or \quad x20,x18\\ beq \quad x19,x20,-16 addix18,x0,5swx18,8(x0)lwx19,8(x0)orx20,x18beqx19,x20,−16
a d d i x 18 , x 0 , x 5 addi \quad x18,x0,x5 addix18,x0,x5
31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|
Imm[11:0] | rs1 | funct3 | rd | opcode |
000000000101 | 00000 | 000 | 10010 | 0010011 |
转换为16进制地址:
00500913 |
---|
s w x 18 , 8 ( x 0 ) sw\quad x18,8(x0) swx18,8(x0)
31 - 25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|---|
Imm[11:5] | rs2 | rs1 | funct3 | Imm[4:0] | opcode |
0000000 | 10010 | 00000 | 010 | 01000 | 0100011 |
转换为16进制地址:
01202423 |
---|
l w x 19 , 8 ( x 0 ) lw\quad x19,8(x0) lwx19,8(x0)
31-20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|
Imm[11:0] | rs1 | funct3 | rd | opcode |
000000001000 | 00000 | 010 | 10011 | 0000011 |
转换为16进制地址为
00802983 |
---|
o r x 20 , x 18 , x 19 or\quad x20,x18,x19 orx20,x18,x19
31 - 25 | 24 - 20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|---|
function7 | rs2 | rs1 | funct3 | rd | opcode |
0000000 | 10011 | 10010 | 110 | 10100 | 0110011 |
转换为16进制位
001396A33 |
---|
b e q x 19 , x 20 , − 16 beq \quad x19,x20,-16 beqx19,x20,−16
31 - 25 | 24-20 | 19-15 | 14-12 | 11-7 | 6-0 |
---|---|---|---|---|---|
Imm[11:5] | rs2 | rs1 | funct3 | Imm[4:0] | opcode |
1111111 | 10100 | 10011 | 000 | 10001 | 1100011 |
转化为16进制为
FF4988E3 |
---|
流水线指令
a d d i x 1 , x 0 , 2 a d d i x 3 , x 0 , 6 a d d i x 5 , x 0 , 10 a d d i x 6 , x 0 , 2 a d d i x 0 , x 0 , 0 s u b x 2 , x 1 , x 3 a d d i x 6 , x 0 , 12 addi\quad x1,x0,2\\ addi\quad x3,x0,6\\ addi\quad x5,x0,10\\ addi \quad x6,x0,2\\ addi \quad x0,x0,0\\ sub \quad x2,x1,x3\\ addi\quad x6,x0,12\\ addix1,x0,2addix3,x0,6addix5,x0,10addix6,x0,2addix0,x0,0subx2,x1,x3addix6,x0,12
单个指令具体设计参考上文。
流水线时空图
指令 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
ADDI | IF | ID | EX | M | WB | ||||||
ADDI | IF | ID | EX | M | WB | ||||||
ADDI | IF | ID | EX | M | WB | ||||||
ADDI | IF | ID | EX | M | WB | ||||||
ADDI(空操作) | IF | ID | EX | M | WB | ||||||
SUB | IF | ID | EX | M | WB | ||||||
ADDI | IF | ID | EX | M | WB |
附表
RISC-V常用寄存器调用名
寄存器 | 调用名字 | 用途 | 存储者 |
---|---|---|---|
x0 | zero | 常数0 | N.A. |
x1 | ra | 返回地址 | Caller |
x2 | sp | 栈指针 | Callee |
x3 | gp | 全局指针 | / |
x4 | tp | 线程指针 | / |
x5-x7 | t0-t2 | 临时存储 | Caller |
x8 | s0/fp | 保存用寄存器/帧指针(配合栈指针界定一个函数的栈) | Callee |
x9 | s1 | 保存用寄存器 | Callee |
x10-x11 | a0-a1 | 函数参数/返回值 | Caller |
x12-x17 | a2-a7 | 函数参数 | Caller |
x18-x27 | s2-s11 | 保存用寄存器 | Callee |
x28-x31 | t3-t6 | 临时存储 | Caller |
f0-f7 | ft0-ft7 | 浮点临时存储 | Caller |
f8-f9 | fs0-fs1 | 浮点保存用寄存器 | Callee |
f10-f11 | fa0-fa1 | 浮点函数参数/返回值 | Caller |
f12-f17 | fa2-fa7 | 浮点函数参数 | Caller |
f18-f27 | fs2-fs11 | 浮点保存用寄存器 | Callee |
f28-f31 | ft8-ft11 | 浮点临时存储 | Caller |
关于R、I、U、S简单解释
R即Reg相关;I即立即数相关;S存储相关;B分支相关;U高位数相关(因为一条32位指令中无法表示高达32位的数据);J跳转相关。
RISC-V手册摘要
指令类型
基本指令集
手册其他内容请参照 RISC-V手册
–本附录内容是我结合RISC-V手册(中文版)第 58 页写的,如有错误请读者斧正
文章转载自 [原文地址] 暂不可见 建议使用Chrome内核的浏览器阅读,以保证阅读流畅