在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10441|回复: 10

[原创] RISC-V基本32位整数指令集(RV32I)概述

[复制链接]
发表于 2020-3-22 22:30:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 robin.zhu 于 2020-3-23 00:10 编辑

欢迎指正
risc-v基本32位整数指令集(RV32I)概述

RISC-V的指令集采用模块化划分,本文只讨论RISC-V基本32位整数指令集(RV32I), 文档参考riscv.org的指令集标准文档。
基本处理器有32位通用寄存器x0~x31和PC寄存器。x0是常数0只读寄存器(用于简化译码器和ALU格式),x1往往作为函数返回地址寄存器,x2往往作为栈指针.

1 RV32I概要(47条)
        RISC-V指令集已经基本固定,其中32位整数指令集是最基本也是必须实现的核心指令集。
        一共有47条。大致分类如下,具体指令格式以及参数说明在后续章节详解。        
1.1 用于系统相关指令10条,包括:
        1.1.1 FENCE类指令,目标是在没有MMU的情况下,多线程运行的环境下,运行中内存模式一致性。包括FENCE, FENCE.I共2条指令
        1.1.2 ECALL,EBREAK,系统调用指令。目的是实现操作系统必须的系统调用支持。包含ECALL,EBREAK共2条指令
        1.1.3 CSR(控制和状态寄存器)类指令,目标是对系统状态的维护和调用。包含CSRRW,CSRRS,CSRRC,CSRRWI,CSRRSI,CSRRCI共6条指令        
1.2 用户程序指令37条,包括:
        1.2.0 立即数指令,目的是辅助对寄存器完成立即数装载,包含LUI,AUIPC共2条指令
        1.2.1 跳转类指令,目的是完成程序的分支,包括无条件跳转和有条件跳转。包含JAL,JALR,BEQ,BNE,BLT,BGE,BLTU,BGEU共8条指令
        1.2.1 LOAD类指令,目标是从内存和MAPPING IO组成的存储器装载数据到寄存器。包含LB,LBU,LH,LHU,LW共5条指令
        1.2.2 STORE类指令,目标是从寄存器存储数据到内存和MAPPING IP组成的存储器。包含SB,SH,SW共3条指令
        1.2.3 核心ALU类指令,目标是在寄存器内加上可能存在的立即数参数进行比较、算数运算、逻辑运算、移位操作。共19条。可进一步细分为:
                比较操作:SLT,SLTI,SLTU,SLTIU
                逻辑运算:AND,ANDI,OR,ORI,XOR,XORI
                移位操作:SRA,SRAI,SRL,SRLI,SLL,SLLI
                算数操作:ADD,ADDI,SUB

2.RV32I指令格式
        2.1 RV32I,47条指令均为为32位定长指令。
        为了RISC-V CORE内部译码实现的方便,所有的RV32I指令都可以看成对齐的6段结构组成:
        IZ[31:25]|RSI2[24:20]|RSI1[19:15]|FUNCT3[14:12]|RDI[11:7]|OPCODE[6:0]
        对于RV32I,OPCODE最低2位是1。如果不是,则是其他子集的指令或者非法指令,比如00,01,10都属于16位压缩指令。
        对于OPCODE[6:2]有定义的值是:
                00000:LOAD类
                00011:FENCE类
                00100:ALU类含立即数参数操作
                00101:AUIPC
                01000:STORE类;
                01100:ALU类3寄存器参数操作(即ALU指令中助记符不以I结尾的指令)
                01101:LUI
                11011:跳转类
                11100:ECALL,EBREAK,CSR类               
        2.2 从格式上,RV32I的47条共分为R,I,S,U四类,部分指令的部分参数需要多段组合形成。         

         R(3寄存器ALU操作,立即数移位操作也属于特殊类型I指令)
         I(ALU类含立即数参数操作,但不包含立即数移位操作,JALR)
         S(条件跳转操作,STORE操作)
         U(LUI,AUIPC,JAL)
         具体格式如下:
        31                         25 | 24         20 | 19                15 | 14        12 | 11        7 | 6         0
        funct7                        | rs2             |  rs1                  | funct3       | rd            | opcode                 R-type
        imm[11:0]                                      | rs1                   | funct3       | rd            | opcode                I-type        
        imm[11:5]                  |rs2              |  rs1                  | funct3       | imm[4:0]  | opcode                S-type      
        imm[31:12]                                                                               | rd             | opcode                U-type        
        
        2.3 立即数操作
        立即数的高20位是通过LUI加载的,如果立即数对应地址空间,那么地址可以看成段页式。具体作用就是页内只有12位地址空间(4K字节)段有1M个空间,和在一切就是32位的4G空间。
        AUIPC则是PC现有值加上12位立即数存入RD寄存器。如果立即数为0,则直接取PC寄存器当前值。

3.RV32I指令列表说明(待续)




发表于 2020-11-10 14:00:43 | 显示全部楼层
good thanks
发表于 2020-11-16 15:20:56 | 显示全部楼层
good thanks
发表于 2020-12-15 12:14:39 | 显示全部楼层
goooood
发表于 2021-1-19 19:37:49 | 显示全部楼层
说的很明白
发表于 2021-3-19 14:23:30 | 显示全部楼层
后按资料 不错
发表于 2021-8-26 10:21:55 | 显示全部楼层
不错,很好的参考和备忘资料
发表于 2021-9-7 16:09:31 | 显示全部楼层
非常感谢
发表于 2022-4-14 21:29:50 | 显示全部楼层
good thanks
发表于 2022-8-8 17:10:22 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 17:21 , Processed in 0.035089 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表