【RISC-V 指令集】RISC-V DSP 扩展指令集介绍(一)

前言:

本笔记是基于对RISC-V DSP扩展指令集文档总结的,《P-ext-proposal.pdf》文档的关键内容如下:

主要介绍了RISC-V的P扩展指令集及其相关细节。

首先,对P扩展指令进行了概述,并列出了其与其他扩展重复的指令。

接着,详细描述了P扩展的子集,包括Zbpbo扩展和Zpn扩展(适用于RV32和RV64)的指令。

此外,还提供了仅适用于RV64的详细指令描述。

文档还介绍了新的用户控制和状态寄存器,并提供了指令编码表。最后,列出了因RVB重叠而被移除的指令。

这份文档为RISC-V的P扩展指令集提供了全面而详细的信息,包括指令的描述、编码、以及与其他扩展的关系。这对于理解、开发和优化基于RISC-V架构的系统非常有价值。同时,文档也提醒了开发者在使用P扩展时需要注意的兼容性和优化问题。

1. 介绍

数字信号处理(DSP)已成为现代电子系统的重要技术。广泛的现代应用利用DSP算法解决特定领域的问题,包括传感器融合、伺服电机控制、音频解码/编码、语音合成和编码、MPEG4解码、医学成像、计算机视觉、嵌入式控制、机器人、人机交互等。

提出的P指令集扩展提高了RISC-V CPU IP产品的DSP算法处理能力。通过添加RISC-V P指令集扩展,RISC-V CPU现在可以以更低的功耗和更高的性能运行这些各种DSP应用程序。

2. 缩写定义和术语

2.1 缩写定义

  • r.H == rH1: r[31:16],r.L == r.H0: r[15:0]

    • r.H 表示寄存器的高 16 位(位 31 到 16),等同于 rH1。
    • r.L 表示寄存器的低 16 位(位 15 到 0),等同于 r.H0。
  • r.B3: r[31:24],r.B2: r[23:16],r.B1: r[15:8],r.B0: r[7:0]

    • r.B3 到 r.B0 分别表示从高位到低位的 8 位段。
  • r.B[x]: r[(x8+7):(x8+0)]

    • r.B[x] 表示从第 x 个 8 位段开始的 8 位数据。
  • r.H[x]: r[(x16+15):(x16+0)]

    • r.H[x] 表示从第 x 个 16 位段开始的 16 位数据。
  • r.W[x]: r[(x32+31):(x32+0)]

    • r.W[x] 表示从第 x 个 32 位段开始的 32 位数据。
  • r.D[x]: r[(x64+63):(x64+0)]

    • r.D[x] 表示从第 x 个 64 位段开始的 64 位数据。
  • r[xU]: 64 位数的上 32 位;xU 代表包含此上部分 32 位值的 GPR(通用寄存器)编号。

  • r[xL]: 64 位数的下 32 位;xL 代表包含此下部分 32 位值的 GPR 编号。

  • r[xU].r[xL]: 由一对 GPR 形成的 64 位数。

  • s>>: 有符号算术右移。

  • u>>: 无符号逻辑右移。

  • u<<: 逻辑左移,从右侧移入 0。

  • SAT.Qn(): 饱和至 [-2n, 2n-1] 范围内,若发生饱和,则设置 OV 标志。

  • SAT.Um(): 饱和至 [0, 2m-1] 范围内,若发生饱和,则设置 OV 标志。

  • ROUND(): 表示"四舍五入",即向最高有效位加 1。

这些缩写定义和术语提供了对特定指令集或处理器架构中使用的寄存器和操作的简化表示。它们通常用于硬件描述语言、汇编语言或低级编程中,以简化复杂操作和提高代码可读性。

2.2. 术语

• Q格式(Qm.n):它描述了一个有符号的二进制定点数格式。"m"是包括符号位和整数位在内的位数,位于假想的二进制点之前,而"n"是跟随其后的分数位数。这种表示法代表一个在-2^(m-1)(包含)和2^(m-1)(不包含)范围内的有符号二进制定点值,该范围内有2^(m+n)个唯一值。例如,Q1.15表示一个在-1(包含)和1(不包含)范围内的数,该范围内有65536个唯一值。

• Qn:Q1.n的缩写格式。例如,Q7,Q15,Q31,Q63。

• Um:它表示一个无符号的二进制数,范围在0到(2^m)-1之间。

3. RISC-V P 扩展指令

3.1. SIMD 数据处理指令

3.1.1. 16位加法和减法指令

基于32位字元素内的两种16位算术运算类型的组合,SIMD 16位加/减指令可以分为6个主要类别:加法(两个16位加法)、减法(两个16位减法)、交叉加和减(一个加法和一个减法)、交叉减和加(一个减法和一个加法)、直接加和减(一个加法和一个减法)以及直接减和加(一个减法和一个加法)。

基于处理溢出条件的方式,SIMD 16位加/减指令可以分为5组:环绕(丢弃溢出)、有符号减半(通过丢弃最低有效位来保留溢出)、无符号减半、有符号饱和(剪裁溢出)和无符号饱和。

|----|-----------------------|------------------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | ADD16 rd, rs1, rs2 | 16-bit Addition |
| 2 | RADD16 rd, rs1, rs2 | 16-bit Signed Halving Addition |
| 3 | URADD16 rd, rs1, rs2 | 16-bit Unsigned Halving Addition |
| 4 | KADD16 rd, rs1, rs2 | 16-bit Signed Saturating Addition |
| 5 | UKADD16 rd, rs1, rs2 | 16-bit Unsigned Saturating Addition |
| 6 | SUB16 rd, rs1, rs2 | 16-bit Subtraction |
| 7 | RSUB16 rd, rs1, rs2 | 16-bit Signed Halving Subtraction |
| 8 | URSUB16 rd, rs1, rs2 | 16-bit Unsigned Halving Subtraction |
| 9 | KSUB16 rd, rs1, rs2 | 16-bit Signed Saturating Subtraction |
| 10 | UKSUB16 rd, rs1, rs2 | 16-bit Unsigned Saturating Subtraction |
| 11 | CRAS16 rd, rs1, rs2 | 16-bit Cross Add & Sub |
| 12 | RCRAS16 rd, rs1, rs2 | 16-bit Signed Halving Cross Add & Sub |
| 13 | URCRAS16 rd, rs1, rs2 | 16-bit Unsigned Halving Cross Add & Sub |
| 14 | KCRAS16 rd, rs1, rs2 | 16-bit Signed Saturating Cross Add & Sub |
| 15 | UKCRAS16 rd, rs1, rs2 | 16-bit Unsigned Saturating Cross Add & Sub |
| 16 | CRSA16 rd, rs1, rs2 | 16-bit Cross Sub & Add |
| 17 | RCRSA16 rd, rs1, rs2 | 16-bit Signed Halving Cross Sub & Add |
| 18 | URCRSA16 rd, rs1, rs2 | 16-bit Unsigned Halving Cross Sub & Add |
| 19 | KCRSA16 rd, rs1, rs2 | 16-bit Signed Saturating Cross Sub & Add |
| 20 | UKCRSA16 rd, rs1, rs2 | 16-bit Unsigned Saturating Cross Sub & Add |
| 21 | STAS16 rd, rs1, rs2 | 16-bit Straight Add & Sub |
| 22 | RSTAS16 rd, rs1, rs2 | 16-bit Signed Halving Straight Add & Sub |
| 23 | URSTAS16 rd, rs1, rs2 | 16-bit Unsigned Halving Straight Add & Sub |
| 24 | KSTAS16 rd, rs1, rs2 | 16-bit Signed Saturating Straight Add & Sub |
| 25 | UKSTAS16 rd, rs1, rs2 | 16-bit Unsigned Saturating Straight Add & Sub |
| 26 | STSA16 rd, rs1, rs2 | 16-bit Straight Sub & Add |
| 27 | RSTSA16 rd, rs1, rs2 | 16-bit Signed Halving Straight Sub & Add |
| 28 | URSTSA16 rd, rs1, rs2 | 16-bit Unsigned Halving Straight Sub & Add |
| 29 | KSTSA16 rd, rs1, rs2 | 16-bit Signed Saturating Straight Sub & Add |
| 30 | UKSTSA16 rd, rs1, rs2 | 16-bit Unsigned Saturating Straight Sub & Add |
[Table 1. SIMD 16-bit Add/Subtract Instructions]

3.1.2. 8位加法和减法指令

基于32位字元素内四个8位算术运算的类型,SIMD 8位加/减指令可以分为两大类别:加法(执行四个8位加法)和减法(执行四个8位减法)。

根据有符号或无符号运算中处理溢出条件的方式,SIMD 8位加/减指令又可以进一步分为五组:环绕(即丢弃溢出部分)、有符号减半(通过丢弃最低有效位来保留溢出)、无符号减半、有符号饱和(通过剪裁来处理溢出)和无符号饱和。

|----|---------------------|---------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | ADD8 rd, rs1, rs2 | 8-bit Addition |
| 2 | RADD8 rd, rs1, rs2 | 8-bit Signed Halving Addition |
| 3 | URADD8 rd, rs1, rs2 | 8-bit Unsigned Halving Addition |
| 4 | KADD8 rd, rs1, rs2 | 8-bit Signed Saturating Addition |
| 5 | UKADD8 rd, rs1, rs2 | 8-bit Unsigned Saturating Addition |
| 6 | SUB8 rd, rs1, rs2 | 8-bit Subtraction |
| 7 | RSUB8 rd, rs1, rs2 | 8-bit Signed Halving Subtraction |
| 8 | URSUB8 rd, rs1, rs2 | 8-bit Unsigned Halving Subtraction |
| 9 | KSUB8 rd, rs1, rs2 | 8-bit Signed Saturating Subtraction |
| 10 | UKSUB8 rd, rs1, rs2 | 8-bit Unsigned Saturating Subtraction |
[Table 2. SIMD 8-bit Add/Subtract Instructions]

3.1.3. 16位移位指令

Table 3. SIMD 16-bit Shift Instructions

|----|------------------------|------------------------------------------------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SRA16 rd, rs1, rs2 | 16-bit Shift Right Arithmetic |
| 2 | SRAI16 rd, rs1, im4u | 16-bit Shift Right Arithmetic Immediate |
| 3 | SRA16.u rd, rs1, rs2 | 16-bit Rounding Shift Right Arithmetic |
| 4 | SRAI16.u rd, rs1, im4u | 16-bit Rounding Shift Right Arithmetic Immediate |
| 5 | SRL16 rd, rs1, rs2 | 16-bit Shift Right Logical |
| 6 | SRLI16 rd, rs1, im4u | 16-bit Shift Right Logical Immediate\ |
| 7 | SRL16.u rd, rs1, rs2 | 16-bit Rounding Shift Right Logical |
| 8 | SRLI16.u rd, rs1, im4u | 16-bit Rounding Shift Right Logical Immediate |
| 9 | SLL16 rd, rs1, rs2 | 16-bit Shift Left Logical |
| 10 | SLLI16 rd, rs1, im4u | 16-bit Shift Left Logical Immediate |
| 11 | KSLL16 rd, rs1, rs2 | 16-bit Saturating Shift Left Logical |
| 12 | KSLLI16 rd, rs1, im4u | 16-bit Saturating Shift Left Logical Immediate |
| 13 | KSLRA16 rd, rs1, rs2 | 16-bit Shift Left Logical with Saturation & Shift Right Arithmetic |
| 14 | KSLRA16.u rd, rs1, rs2 | 16-bit Shift Left Logical with Saturation & Rounding Shift Right Arithmetic |

3.1.4. 8位移位指令

Table 4. SIMD 8-bit Shift Instructions

|----|-----------------------|-----------------------------------------------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SRA8 rd, rs1, rs2 | 8-bit Shift Right Arithmetic |
| 2 | SRAI8 rd, rs1, im4u | 8-bit Shift Right Arithmetic Immediate |
| 3 | SRA8.u rd, rs1, rs2 | 8-bit Rounding Shift Right Arithmetic |
| 4 | SRAI8.u rd, rs1, im4u | 8-bit Rounding Shift Right Arithmetic Immediate |
| 5 | SRL8 rd, rs1, rs2 | 8-bit Shift Right Logical |
| 6 | SRLI8 rd, rs1, im4u | 8-bit Shift Right Logical Immediate |
| 7 | SRL8.u rd, rs1, rs2 | 8-bit Rounding Shift Right Logical |
| 8 | SRLI8.u rd, rs1, im4u | 8-bit Rounding Shift Right Logical Immediate |
| 9 | SLL8 rd, rs1, rs2 | 8-bit Shift Left Logical |
| 10 | SLLI8 rd, rs1, im4u | 8-bit Shift Left Logical Immediate |
| 11 | KSLL8 rd, rs1, rs2 | 8-bit Saturating Shift Left Logical |
| 12 | KSLLI8 rd, rs1, im4u | 8-bit Saturating Shift Left Logical Immediate |
| 13 | KSLRA8 rd, rs1, rs2 | 8-bit Shift Left Logical with Saturation & Shift Right Arithmetic |
| 14 | KSLRA8.u rd, rs1, rs2 | 8-bit Shift Left Logical with Saturation & Rounding Shift Right Arithmetic |

3.1.5. 16位比较指令

Table 5. SIMD 16-bit Compare Instructions

|----|-----------------------|--------------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | CMPEQ16 rd, rs1, rs2 | 16-bit Compare Equal |
| 2 | SCMPLT16 rd, rs1, rs2 | 16-bit Signed Compare Less Than |
| 3 | SCMPLE16 rd, rs1, rs2 | 16-bit Signed Compare Less Than & Equal |
| 4 | UCMPLT16 rd, rs1, rs2 | 16-bit Unsigned Compare Less Than |
| 5 | UCMPLE16 rd, rs1, rs2 | 16-bit Unsigned Compare Less Than & Equal |

3.1.6. 8位比较指令

Table 6. SIMD 8-bit Compare Instructions

|----|----------------------|-------------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | CMPEQ8 rd, rs1, rs2 | 8-bit Compare Equal |
| 2 | SCMPLT8 rd, rs1, rs2 | 8-bit Signed Compare Less Than |
| 3 | SCMPLE8 rd, rs1, rs2 | 8-bit Signed Compare Less Than & Equal |
| 4 | UCMPLT8 rd, rs1, rs2 | 8-bit Unsigned Compare Less Than |
| 5 | UCMPLE8 rd, rs1, rs2 | 8-bit Unsigned Compare Less Than & Equal |

3.1.7. 16位乘法指令

Table 7. SIMD 16-bit Multiply Instructions

|----|----------------------|----------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SMUL16 rd, rs1, rs2 | 16-bit Signed Multiply |
| 2 | SMULX16 rd, rs1, rs2 | 16-bit Signed Crossed Multiply |
| 3 | UMUL16 rd, rs1, rs2 | 16-bit Unsigned Multiply |
| 4 | UMULX16 rd, rs1, rs2 | 16-bit Unsigned Crossed Multiply |
| 5 | KHM16 rd, rs1, rs2 | Q15 Signed Saturating Multiply |
| 6 | KHMX16 rd, rs1, rs2 | Q15 Signed Saturating Crossed Multiply |

3.1.8. 8位乘法指令

Table 8. SIMD 8-bit Multiply Instructions

|----|---------------------|---------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SMUL8 rd, rs1, rs2 | 8-bit Signed Multiply |
| 2 | SMULX8 rd, rs1, rs2 | 8-bit Signed Crossed Multiply |
| 3 | UMUL8 rd, rs1, rs2 | 8-bit Unsigned Multiply |
| 4 | UMULX8 rd, rs1, rs2 | 8-bit Unsigned Crossed Multiply |
| 5 | KHM8 rd, rs1, rs2 | Q8 Signed Saturating Multiply |
| 6 | KHMX8 rd, rs1, rs2 | Q8 Signed Saturating Crossed Multiply |

3.1.9. 16位其他指令

Table 9. SIMD 16-bit Miscellaneous Instructions

|----|------------------------|-------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SMIN16 rd, rs1, rs2 | 16-bit Signed Minimum |
| 2 | UMIN16 rd, rs1, rs2 | 16-bit Unsigned Minimum |
| 3 | SMAX16 rd, rs1, rs2 | 16-bit Signed Maximum |
| 4 | UMAX16 rd, rs1, rs2 | 16-bit Unsigned Maximum |
| 5 | SCLIP16 rd, rs1, imm4u | 16-bit Signed Clip Value |
| 6 | UCLIP16 rd, rs1, imm4u | 16-bit Unsigned Clip Value |
| 7 | KABS16 rd, rs1 | 16-bit Absolute Value |
| 8 | CLRS16 rd, rs1 | 16-bit Count Leading Redundant Sign |
| 9 | CLZ16 rd, rs1 | 16-bit Count Leading Zero |
| 10 | SWAP16 rd, rs1 | Swap Halfword within Word |

3.1.10. 8位其他指令

Table 10. SIMD 8-bit Miscellaneous Instructions

|----|-----------------------|------------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SMIN8 rd, rs1, rs2 | 8-bit Signed Minimum |
| 2 | UMIN8 rd, rs1, rs2 | 8-bit Unsigned Minimum |
| 3 | SMAX8 rd, rs1, rs2 | 8-bit Signed Maximum |
| 4 | UMAX8 rd, rs1, rs2 | 8-bit Unsigned Maximum |
| 5 | SCLIP8 rd, rs1, imm4u | 8-bit Signed Clip Value |
| 6 | UCLIP8 rd, rs1, imm4u | 8-bit Unsigned Clip Value |
| 7 | KABS8 rd, rs1 | 8-bit Absolute Value |
| 8 | CLRS8 rd, rs1 | 8-bit Count Leading Redundant Sign |
| 9 | CLZ8 rd, rs1 | 8-bit Count Leading Zero |
| 10 | SWAP8 rd, rs1 | Swap Halfword within Word |

3.1.11. 8位解压指令

Table 10. SIMD 8-bit Unpacking Instructions

|----|-------------------|---------------------------------|
| 序号 | 指令 | 说明 |
| 1 | SUNPKD810 rd, rs1 | Signed Unpacking Bytes 1 & 0 |
| 2 | SUNPKD820 rd, rs1 | Signed Unpacking Bytes 2 & 0 |
| 3 | SUNPKD830 rd, rs1 | Signed Unpacking Bytes 3 & 0 |
| 4 | SUNPKD831 rd, rs1 | Signed Unpacking Bytes 3 & 1 |
| 5 | SUNPKD832 rd, rs1 | Signed Unpacking Bytes 3 & 2 |
| 6 | ZUNPKD810 rd, rs1 | Unsigned Unpacking Bytes 1 & 0 |
| 7 | ZUNPKD820 rd, rs1 | Unsigned Unpacking Bytes 2 & 0 |
| 8 | ZUNPKD830 rd, rs1 | Unsigned Unpacking Bytes 3 & 0 |
| 9 | ZUNPKD831 rd, rs1 | Unsigned Unpacking Bytes 3 & 1 |
| 10 | ZUNPKD832 rd, rs1 | Unsigned Unpacking Bytes 3 & 2 |

RISC-V DSP扩展指令集文档:

https://download.csdn.net/download/u011376987/88898800

相关推荐
ManTou馒头2 天前
0 TMS320F28379D 开坑
dsp开发
灰海宽松2 天前
RISC-V在当前计算架构中的地位
架构·risc-v
启明智显4 天前
启明智显Model3A芯片方案7寸高清触摸屏ZX7D00CM21S:开箱、设置与实操全攻略指南
嵌入式硬件·物联网·risc-v·model3a·国产hmi芯片·hmi方案
小白在路上~5 天前
51单片机嵌入式开发:STC89C52操作8八段式数码管原理
c语言·单片机·嵌入式硬件·51单片机·dsp开发
小白在路上~5 天前
51单片机嵌入式开发:STC89C52操作GPIO口LED灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·dsp开发
乐思智能科技有限公司10 天前
CAN总线学习之路
驱动开发·单片机·嵌入式硬件·硬件工程·dsp开发
灰海宽松10 天前
RISC-V教学短视频同类视频调研报告
risc-v
灰海宽松10 天前
RISC-V教学内容及短视频吸引因素
risc-v
nn_3010 天前
deepin 加入甲辰计划,共建 RISC-V 繁荣生态
linux·开发语言·系统架构·risc-v
DOT小文哥13 天前
百问网全志D1h开发板LVGL9移植详细教程
elasticsearch·gui·lvgl·risc-v·全志·显示