RISC-V MCU中文社区

【分享】 (四):蜂鸟E203扩展浮点指令设计(2)

发表于 全国大学生集成电路创新创业大赛 2023-05-14 18:25:43
0
1643
0

一、团队介绍

报名编号:CICC1327
团队名称:301小队

二、浮点指令介绍

2.6 浮点数符号注入指令

指令格式

fsgnj.s rd , rs1, rs2
fsgnjn.s rd , rs1, rs2
fsgnjx.s rd , rs1, rs2

fsgnj.s 指令的操作数均为单精度浮点数,结果的符号位来自操作数寄存器rs2的符号位,结果的其他位来自操作数寄存器rs1,将结果写回寄存器rd
fsgnjn.s 指令的操作数均为单精度浮点数,结果的符号位来自操作数寄存器rs2的符号位取反,结果的其他位来自操作数寄存器rs1,将结果写回寄存器rd
fsgnjx.s 指令的操作数均为单精度浮点数,结果的符号位来自操作数寄存器rs1和操作数寄存器rs2的符号位的异或操作,结果的其他位来自操作数寄存器rs1,将结果写回寄存器rd

三个指令可以采用一个模块实现,较为简单,单周期执行

2.7 浮点与整数互搬指令

指令格式

fmv.x.w rd, rs1
fmv.w.x rd, rs1

• fmv.x.w 指令将通用浮点寄存器 rs1中的单精度浮点数读出,然后写回通用整数寄存rd中。
• fmv.w.x 指令将通用整数寄存器 rs1中的整数读出,然后写回通用浮点寄存器rd中。

实现较为简单,需要注意读出的rs1的值的寄存器来源和写回的寄存器,可单周期实现

2.8 浮点数比大小指令

指令格式

flt.s rd , rs1, rs2
fle.s rd , rs1, rs2
feq.s rd , rs1, rs2

• flt.s 指令:如果通用浮点寄存器rs1中的单精度浮点数值小于rs2中的值,则结果为1,否则为0 ,将结果写回通用整数寄存器rd中。
• fle.s 指令:如果通用浮点寄存器rs1中的单精度浮点数值小于或者等于rs2中的值,则结果为1,否则为0,将结果写回通用整数寄存器rd中。
• feq.s 指令:如果通用浮点寄存器rs1中的单精度浮点数值等于rs2中的值,结果为1,否则为0,将结果写回通用整数寄存器rd中。

此三个指令可以和fmin,fmax指令采用同一个模块实现,其区别是,此三个指令返回的结果为1或者0,并且返回整数寄存器,可以一个周期实现

2.9 浮点数分类指令

指令格式

fclass.s rd, rs1

对通用浮点寄存器rs1中的单精度浮点数进行判断,根据其所属的类型产生一个10位的独热码结果,将结果写回通用整数寄存器rd中。如下所示

此指令可以对指令分类,对于其他指令而言也需要判断指令的类型,因此可以复用此模块节约资源。

三、总结

指令类型 数量
浮点数读写指令 6
浮点数运算指令 5
浮点数比较指令 5
浮点数乘加指令 4
浮点数格式转换指令 4
浮点数符号注入指令 3
浮点与整数互搬指令 2
浮点数分类指令 1

一共30条指令

喜欢0
用户评论
星河

星河 实名认证

懒的都不写签名

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