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

RISC-V unprivileged ISA 简析

[复制链接]

  离线 

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

    [LV.4]

    发表于 2020-9-22 16:32:55 | 显示全部楼层 |阅读模式

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

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

    x
    本帖最后由 sky 于 2020-9-22 16:34 编辑

    1:RISC-V 指令集架构大致分为两部分,base指令集和extension指令集。现在这两部分都处于一个还在完善的阶段,截止到现在,它的base 指令集和extension的指令集状态如图:

    国内芯片技术交流-RISC-V unprivileged ISA 简析risc-v单片机中文社区(1)

    RISC-V unprivileged ISA


    标有Ratified标志的为已经被批准确认的指令集,像RV32I,M,A等。标有Draft标志的为还处于草案阶段,有些东西还有待修改,像V,P等。标有Frozen标志的表示虽然没有被确认但不希望在确认前有大的修改,像Ztso。

    2:RISC-V core在设计的时候可以根据core的设计意图选择所支持的模块化指令子集,如果想要低功耗和小面积可以选用RV32I,C等指令子集(支持的指令子集的数量一般会比较少),如果追求高性能,可以选择RV64I,M,C等指令子集(支持的指令子集的数量一般比较多),如果有浮点运算的需求,可根据浮点计算的精度选择F,D,Q指令子集。当然一个RISC-V core一定少不了对CSR的访问,所以理论上所有的core一定要支持Zicsr指令子集。

    3:现在RISC-V的core不是太多,主流的为32位RISC-V core,而且为了设计简单,很多RISC-V core不支持浮点运算(即只支持整数运算,这样不用设计FPU)。

    4:对于RV32I,它有32个32bit位宽的GPR(general purpose registers),即XLEN=32。其中寄存器x0的所有bit被硬件强制为0,剩下的31个x1~x31为通用目的寄存器。除此之外,有一个额外的寄存器用于存放当前指令的PC(program counter)值。

    国内芯片技术交流-RISC-V unprivileged ISA 简析risc-v单片机中文社区(2)

    RV32I gprs



    5:指令具有不同的编码格式,对于RV32I,共有六种编码格式。其中R,I,S,U为基本的编码格式,B,J为扩展编码格式。

    国内芯片技术交流-RISC-V unprivileged ISA 简析risc-v单片机中文社区(3)

    RV32I instruction formats



    6:RV32I主要完成四类常见的整数运算:一,整数的算数运算,像ADD,SUB,OR等,二,控制传输,像JAL,BEQ等,三,数据的加载和存储,像LW,SW等,四,环境操作,像ECALL,EBREAK等。

    7:M主要包含两大类整数运算:一,乘法运算,像MUL,MULH等,二,除法运算,像DIV,REM等。

    8:C是压缩指令,目的是将原本32位的指令用16位的指令代替(只有一部分指令操作可以代替),因此可以使code size变小,一般情况下C可以使code size减少25%~30%。一般常用的整数算数运算,控制状态指令和加载存储指令都可以部分被压缩指令代替(C.J,C.ADD,C.OR等)。C有自己的指令编码格式:

    国内芯片技术交流-RISC-V unprivileged ISA 简析risc-v单片机中文社区(4)

    RVC instruction formats



    9:Zicsr是控制状态寄存器(CSR)访问的专用指令子集,即CSR只能通过这个指令子集里的指令来访问(因为CSR实现的时候被单独map在一段4K的地址空间里)。常见的CSR操作有读,写,置位等。

    10:Zifencei是取指令fence指令子集,这个指令子集里也只有一条指令fence.i,用于写指令和读指令之间的同步。

    11:F,D,Q均为浮点指令子集,其中F位单精度(single-precision)浮点运算子集,D为双精度(double-precision)浮点运算子集,D为四精度(quad-precision)浮点运算子集。浮点运算会有额外的一组浮点运算的GPR:

    国内芯片技术交流-RISC-V unprivileged ISA 简析risc-v单片机中文社区(5)

    Floating-Point gprs



    12:A为原子操作指令子集,用于多线程之间的memory访问同步。

    13:RV64I是基于RV32I做的,只是register的位宽(XLEN)变成了64,剩下的L,B,J,T,V,P等均处于草案阶段,待完善。





    上一篇:一些关于RISC-V的质疑与解读
    下一篇:RISC-V RV32I中零寄存器有什么用?
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

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



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

    GMT+8, 2024-11-6 08:00 , Processed in 0.550572 second(s), 48 queries .

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