RISC-V MCU中文社区

【分享】 向量算术指令

发表于 全国大学生集成电路创新创业大赛 2023-05-31 21:25:40
0
988
0

向量算术指令有七种格式分别是OPIVV、OPFVV、OPMVV、OPIVI、OPIVX、OPFVF、OPMVX如下图所示。区分不同向量算术指令的条件就是源寄存器和目的寄存器的类型

向量指令可以有标量或者矢量源操作数、产生标量或者矢量结果。向量算术指令只对向量寄存器中的值进行操作。操作数可以是立即数、整数寄存器X、浮点寄存器F或者是一个向量寄存器的第0个元素。结果也可以写入整数寄存器X、浮点寄存器F或者是一个向量寄存器的第0个元素。

向量操作数存在一个有效元素宽度effective element width,一般情况下eew=sew,向量操作数也有一个有效元素组effective Lmul,一般情况下Emul=Lmul某些向量指令的源向量和目的向量元素个数相同但元素宽度不同,这种情况下eew和emul就不等于sew和lmul。但是二者比值相同这样才能保证元素个数相同。

所有标准向量浮点算术运算都遵循 IEEE-754/2008标准。所有向量浮点运算都使用frm寄存器中的动态舍入模式。当任何向量浮点指令使用 包含无效的舍入模式的frm字段时,即使它是不依赖于舍入模式的指令,或者其vl=0时,又或者此时vstart ≥ vl 时,都是非法的。所有向量浮点代码都依赖于frm中的有效值。当舍入模式无效时,具体实现可以使所有向量FP指令报告异常,以简化控制逻辑。

vector-vector运算从分别由vs2和vs1指定的向量寄存器组中获取两个操作数向量。vector-scalar 运算可以有三种可能的形式。在所有三种形式中,向量寄存器组操作数由vs2指定。第二个标量源操作数来自三个备选源之一:
对于整数运算,标量可以是5位立即数imm[4:0],编码在rs1字段中。除非另有说明,否则该值符号扩展到SEW位。对于整数运算,可以从rs1指定的标量x寄存器中获取标量。如果XLEN>SEW,除非另有说明,否则使用x寄存器的最低SEW位。如果XLEN < SEW,则要将x寄存器的值有符号扩展到SEW。
对于浮点运算,可以从标量f寄存器中获取标量。如果FLEN > SEW,则检f 寄存器中的值是否为有效的NaN-boxed([[NaN-Boxing]])值,在这种情况下,使用f寄存器的最低有效SEW位,否则使用规范的NaN值。保留任何浮点向量操作数的EEW不是受支持的浮点类型宽度(包括FLEN < SEW时)的向量指令。

喜欢0
用户评论
Cwl-Hunter

Cwl-Hunter 实名认证

Hunter

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板