RISC-V MCU中文社区

【分享】 关于浮点指令集扩展实现之fsqrt指令的实现

发表于 全国大学生集成电路创新创业大赛 2023-05-10 15:00:23
0
830
0

队伍编号:CICC1449
队伍名称:礼堂盯帧电子研究所

摘要:

本文主要描述浮点数是如何实现开平方运算的。

简介

事实上,浮点数的开平方运算结构与定点数甚至整数的开平方运算结构是十分相似的,我们可以在对定点数求平方根运算结构的基础上,针对阶码域进行一些特殊处理。
浮点数开平方运算可以表达为以下公式:
图片alt
这里的符号位是逻辑零,这意味着平方根块总是期望正浮点数。平方根运算只在尾数部分进行,这可以通过任意一种平方根算法来实现。指数部分除以2,也就是右移1位。

###### 浮点数的平方根运算步骤为:浮点数的平方根运算步骤为:
1.从指数中减去偏置分量,求绝对差。
2.将结果右移一位,然后计算最后的指数。
3.找到尾数的平方根,考虑隐藏的部分。

下图展示了浮点数的平方根计算的基本方案。这里的架构十分通俗易懂。VRSH1块是控制右移块。平方根块能够计算小数的平方根。在指数计算路径中,放置了一个MUX,它在输入数的偏置和指数之间进行选择。这是由于在平方根过程中,分数的指数相对于原始指数应该增加。
图片alt

举例

我们考虑一个a=8的开平方运算
将a以半精度的浮点格式显示出来,a=0101_0000_0000_0000.其中[15]为符号位,[14:11]为阶码位,[10:0]位尾数位,阶码的偏移量为0111。
1.从指数中减去偏置分量,求绝对差。则指数为3(1010-0111=0011),因此输入数a是大于1的。
2.将结果右移一位,然后计算最后的指数。则运算后的指数为1(0011>>1=0001).2.将结果右移一位,然后计算最后的指数。则运算后的指数为1(0011>>1=0001).
3.将隐藏位接到尾数前面,得到的数为1000_0000_0000,此处[11]为整数位,[10:0]为小数位。因为其大于或等于整数1,我们需要额外将其右移1位,再输入到开平方模块中去。但硬件电路本身并不会区分小数和整数,我们只需要把它当作整数来计算即可。
4.开平方运算模块得出来的结果是1011_0101_0000。因此,尾数部分的值可表示为M=0110_1010_000。
5.而新的阶码位E=0111+0001=1000。
6.则最终结果为0100_0011_0101_0000。
喜欢0
用户评论
watermelon仔

watermelon仔 实名认证

懒的都不写签名

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