查看: 1103|回复: 0
收起左侧

RISC-V "V"(向量)扩展规范v0.9+文档(4)

[复制链接]

  离线 

  • TA的每日心情
    拍拍
    2022-6-27 11:09
  • 签到天数: 25 天

    [LV.4]

    发表于 2020-9-28 15:47:40 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 sky 于 2020-9-28 16:06 编辑


    关于这篇文章:

    本文主要翻译自 RISC-V "V"(向量)扩展的官方文档,翻译版本为目前最新版RISC-V "V"(向量)扩展规范文档,小部分地方有删减及排版调整。

    由于译者水平有限,本文可能存在谬误或不当之处,欢迎指正。

    以下为正文(连载中):


    8 向量 AMO 操作(Zvamo)
    Note: 是否支持向量 AMO 操作在配置文件里说明。预期用于 Unix 的配置文件的基本“ V”扩展需要支持向量 AMO 操作。

    如果要支持向量 AMO 指令,则必须存在标量 Zaamo 指令(标准 “A” 扩展的原子操作指令,atomic operations from the standard A extension)。

    向量 AMO 指令编码使用标准 AMO 主操作码下未使用的编码。每个活跃元素可以对单个内存位置执行原子性的读、修改、写操作。


    1. vs2[4:0] specifies v register holding address
    2. vs3/vd[4:0] specifies v register holding source operand and destination

    3. vm specifies vector mask
    4. width[2:0] specifies size of index elements, and distinguishes from scalar AMO
    5. amoop[4:0] specifies the AMO operation
    6. wd specifies whether the original memory value is written to vd (1=yes, 0=no)
    复制代码

    vs2 向量寄存器保存每个元素的字节偏移量,vs3 向量寄存器为原子操作提供源数据。

    除了没有 mew位(假定为零)外,AMO 与索引操作具有相同的索引 EEW 机制,因此偏移量只能有 EEW = 8、16、32、64。vs2 寄存器中字节偏移量的向量添加到 rs1 的基本标量寄存器中,从而得出 AMO 操作的地址。

    数据寄存器 vs3 使用动态的 SEW 和 MUL 设置值。

    如果 wd 位置1,则用内存元素的初始值写入 vd 寄存器。如果 wd 位清零,则不写入 vd 寄存器。

    Note: 如果 wd 值明确的话,内存系统并不需要返回原来的内存值,vd 中的原始值将被保留。

    Note: AMOs 可以部分覆盖源数据,从而对于实现寄存器重命名,可以减少总的内存管道读取端口数。同时也是为了支持与向量索引操作相同的寻址模式,并且也是由于主要用途是并行内存减少,向量 AMO 不太需要结果。

    相对于同一 hart 中其他指令的排序,向量 AMO 操作就好像每个元素的 aq 和 rl 位均为零。

    在同一向量 AMO 指令中的元素操作之间,向量 AMO 不提供任何顺序保证。

    国内芯片技术交流-RISC-V "V"(向量)扩展规范v0.9+文档(4)risc-v单片机中文社区(1)
    表11. 向量 AMO 宽度编码
    注:

    索引位(index bits)是指偏移量的 EEW 。

    内存位(Mem bits)是指在内存中访问元素的大小。

    寄存器位(Reg bits)是指在寄存器中访问的元素的大小。

    如果 EEW 小于 XLEN ,则 vs2 中的地址将加零扩展到 XLEN 。如果 EEW 大于 XLEN ,则会引发非法指令异常。

    只有 AMO 支持的内存数据元素宽度才支持向量 AMO 指令。其他元素宽度会引发非法指令异常。

    向量 amoop[4:0] 字段使用与标量5位 AMO 指令字段相同的编码,只是不支持 LR 和 SC 。

    国内芯片技术交流-RISC-V "V"(向量)扩展规范v0.9+文档(4)risc-v单片机中文社区(2)
    表12. amoop

    汇编语法中,目标寄存器位置使用 x0 ,表示不需要返回值( wd=0 )。

    1. # Vector AMOs for index EEW=32
    2. vamoswapei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    3. vamoswapei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    4. vamoaddei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    5. vamoaddei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    6. vamoxorei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    7. vamoxorei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    8. vamoandei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    9. vamoandei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    10. vamoorei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    11. vamoorei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    12. vamominei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    13. vamominei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    14. vamomaxei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    15. vamomaxei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    16. vamominuei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    17. vamominuei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0

    18. vamomaxuei32.v vd, (rs1), v2, vd,  v0.t # Write original value to register, wd=1
    19. vamomaxuei32.v x0, (rs1), v2, vs3, v0.t # Do not write original value to register, wd=0
    复制代码


    9 向量内存对齐约束
    如果通过向量内存指令访问的元素没有自然地与内存元素大小对齐,则该元素上会出现地址未对齐异常,或者该元素成功传输。

    向量内存访问满足与标量内存访问相同的原子性规则。


    10 向量内存一致性模型
    向量内存指令似乎按程序顺序在本地HART上执行。向量内存指令在指令级别满足 RVWMO ,并且在指令内对元素操作进行排序,就像由句法独立的标量指令的元素排序序列执行一样。

    向量索引排序存储将元素按元素顺序写入内存。

    向量索引无序存储不保留单个向量存储指令中写入的元素顺序。








    上一篇:RISC-V "V"(向量)扩展规范v0.9+文档(3)
    下一篇:RISC-V "V"(向量)扩展规范v0.9+文档(5)
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-19 17:24 , Processed in 0.686822 second(s), 48 queries .

    快速回复 返回顶部 返回列表