RISCV
RISCV
1. 香山工具记录
1.1 基础工具介绍
- 香山处理器使用 DiffTest 协同仿真框架进行仿真验证:对于根据riscv手册的两种实现, 给定相同的正确程序, 它 们的状态变化应当一致,其中一种是我们的CPU,另一种模拟器就可以了
lightSSS
,它可以在仿真进程出错时自动保存出错点附近的波形和debug信息- Nexus-an,生成workload
- NEMU是参考模型,辅助香山比较和验证微架构
ChiselDB
来将结构化数据存储在数据库
性能评估验证—还没看
1.2
2. RVV标准向量扩展介绍
推荐视频
1.1 基础概念
RISC-V “V” Vector Extension Version 1.0 -知乎
- VLEN:每个矢量寄存器(v0 - v31)的长度
- SEW(selected element width):vtype寄存器中的bit filed,用于规定默认情况下矢量指令对应的矢量元素的位宽,可设置的值为{8, 16, 32, 64} bits,若VLEN=128,则每个矢量寄存器包含{16, 8, 4, 2}个矢量元素。
- LMUL or EMUL (vector register group multiplier):vtype寄存器中的bit field,用于规定默认情况下矢量指令对应的矢量寄存器的个数
- EEW(effective element width):即矢量指令操作向量的实际元素位宽,每个矢量指令都有自己的实际元素位宽,一般情况下,EEW=SEW,某些指令需要自己指定EEW。
1.2 矢量加载指令的地址模式
矢量元素个数为VLEN/EEW*EMUL
- unit-stride:矢量中每个元素在内存的地址空间中是连续的
- stride:矢量中元素在内存的地址空间是不连续的,并且每个相邻元素的间距(stride)为固定的
- indexed:矢量中元素在内存的地址空间是不连续的,同时每个相邻元素的间距是不固定的
- indexed地址模式又可以细分为保序(ordered)和非保序(unordered)两种,而unit-stride以及strided均为非保序的。保序要求每个元素的访存行为按照其索引大小的顺序发生
1
2
3
4
5
6
7
8
9
10
#1)unit-stride: vd 为目的矢量寄存器, rs1 为内存基地址, vm为掩码(v0.t or <missing>)
vle8.v vd, (rs1), vm # EEW = 8b
#2)strided: ,vd 为目的矢量寄存器, rs1 为内存基地址, rs2 为stride
vlse8.v vd, (rs1), rs2, vm # EEW = 8b
#3)indexed: vd 为目的矢量寄存器, rs1 为内存机地址, vs2 为offset
vluxei8.v vd, (rs1), vs2, vm # unordered, EEW = 8b
vloxei8.v vd, (rs1), vs2, vm # ordered, EEW = 8b
- Minimum Vector Length Standard Extensions(Minimum VLEN 32~1024):用以拓展向量扩展的最小向量长度,有
Zvl32b
~Zvl1024b
六种 - zve扩展(Vector Extensions for Embedded Processors)
This post is licensed under CC BY 4.0 by the author.