跳转至

控制线程指令

控制线程指令的长度为32位,采用ROCC格式,如下所示:

funct[6:0] rs2[4:0] rs1[4:0] xd xs1 xs2 rd[4:0] opcode[6:0]
roccinst src2 src1 xd xs1 xs2 dest custom-0/1

其中:

  • 自定义opcode遵从RISC-V指令集文档中给出的划分:
操作码
custom-0 0001011
custom-1 0101011
  • x*域标识相应的操作数/结果是否来自/写回相应的源寄存器/结果寄存器:
    • xs*置位,则操作数来自相应寄存器;否则为立即数/无效;
    • xd置位,结果写回控制线程rd寄存器。

向量配置指令

VSETVL/VSETVLI 指令根据其参数设置vtypevl寄存器的值,并将新的vl值写入rd寄存器。 新的vtype由立即数或者rs2寄存器保存的值来编码。 新的vl通过在rs1寄存器中的值与新的vtype设置下硬件支持的最大向量长度中取最小值取得。如果 rs1=x0 而 rd!=x0 ,则将vl设置为VLMAX。如果 rs1=x0 且 rd=x0 ,则修改vtype而保持vl不变。

VSETVL/VSETVLI指令编码格式如下:

funct[6:0] rs2[4:0] rs1[4:0] xd xs1 xs2 rd[4:0] opcode[6:0]
0000000 rs2 rs1 1 1 1 rd custom-0 VSETVL
imm[11:5] imm[4:0] rs1 1 1 0 rd custom-0 VSETVLI

向量移动指令

VMCS 指令将内容从控制线程的rs1寄存器移动到向量共享寄存器sd,VMCSH 设置高 32 位。VMCS 和 VMCSH 指令编码格式如下:

funct[6:0] rs2[4:0] rs1[4:0] xd xs1 xs2 rd[4:0] opcode[6:0]
0000000 10000 rs1 0 1 0 sd custom-1 VMCS
1000000 10000 rs1 0 1 0 sd custom-1 VMCSH

向量取指指令

VF指令根据目标地址执行一块向量指令代码。目标地址通过将12位有符号立即数加至rs1寄存器获得。VF指令编码格式如下:

funct[6:0] rs2[4:0] rs1[4:0] xd xs1 xs2 rd[4:0] opcode[6:0]
imm[11:5] 00000 rs1 0 1 0 imm[4:0] custom-1 VF

指令总览

funct[6:0] rs2[4:0] rs1[4:0] xd xs1 xs2 rd[4:0] opcode[6:0]
0000000 00000 rs1 1 1 1 rd 0001011 VSETVL
imm[11:5] imm[4:0] rs1 1 1 0 rd 0001011 VSETVLI
0000000 10000 rs1 0 1 0 sd 0101011 VMCS
1000000 10000 rs1 0 1 0 sd 0101011 VMCSH
imm[11:5] 00000 rs1 0 1 0 imm[4:0] 0101011 VF

最后更新: July 2, 2020
作者: Harry Chen (18.03%), Jianhui Han (52.46%), Jiajie Chen (3.28%), Jiajie Chen (26.23%)