RISC-V MCU中文社区

【分享】 关于蜂鸟E203的浮点指令集拓展(F拓展)

发表于 开源蜂鸟E203 2023-05-07 22:02:09
0
2249
1

1 队伍介绍

报名编号:CICC1907
团队名称:Hollow-SEKIRO-ARCAEA
学校名称:东南大学
指导老师:刘昊
团队成员:申烁、徐轶凡、林昊

这是我们第四篇分享文章。

2 关于蜂鸟E203的浮点指令集拓展(F拓展)

Whetstone中有很多浮点数运算,而蜂鸟e203中没有硬件支持,是通过将浮点数转化成整型数来计算,效率大大降低。
为了提高Whetstone跑分,我们计划拓展CPU的指令集,硬件上实现F/D指令集拓展。实现方式为在EXU内添加一个与ALU平行的模块:浮点处理单元(float point unit),专用于处理浮点指令。该单元可以更高效的执行浮点数计算:如加减、乘除、乘加、开方、比较等。我们计划先完成单精度浮点指令集(F)的拓展,可以执行以下26条指令:
Flw、fsw、fmadd.s、fmsub.s、fnmsub.s、fnmadd.s、fadd.s、fsub.s、fmul.s、fdiv.s、fsqrt.s、fsgnj.s、fsgnjn.s、fsgnjx.s、fmin.s、fmax.s、fcvt.w.s、fcvt.wu.s、fcvt.s.w、fcvt.s.wu、feq.s、flt.s、fle.s、fclass.s、fmv.w.x、fmv.x.w。除了改写EXU外,还可以使用协处理器来实现。
我们计划先添加一个单精度浮点运算单元(目前有加减乘除和仅加减两种)。扩展浮点运算指令子集(RV32F或者RV32D),需要添加一组专用的浮点寄存器组,总共需要32个通用浮点寄存器。其中RV32F浮点指令子集的每个通用浮点寄存器的宽度为32 bit;RV32D浮点指令子集的每个通用浮点寄存器的宽度为64 bit。浮点控制状态寄存器fcsr属于一个RISC-V控制状态寄存器,用于保存当前操作的浮点算术操作的舍入模式和计算异常,实时更新。每位的编码见官方文档。
图片alt
图来自文档The RISC-V Instruction Set Manual Volume I: Unprivileged ISA
需要实现的浮点指令(F拓展)及编码:
图片alt

在硬件实现时,我们尽量选择已有的电路,在测试其功能并完善后包装成一个独立的单元,专用于计算F指令,实现更高的性能。

3总结

为了完成基础功能:对蜂鸟E203 RISC-V内核的微架构实现进行一定优化,并通过Benchmark基准测试(Dhrystone、CoreMark、Whetstone)来进行系统性能测试。我们决定添加浮点处理单元来提高性能,本文是对F拓展指令集的概述。

喜欢1
用户评论
Lri-SKY

Lri-SKY 实名认证

懒的都不写签名

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