RISC-V 指令集分析
其实接下来的指令介绍我刚开始不太确定要不要写,因为对于 CPU 设计和实现而言略有拖沓,但是熟练掌握指令格式还是对写 CPU 有帮助的。接下来的部分假如学过 RISC-V 指令集的可以跳过,并且也只是简单介绍下指令的特点和作用,并不会细讲,建议拿 RISC-V 指令集尝试实现一下 C 语言程序。(或者体会我们将一百多行 C 编译出来的机器码和汇编码做手动解释的痛苦,不过我当时是用 Java 程序自动完成的,得亏 RISC-V 指令集还算工整😛)
RISC-V指令为32位等长指令(不考虑其他短指令),其指令分为 R、I、S、B(SB)、U、J(UJ)型,结构较为工整。
-
rs1操作寄存器 1,一般是从中取出数据 -
rs2操作寄存器 2,一般是从中取出数据 -
opecode指令代码,用来代表是哪种指令(一般是大的类型,如 R、I、S、B、U、J型) -
funct7、funct3主要用来表明指令的具体功能(一般是小的类型,如有无符号) -
rd目的寄存器,一般是要写入的寄存器 -
imm立即数,后面的类似数组的调用即为类似数组的调用 : ),不过要注意的是有一部分类型(B,J型指令的立即数空了一位)
分析各个指令(详见RISC-V的指令说明书),易知 opecode 能够分辨指令的类型和部分同类型指令,同类型指令主要靠 funct3 和 funct7 分辨其操作不同。比如对于有符号操作和无符号操作,其差别仅为 funct7 的一位区别。
但是在实际写代码的时候是否要用这些特点就不好说了,一方面是用了之后可读性下降,而且判断不全面也会出现指令误判的可能,另一方面是用了是否能提升性能有待商榷,毕竟Vivado的综合能力还是蛮强的。
注意:
-
对于立即数扩展,还需要注意

本文详细介绍了RISC-V指令集的结构和各类指令,包括R、I、S、B、U、J型指令,解析了各字段的含义和使用场景,并通过实例说明了指令的应用。此外,还提到了立即数扩展和寄存器x0的特性,以及在CPU设计中考虑指令集的特点。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



