首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RISC-V指令中的附加操作码重要吗?

RISC-V指令中的附加操作码重要吗?
EN

Stack Overflow用户
提问于 2022-10-04 01:51:01
回答 2查看 179关注 0票数 0

RISC-V的设计使得所有指令都具有相同的长度,因此存在不同类型的指令格式(I型、R型、S型等)。

R格式遵循这种模式-7位funct7,5位rs2,5位rs1,3位funct3,5位rd和7位操作码.

然而,i-格式遵循这种模式- 12位直接,5位rs1,3位funct3,5位rd和7位操作码.

我的问题是,考虑到操作类型在很大程度上是由操作代码决定的,那么在funct3、funct7等中附加操作代码的使用究竟是什么呢?

我的理论是,包括它们只是为了使所有指令的大小相等,但我很可能是错的。

EN

回答 2

Stack Overflow用户

发布于 2022-10-04 11:38:19

RISC-V的设计使得所有指令都具有相同的长度.

这是错误的。

RISC V允许可变长度指令,增量为2字节-- so _2字节,4字节,6字节,更多。

在7位操作码字段中,指令的最低字节(大部分:至少为64位指令)指示指令的大小,这是一个比其他指令集使用的更合理的方案(与多个前缀字节/指令的可能性相比较,后者的完整指令大小取决于指令的其余部分)。

在最低的2位中,值00、01或10意味着16位指令,而如果最低2位是11,那就意味着32位指令-除非接下来的3位是111,这是用来编码较大的指令大小,然后真正的大小使用更多的(操作码或其他)位。

我的理论是,包括它们只是为了使所有指令的大小相等,但我很可能是错的。

指令大小确实需要2字节的倍数,所以,是的,从某种意义上说,32位是一个甜蜜的点。然而,请放心,这些功能字段可以很好地考虑各种目的(比如自定义指令),而不仅仅是填充才能达到32位!

票数 2
EN

Stack Overflow用户

发布于 2022-10-04 04:29:19

RISC-V是一个简单的ISA,为扩展(新指令)留下了大量的编码空间。那是故意的。

具有固定宽度的指令是最初RISC思想的核心,即简单的流水线和并行解码。在经典RISC中,获取阶段是将程序计数器递增4,以便与被解码的最后一条并行地获取下一条指令。

使用16位压缩指令(如RV32C或ARM拇指)的良好格式,将16位和32位指令混合在一起并不是一个问题;您可以从缓冲区中获取大量的连续块并从缓冲区中提取指令。找到指令边界仍然是简单而快捷的。现代晶体管的预算,即使是对微控制器来说,也比最初设计MIPS时要大,而且更重要的是,即使是内部的超标量CPU也有可变的指令--每一个周期,所以有一个获取缓冲器是没有问题的。另请参阅现代微处理器90分钟指南!中的一些流水线和超标量(每个周期超过一条指令)基础知识。

让每条指令都有不同的位数,就像比特流甚至连字节边界都没有对齐一样,这是非常不方便的,特别是对分支而言。没什么事能做到这一点并不奇怪。但是即使使用字节对齐方式,x86的可变长度指令也是很难解码的,而且成本很高。(而且非常麻烦,以至于现代CPU缓存解码结果。)

RISC-V是由与MIPS相同的主设计师设计的,所有R型指令都有相同的“操作码”字段,使用"funct“字段来控制ALU。(I型和J型指令,以及RISC-V型,在其他地方没有空间,所以操作码字段实际上是正常意义上的操作码,决定哪些指令。)

RISC-V funct3 funct7 并不是真正独立的,它们是一个10位字段,恰好不是连续的。RISC-V手册解释了为什么它在直接字段和其他内容中传播到单独的字段:这使得其他字段在所有格式出现时总是位于相同的位置,从而在解码器中保存了一些互斥符。其他的田野在它们周围被隔开。https://stackoverflow.com/questions/39427092/risc-v-immediate-encoding-variants有几个答案,包括一个引用这些文档的答案。

RISC-V型指令只有一个funct3字段,没有funct7,所以在这种情况下,您只有一个3位字段。使用操作码+ funct3位来指定ALU应该执行的操作可能是有意义的,这样addiadd就可以尽可能地进行类似的解码。(我还没有看过RISC-V是如何设计其操作码的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73942402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档