Post

RISCV

RISCV

1. 香山工具记录

1.1 基础工具介绍

香山处理器Tutorial

香山开源处理器用户手册

  1. 香山处理器使用 DiffTest 协同仿真框架进行仿真验证:对于根据riscv手册的两种实现, 给定相同的正确程序, 它 们的状态变化应当一致,其中一种是我们的CPU,另一种模拟器就可以了
  2. lightSSS,它可以在仿真进程出错时自动保存出错点附近的波形和debug信息
  3. Nexus-an,生成workload
  4. NEMU是参考模型,辅助香山比较和验证微架构
  5. ChiselDB来将结构化数据存储在数据库

香山VCS 验证框架–但不支持LightSSS 等验证工具

性能评估验证—还没看

1.2

2. RVV标准向量扩展介绍

推荐视频

陆旭凡-RVV学习

RISC-V Vector寄存器图解

1.1 基础概念

RVV-1.0-basic

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)

zve

This post is licensed under CC BY 4.0 by the author.