RISC-V V向量指令集学习笔记——访存指令

前言

为什么需要向量(矢量)指令集?

一般的处理器都是单指令单数据(SISD),处理数据能力有限。在面向人工智能领域,需要进行大量的矩阵运算、向量运算,已经难以满足计算需求,因此需要提高指令处理效率,一条指令处理多个数据,即SIMD。

SIMD指令和RV扩展的向量指令的区别?

SIMD指令中向量为固定长度,RV-V中的向量长度可由CSR某些位设置,更灵活;

寄存器大小可以设置,固定的寄存器文件空间可由用户自己切割

CPU中SIMD的向量运算如何执行?

图中,v1/v2/v3表示不同的向量寄存器,可以看到,一个向量寄存器可以存放多个元素,同时进入多个ALU中进行运算。

一、概念

VLEN:向量寄存器位宽

ELEN:单个向量元素最大位宽

SEW:一个选定元素位宽

EEW:指令实际操作的有效元素位宽 一般情况SEW=EEW 或EEW=nSEW

LMUL:一个寄存器组中寄存器的个数(要求寄存器中每个元素位宽为SEW,可取分数值,LMUL=1/2,1/4,1/8,1,2,4,8等)

EMUL: 寄存器中元素位宽为EEW时寄存器组中寄存器个数 其中,LMUL/SEW=EMUL/EEW

SEWLMUL1min:LMUL=1时SEW能取得最小值

SEWLMUL1max: LMUL =1时SEW能取到得最大值 一般=VLEN

VLMAX:一条向量指令可以操作的元素最大个数 VLMAX=LMUL×(VLEN/SEW)

field: 由EMUL个寄存器组成的寄存器组

NFIELDS:一个segment的field数量

二、访存向量指令格式

Load:

Store:

均为三种指令格式,分别对应三种寻址方式。

其中,目标寄存器Vd一定是向量寄存器,基址(源寄存器rs1)一定是整型寄存器。

  • load指令op为0000111;store指令op为0100111
  • width: 数据位宽 与mew共同决定了EEW的大小
  • mew:width的扩展字段
  • mop:寻址方式 00:单元步幅 01:乱序index 10:恒定步幅 11:顺序index
  • vm:是否使用掩码
  • nf:用于segment模式下field大小

指令汇编形式:

  • vle/vse+bit.v vd/vs3, (rs1) :单元步幅连续寻址 rs1内的地址每次按一个元素位宽(字节为单位)增加
  • vlse/vsse+bit.v vd/vs3, (rs1), rs2, vm : 恒定步幅连续寻址 rs2中存储的是有符号步幅增量
  • vluxei/vluxei+bit.v vd/vs3, (rs1), vs2, vm: 乱序index索引寻址 vs2中存储的是地址偏移量 vd/vs3中为参与访存的数据

三、寻址方式

  1. 单元步幅连续寻址

访存数据的地址每次顺序递增。扩展模式由lumop/sumop[4:0]决定。

lumop:

  • 00000: 单元步幅Load
  • 01000: 单元步幅,全寄存器load
  • 01011: 单元步幅,掩码load,EEW=8
  • 10000: 单元步幅,FOF 仅错误优先load

sumop:

  • 00000: 单元步幅store
  • 01000:单元步幅,全寄存器Store
  • 01011: 单元步幅,掩码Store,EEW=8

1) 掩码load/store

将目标寄存器中数据作为掩码

EEW=8

2)FOF Load模式

若load元素为0,响应异常且vl不变

若load其他元素,不响应异常,vl更新为出现异常的元素的index

对于外部中断,响应中断,将vstart设置为中断位置元素的index值

3)全寄存器load/store

读写整个向量寄存器组。load指令EEW由mew+width决定;store指令EEW=8bit

该模式主要应用于对当前寄存器组内存储内容的格式或有效长度未知的场景,为防止遗漏或造成错误则对整个寄存器组进行访存操作;或者应用于想对寄存器组内更多的数据进行访存操作但vl和vtype不方便修改的场景,例如中断保存以及断点恢复等。

  1. 恒定步幅连续寻址

访问内存是无序的,可前进可后退。

*若rs2=x0,则访存操作次数可少于目标寄存器的有效元素个数

若rs2=0,则必须对目标寄存器组的每一个有效元素都执行一次访存操作,依旧是无序的

  1. index索引寻址

需要对vs2[i]进行位宽扩展或者位宽截取

四、Segment模式访存

将向量寄存器整合成一个向量寄存器组(segment),一个Segment里有n个field。也分为以上三种寻址方式

  1. 单元步幅连续寻址

vl/sseg(nf)e(eew).v vd/vs3, (rs1),vm

eg: vlseg4e16.v vd, (rs1),vm : 将mem[rs1]~mem[rs1+7]4个16bit的数据分别存储在vd~vd+3的元素0位置,依次类推;

vsseg5e8.v vs3, (rs1), vm: 将vs3~vs3+4中的元素0的5byte数据存储在内存中mem[rs1]~mem[rs1+4]的位置,以此类推。

  1. 恒定步幅连续寻址

  1. index索引寻址

思考:第一个例子中,地址为何不是+4?

五、向量指令相关CSR

共七个CSR,vstart、vxsat、vxrm、vcsr、vl、vtype、vlenb,宽度均为XLEN,与RISC-V其他指令集对应的CSR统一编址

  1. vtype

指示元素在向量寄存器中如何排布,以及向量寄存器组中寄存器的构成,只读(可用vset(i)vl(i)更新)

  1. vl
  • 向量长度寄存器,表示寄存器中向量个数,只读。
  • 若vl=0或vstart>=vl则没有元素参与指令执行或者说向量指令不执行。
  • vl由指令vsetvl赋值,vl=min(AVL, VLMAX) VLMAX=vsew×vlmul AVL 为待处理的元素的个数
  1. vlenb

值固定为VLEN/8,只读

  1. vstart
  • 指示源寄存器中第一个被执行的向量元素的index,可读可写。
  • 任何向量指令及其相关指令执行完都会被清零
  • 目标寄存器中index=vstart的元素会被指令更新
  • 也可做中断断点状态记录,记录发生同步异常或者外部异常中断时正在执行元素的index
  1. vxrm
  • 规定向量定点舍入模式,只有低2bit为有效位,有符号无符号均满足相同的舍入方式,可读可写
  • 低d bit位为舍入位,则结果为:(v>>d)+r v>>d表示截掉d的部分

分别指四舍五入,向最近的偶数舍入,向下舍入,向奇数舍入

  1. vxsat

向量定点饱和标志,用来表示是否产生饱和结果,只有最低位有效,可读可写

  1. vcsr

可配置vxrm、vxsat

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于RISC-V RV32I指令集实现单周期处理器是一种常见的处理器设计方法。单周期处理器基于时钟周期,每个指令在一个时钟周期内执行完毕。下面是一个简单的实现方案,有助于理解单周期处理器的工作原理。 首先,需要实现一个指令存储器(Instruction Memory),用来存储指令序列。每个指令都有唯一的地址,通过访问指令存储器可以获取到对应地址处的指令。 然后,需要实现一个指令译码器(Instruction Decoder),用来解析并译码指令指令译码器可以将指令解析为操作码和操作数,并将其传递给执行单元。 接下来,需要实现执行单元(Execution Unit),用来执行指令操作码对应的操作。针对RISC-V RV32I指令集,执行单元需要能够实现指令集定义的各种操作,如算术逻辑运算、内存访问和分支跳转等。 此外,还需要实现寄存器文件(Register File),用于存储和访问处理器的寄存器。寄存器文件包含了一组通用寄存器,用于保存数据和计算结果。指令可以从寄存器文件读取数据,并将结果写回到寄存器。 最后,需要实现数据存储器(Data Memory),用于存储数据。数据存储器可以实现对内存的读写操作。 整个单周期处理器的工作流程如下:首先从指令存储器读取指令,然后通过指令译码器解析指令,并将解析结果传递给执行单元。执行单元执行对应的操作,并将结果写回寄存器文件。同时,执行单元也可以从寄存器文件读取操作数,并访问数据存储器进行内存读写操作。 需要注意的是,单周期处理器的时序较为简单,每个指令需要在一个时钟周期内执行完毕。因此,在处理器的设计应充分考虑指令的执行时间,并保证所有操作都能在一个时钟周期内完成。 总之,基于RISC-V RV32I指令集实现单周期处理器是一种常见的处理器设计方法,通过实现指令存储器、指令译码器、执行单元、寄存器文件和数据存储器,可以实现一个基本的单周期处理器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值