RISC-V MCU中文社区

【分享】 E203F指令集扩展

发表于 全国大学生集成电路创新创业大赛 2022-05-14 23:35:04
6
314
2

一、队伍介绍

大家好,我们是摸鱼怪小队,队伍编号CICC2355

二、蜂鸟E203 SoC的F指令集扩展

蜂鸟E203 SoC仅支持RV32I或RV32E指令集,如果要支持浮点数运算,需要扩展riscv的F指令集。

1 硬件支持

E203未给F指令集扩展留有通路,需要自行添加。

①F扩展需要FCSR与32个32位的F register。

②修改decode相关代码,添加F指令集相关译码。

③修改disp相关代码,添加fpu的指令派出部分。

④OITF部分已支持FPU相关接口,但内部未实现连接,需要重新设置宏定义并连接。

⑤FPU模块可使用开源的FPU

⑥写回部分:由于FPU有一些多周期的指令,需要添加FPU相关的长周期写回。

2 F扩展指令

如无特殊说明,所有数据来自于浮点寄存器。

FLW:将内存中的一个值以浮点数格式加载到浮点寄存器。其中rs1为整型寄存器。

FSW:将浮点寄存器中的一个数以加载到内存中。其中rs1为整型寄存器。

FMADD.S: rd=rs1rs2+rs3,所有数据来源以及目的地都是浮点寄存器

FMSUB.S:rd= rs1rs2-rs3。

FNMSUB.S :rd= -(rs1rs2-rs3)。

FNMADD.S : rd = -(rs1rs2+rs3)。

FADD.S:rd=rs1+rs2。

FSUB.S:rd=rs1-rs2。

FMUL.S:rd=rs1*rs2。

FDIV.S:rd=rs1/rs2。

FSQRT.S:rd=sqrt(rs1)。

FSGNJ.S、FSGNJN.S、FSGNJX.S:rd=rs1除符号位以外值,符号位来自rs2,FSGNJ.S直接取符号位,FSGNJN.S对符号位取反,FSGNJX.S将rs1与rs2符号位异或。

FMIN.S:rd=rs1与rs2中较小值。

FMAX.S:rd=rs1与rs2中较大值。

FCVT.W.S:将rs1单精度浮点数转化为rd整型,rd为整型寄存器。

FCVT.WU.S:将rs1单精度浮点数转化为rd无符号整型,rd为整型寄存器。

FMV.X.W:将rs1数据直接写入rd。rd为整型寄存器。

FEQ.S:判断rs1与rs2是否相等,并将结果写入rd,rd为整型寄存器。

FLT.S:同上,判断rs1是否小于rs2。

FLE.S:同上,判断rs1是否小于等于rs2。

FCLASS.S:判断rs1数据类型,写入rd,rd为整型寄存器。


FCVT.S.W:将rs1整型转化为rd单精度浮点数,rs1为整型寄存器。

FCVT.S.WU:将rs1无符号整型转化为rd单精度浮点数,rs1为整型寄存器。

FMV.W.X:将整型寄存器rs1中的数据直接写入浮点寄存器rd。

喜欢2
用户评论 (6)
摸鱼怪

摸鱼怪 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板