RISC-V MCU中文社区

【分享】 向量扩展指令集

发表于 全国大学生集成电路创新创业大赛 2023-05-31 20:49:39
0
2687
1

在RISC-V标准向量扩展(RISC-V Vector Extension)中规定了如下图所示的从编程模型、寄存器映射规则到向量指令格式和存储一致性模型等一系列的规范。

向量指令集的扩展必须有如下两个参数:ELEN:element-length,处理器内部能够处理的一个向量元素的最大bit数,要求大于8且是2的整数次幂。VLEN:vector-length,一个向量寄存器的总bit数(宽度),VLEN应该大于等于ELEN,也是2的整数次幂。同时向量扩展在mstatus[10:9]字段添加了一个向量环境状态字段VS(vector status),并在sstatus[10:9]中被掩码。它的定义类似于浮点环境状态中的FS字段。当VS字段被设置为off时,试图执行任何矢量指令或者访问向量CSR都会被视为非法指令当VS字段设置为Initial或Clean时,执行任何改变向量状态的指令,包括向量csr,都会将VS更改为Dirty。
向量扩展在标准指令集基础上增加了32个向量寄存器,v0-v32。每个向量寄存器都有一个固定的VLEN状态位,用于确定每个寄存器的宽度。其中vtype寄存器主要包括vsew2:0和vmul2:0以及ta(tail agonostic)和ma(mask agnostic)。设置vtype是为了vector扩展指令集能够适配32位编码空间,在执行一条vector指令之前,可以分别使用vset、vl来设置vtype的字段和vector length。
vsew2:0:动态设置元素宽度。一般情况下一个寄存器被分为vlen/vsew个。vsew越大一个向量寄存器中的元素个数越小。
多个向量寄存器可以被组成一个group、比如一共32个通用寄存器、把lmul设置为8,就可以将通用寄存器分为4组,每组包含8个连续的向量寄存器。通过这样的分组可以增加向量寄存器组中的元素个数。
LMUL具体实现时必须支持1、2、4、8。同时它也可以支持1/2、1/4、1/8,但不是任意分数lmul都可以支持,它最小支持sew/elen,需要保证lmul乘elen大于等于1.
当存在混合向量长度时,小数(分数)的LMUL可以增加vector寄存器的利用率(可操作的元素宽度变小、则利用率变高)。例如vlen=128、sew=8、如果lmul=1/8则一条向量指令能够操作的向量元素宽度vlmax=vlen*lmul / sew。也就是一条向量指令最多能操作向量的两个元素。
ta(tail agnostic)表示向量寄存器因为vlen的原因不需要计算的部分是否保持不变。(比如vlmax为32、但vlen被设置为28,则vr的最后四个元素不需要被处理)
ma(mask agnostic)表示因为mask而被忽略的位是否需要需要保持不变
其中 mask 保存在 v0 中, 每 bit 代表一个 element是否被mask。目前只能使用v0寄存器做为mask寄存器。
向量指令执行期间、操作的元素可以分为四个不相交的子集。预启动元素(the prestart elements)、活跃元素(the active elements)、非活跃元素(the inactive elements)、尾部元素(the tail elements)。对于vta和vma有两种配置模式undisturbed(不受干扰)、agnostic(不可知)的处理方式。ta表示结尾不需要处理的数据不需要保持原来的值,tu表示结尾不需要处理的数据需要保持原来的值
Vset{i}lv{i}用来设置vl和vtype,从而控制后续的向量操作。其中第一个i表示vl部分是否使用立即数imm,第二个i表示vtype部分是否要使用imm。一般情况下都是用vsetvli,vsetvl一般只在环境切换的时候使用(用来恢复vl、vtype)。其中vstart定义了一条向量指令执行时的第一个元素在向量寄存器中的索引号,一条向量指令结束时会将vstar归零,vstart之前的向量值会保持undisturbed,如果一条向量指令引发了异常,则不会修改vstart。
向量控制状态寄存器(Vector control and status register Vcsr)包括vxrm和vxsat两个寄存器。控制寄存器定点舍入的模式(Vector fixed-point rounding mode register Vxrm),Vxrm[1:0]为可读可写寄存器、且通过单条csrwi指令写入值,一共四种模式。rnu 向距离近的方向舍入、当距离相等时、向上舍入;rne 向距离近的方向舍入、当距离相等时、向偶数方向舍入;rdn 向下舍入、直接取移位后的值;rod 舍入到奇数值方向。
向量定点饱和标志(Vector fixed-point saturation flag Vxsat)表示输出结果做了饱和截位以适应目的寄存器格式。当运算发生正溢出时,能取到最大正值的保留结果,当运算发生负溢出时,能取到负数最小值为保留结果。

喜欢1
用户评论
Cwl-Hunter

Cwl-Hunter 实名认证

Hunter

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