一种Posit浮点数处理器

文档序号:1378253 发布日期:2020-08-14 浏览:15次 >En<

阅读说明:本技术 一种Posit浮点数处理器 (Posit floating point number processor ) 是由 梁峰 赵科芃 吴斌 张国和 孙齐伟 于 2020-04-27 设计创作,主要内容包括:本申请提供了一种Posit浮点数处理器,涉及计算机技术领域。为用户提供了满足Posit标准的浮点数处理器。所述Posit浮点数处理器包括:解码电路、运算电路以及编码电路;所述解码电路用于根据CPU的计算指令,获取参与运算的多个目标Posit浮点数,并将所述多个目标Posit浮点数转换为各自对应的补码形式的中间数据;所述中间数据包括多个字段:符号字段、真实指数字段、第一尾数字段以及保护位字段;所述运算电路,用于根据所述计算指令,对接收的所述解码电路输出的多个中间数据进行运算,得到以补码形式的中间数据表示的运算结果;所述编码电路,用于根据所述计算指令中的指定格式,将所述运算结果转换为所述指定格式的Posit浮点数。(The application provides a Posit floating point number processor, and relates to the technical field of computers. A floating-point number processor that meets the Posit standard is provided for the user. The Posit floating point number processor includes: a decoding circuit, an arithmetic circuit, and an encoding circuit; the decoding circuit is used for acquiring a plurality of target Posit floating point numbers participating in operation according to a calculation instruction of the CPU, and converting the plurality of target Posit floating point numbers into intermediate data in a complementary code form corresponding to each target Posit floating point number; the intermediate data includes a plurality of fields: a sign field, a true exponent field, a first mantissa field, and a protection bit field; the arithmetic circuit is used for carrying out arithmetic on a plurality of received intermediate data output by the decoding circuit according to the calculation instruction to obtain an arithmetic result represented by the intermediate data in a complementary code form; and the coding circuit is used for converting the operation result into a Posit floating point number in a specified format according to the specified format in the calculation instruction.)

一种Posit浮点数处理器

技术领域

本申请涉及计算机技术领域,特别是涉及一种Posit浮点数处理器。

背景技术

浮点数是科学计算领域和高性能计算领域常用的数据表示方法,特别地,在对计算结果的精度要求较高的场合,大量运用浮点数进行数据处理,例如自动驾驶、航空航天、力学计算领域。

Posit标准的浮点数相较于IEEE 754标准的浮点数,灵活性更高,并且Posit浮点数在实数上的采样分布与sigmoid函数相关,而sigmoid函数是机器学习里常用的一种激活函数,因此将Posit浮点数用于机器学习,计算机进行数据处理的效率更高。

但目前商用计算机的浮点数处理器,大都是基于IEEE 754标准的浮点数处理器,并没有完全满足Posit标准的浮点数处理器。

发明内容

为解决上述问题,本申请实施例提供一种Posit浮点数处理器,为用户提供了满足Posit标准的浮点数处理器。

本申请实施例提供的Posit浮点数处理器包括:解码电路、运算电路以及编码电路;

所述解码电路用于根据CPU的计算指令,获取参与运算的多个目标Posit浮点数,并将所述多个目标Posit浮点数转换为各自对应的补码形式的中间数据;所述中间数据包括多个字段:符号字段、真实指数字段、第一尾数字段以及保护位字段;

所述运算电路,用于根据所述计算指令,对接收的所述解码电路输出的多个中间数据进行运算,得到以补码形式的中间数据表示的运算结果;

所述编码电路,用于根据所述计算指令中的指定格式,将所述运算结果转换为所述指定格式的Posit浮点数。

可选地,所述解码电路包括:第一异或器件、第二异或器件、反向前导零检测电路器件、第一移位电路器件、第一拼接电路器件、第一提取电路器件以及以下模块:

regime真实符号确定模块,用于通过所述第一异或器件对目标Posit浮点数的最高位与所述目标Posit浮点数的次高位进行异或操作,得到所述目标Posit浮点数的regime字段的真实符号;

regime字段统一模块,用于第一次除去所述目标Posit浮点数的最高位和次高位,第二次除去所述目标Posit浮点数的最高位和最低位,再通过所述第二异或器件对所述第一次除去的结果和所述第二次除去的结果进行异或操作,得到regime统一字段;

regime值计算模块,用于通过所述反向前导零检测电路器件对所述regime统一字段进行检测,并根据所述反向前导零检测电路器件的输出得到所述regime字段的取值字段;

提取模块,用于通过所述第一移位电路器件,将所述目标Posit浮点数的最高三位移出,并将移出最高三位后的所述目标Posit浮点数的剩余字段左移指定位数;所述指定位数是根据所述反向前导零检测电路器件的输出得到的;

所述提取模块,还用于根据所述目标Posit浮点数的指数字段的位宽,在左移后的目标Posit浮点数中,提取得到所述目标Posit浮点数的指数字段和第二尾数字段;

真实指数确定模块,用于在所述目标Posit浮点数是负数时,对所述指数字段进行取反,再通过所述第一拼接电路器件,将所述指数字段或取反后的所述指数字段与所述regime字段的取值字段进行拼接,得到并输出所述目标Posit浮点数对应的中间数据中的真实指数字段;

第一尾数字段确定模块,用于按照所述第一尾数字段的最大位宽,对所述第二尾数字段的低位补零得到所述第一尾数字段,输出所述第一尾数字段;所述第一尾数字段的最大位宽是所述目标Posit浮点数的总位宽减去所述目标Posit浮点数的符号位的位宽、所述指数字段的位宽,和所述regime字段的最小位宽得到的;

保护位输出模块,用于将每一位的值都为0的字段作为所述保护位字段,并输出所述保护位字段;所述保护位字段的位宽为3。

可选地,所述中间数据还包括无穷数字段和零值字段;所述解码电路还包括:无穷数确定模块和零值判断模块;

所述无穷数确定模块,用于在所述目标Posit浮点数是无穷数时,将所述目标Posit浮点数对应的中间数据的无穷数字段置为真;

所述零值判断模块,用于在所述目标Posit浮点数是零时,将所述目标Posit浮点数对应的中间数据的零值字段置为真。

可选地,所述中间数据还包括符号字段;所述解码电路还包括:符号判断模块;

所述符号判断模块,用于根据所述目标Posit浮点数的最高位,确定该目标Posit浮点数的符号,再以该目标Posit浮点数的符号作为该目标Posit浮点数对应的中间数据的符号,并输出该目标Posit浮点数对应的中间数据的符号字段为所述中间数据的符号。

可选地,所述编码电路包括:第二提取电路器件、第二移位电路器件、第二拼接电路器件以及以下模块:

指数字段编码模块,用于以所述第二提取电路器件,在所述运算结果的真实指数字段中,按照最低位到最高位的顺序,提取得到位宽与指数编码字段的位宽相同的字段,根据所述位宽与指数编码字段的位宽相同的字段得到所述指数编码字段,并以提取所述位宽与指数编码字段的位宽相同的字段后的所述真实指数字段,作为所述regime编码字段对应的数值;

regime格式确定模块,根据所述运算结果的符号字段和所述regime编码字段的符号,确定所述regime编码字段的填充格式;

regime字段编码模块,用于以所述第二拼接电路器件,将所述填充格式、所述指数编码字段、所述运算结果的第一尾数字段以及所述运算结果的保护位字段依次拼接,得到拼接字段,并以所述第二移位电路器件,依据所述regime编码字段对应的数值,将所述拼接字段算术右移,得到所述regime编码字段;

浮点数结果确定模块,用于利用所述保护位字段对向右移位后的所述拼接字段进行舍入操作,并对进行舍入操作后的所述拼接字段的最高位添加所述运算结果的符号字段,得到所述指定格式的Posit浮点数。

可选地,所述编码电路还包括输出模块:

所述输出模块用于在所述中间数据的无穷数字段真时,直接输出所述指定格式的Posit浮点数为表示无穷数的无穷数编码字段;

所述输出模块还用于在所述中间数据的零值字段为真时,直接输出所述指定格式的Posit浮点数为表示零值的无穷数编码字段。

可选地,所述反向前导零检测电路器件包括或器件,第一取反器件,第二取反器件;

所述反向前导零检测电路器件,用于以所述第一取反器件分别对多个位宽为2的输入字段的第0位进行取反运算,再以所述或器件,分别对多个取反结果和所述多个位宽为2的输入字段的第1位进行或运算,得到多个输出字段的第0位;所述位宽为2的输入字段是所述regime统一字段通过二分法处理后得到的;

所述反向前导零检测电路器件,还用于以所述或器件分别对所述多个位宽为2的输入字段的第0位和所述多个位宽为2的输入字段的第1位进行或运算,得到所述多个输出字段的第1位;

所述反向前导零检测电路器件,还用将所述多个输出字段拼接,得到所述regime统一字段的取值的反码。

可选地,所述regime值计算模块包括:

regime取值计算子模块,用于在所述regime字段的真实符号为正时,对所述反向前导零检测电路器件输出的反码取反,再对取反后的所述反向前导零检测电路器件输出的反码的最高位添加所述regime字段的真实符号,得到所述regime字段的取值字段;

regime取值计算子模块,还用于在所述regime字段的真实符号为负时,对所述反向前导零检测电路器件输出的反码的最高位添加所述regime字段的真实符号,得到所述regime字段的取值字段。

可选地,所述浮点数结果确定模块包括:

保护位子模块,用于在向右移位后的所述拼接字段的每一位都为0时,在向右移位后的所述拼接字段的最低位加1,在向右移位后的所述拼接字段的所有值都为1时,保持向右移位后的所述拼接字段不变;

所述保护位子模块,还用于在向右移位后的所述拼接字段中的任意两位的取值不相同,并且所述保护位的值大于4时,在向右移位后的所述拼接字段的最低位加1,或在向右移位后的所述拼接字段中的任意两位不相同,所述保护位的值等于4时,且向右移位后的所述拼接字段的最低位是1时,在向右移位后的所述拼接字段的最低位加1。

可选地,所述指数字段编码模块,还用于在所述中间数据的符号字段表示负数时,对所述位宽与指数编码字段的位宽相同的字段取反,得到所述指数编码字段;

在所述中间数据的符号字段表示正数时,将所述位宽与指数编码字段的位宽相同的字段作为所述指数编码字段。

本申请实施例提出的Posit浮点数处理器,利用解码电路,将根据计算指令得到的Posit浮点数转换为补码形式的中间数据,中间数据包含了表示特殊Posit浮点数的无穷数字段和零值字段,以使运算电路和编码电路在计算参数或计算结果是特殊Posit浮点数时,可以直接输出表示特殊Posit浮点数的无穷数编码字段或零值编码字段,提高了Posit浮点数处理器的输出效率。

运算电路可以直接使用中间数据中的真实指数字段、第一尾数字段进行运算,并且对Posit浮点数的组成字段进行提取和拼接后,就可得到真实指数字段和第一尾数字段,真实指数字段和第一尾数字段为补码形式的定点数,多个中间数据根据计算指令进行运算后,得到的中间数据表示的运算结果,仍然是补码形式的定点数,编码电路只需按照CPU处理器指定的格式,将补码形式的定点数转换为Posit浮点数的编码格式,就可以完成Posit浮点数的编码。上述过程不需要多次的原码到补码的相互转化的过程,简化了Posit浮点数的处理操作。

中间数据中的符号字段可以直接用于运算电路中,对得到运算结果的符号,还可以用于编码电路中,得到regime编码字段,并直接作为最终表示运算结果的Posit浮点数的最高位,不用再考虑补码时,正负Posit浮点数的编码形式的差异,简化了Posit浮点数的处理操作。

中间数据中的保护位字段,用于运算电路中,对运算结果进行舍入操作,还可以用于编码电路中,对编码过程进行舍入操作,使Posit浮点数处理器的工作符合Posit浮点数的规范。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例解码电路的结构示意图;

图2是本申请实施例提出的反向前导零检测电路器件的结构示意图;

图3是本申请实施例提出的Posit浮点数处理器的结构示意图;

图4是本申请实施例提出的编码电路的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

Posit浮点数是由新加坡国立大学的教授John L.Gustafson提出的一种新型浮点数标准(也叫Unum浮点标准,Posit是第三版Unum标准),该标准定义了与IEEE 754不同的数据格式和算术规则。Posit与IEEE 754相比,具有数据格式灵活、动态范围大、异常格式少、精度高等优势。具体不限于以下列举的优势:

Posit浮点数在实数上的采样分布与sigmoid函数相关,而sigmoid函数是当前流行的机器学习里常用的一种激活函数。经过实践得到,Posit浮点数在拟合sigmoid函数时非常方便,因此将Posit浮点数应用在机器学习领域,可以简化相关的硬件设计。

相比于IEEE 754浮点数在约定浮点数的总位宽时,需要满足IEEE 754-2008中规定的位宽格式,即16bit的半精度、32bit的单精度、64bit的双精度和128bit四精度四种位宽。Posit浮点数在满足应用的需求的情况下,可以选择任意格式的位宽,既可以选择32bit,也可以选择31bit、33bit、30bit等等,体现了Posit浮点数的灵活性。相比于IEEE754浮点数为了利用更多的编码空间,规定了隐藏位为0的非常规数,而Posit浮点数的隐藏位永远是1,减小了硬件的复杂性。

现有技术下,对Posit浮点数的处理仍处于理论研究阶段,没有能够投入商业应用的Posit处理器。并且,目前对Posit浮点数的处理方法的研究方向是,先利用解码电路将Posit浮点数转换为原码,输入运算电路,运算电路为方便运算,将原码转换为补码,得到补码的运算结果后,再转换为原码的运算结果,输入编码电路,编码边路最后将原码的运算结果转换为Posit浮点数。整个处理过程需要反复地进行原码到补码,以及补码到原码的转换,逻辑复杂,导致大量额外的操作,造成整体的Posit浮点数处理电路面积大。

鉴于上述问题,本申请实施例提出一种Posit浮点数处理器,用于将Posit浮点数解码为补码形式的中间数据,以中间数据进行运算,再将运算结果编码,得到Posit浮点数的运算结果。本申请实施例提出的Posit浮点数处理器,能够将Posit浮点数解码为能够直接参与运算的中间数据,解决了现有方案中必须将Posit浮点数转换为其取值的二进制编码才能进行运算的缺陷,以及整个Posit浮点数的处理过程中,需要大量的从原码到补码,和从补码到原码的转换计算的缺陷。

浮点数是在计算机技术中,用以近似表示任意某个实数的科学计数法。以实数M×2e为例,M是尾数,2是基数,e是指数。计算机中参与运算的数据都用二进制表示,因此无论是IEEE 754浮点数还是Posit浮点数,基数都是2。

Posit浮点数在约定总位宽后,还会对指数的位宽进行约定。一般地,对于总位宽是32bit的Posit浮点数,通常约定2-4bit的位宽作为Posit浮点数的指数位宽,对于总位宽是8bit的Posit浮点数,通常约定1-2bit的位宽作为Posit浮点数的指数字段的位宽。包括指数字段在内,Posit浮点数标准规定了Posit浮点数具有以下字段:

一:符号字段。符号字段通常是Posit浮点数的最高位。

二、regime字段,位于符号字段后,regime字段由从最高位到次低位的一串连续的1和最低位的0组成,最低位的0是翻转位,或由最从高位到次低位的一串连续的0和最低位的1组成。在regime字段为正时,regime字段的取值为连续的1的个数减1,在连regime字段为负时,regime字段的取值为0的个数取负。regime字段的宽度可以是任意的。例如:在regime字段是1110时,其取值为3-1=2;在regime字段是0001时,其取值为-3。

三、指数字段,若regime字段没有用完事先约定的总位宽,regime字段后紧跟指数字段,位指数字段宽为事先约定的位宽。指数字段是无符号整数,其取值一定大于零。

四、尾数字段,即第二尾数字段,若指数字段和regime字段没有用完事先约定的总位宽,剩余的全部位宽为尾数字段的位宽。可以理解的是,在十进制中,由于尾数是一个大于等于1.0、小于10的小数,其整数部分取1至9中任意一个整数。二进制中,尾数的整数部分只可能是1,为了减少不必要的编码,Posit浮点数标准将整数位作为隐藏位,只在Posit浮点数的尾数字段记录小数位。例如:如果尾数字段是1001,那么它加上隐藏位就是11001,对应的十进制取值是1×20+1×2-1+0×2-2+0×2-3+1×2-4=1.5625。在Posit浮点数标准中,还定义了useed的概念,useed用于在数值上统一regime字段和指数字段。useed的值与事先约定的Posit浮点数的指数字段的位宽有关,对于任意的格式固定的Posit浮点数,useed的值也是固定的。假设指数字段的位宽是es,则useed的取值为例如,es=1时,es=2时,假设一个Posit浮点数的符号为s,regime的值为r,指数的值为e,含隐藏位的尾数值为m,那么该Posit浮点数对应的十进制实数为:

(-1)s×useedr×2e×m

目前在Posit浮点数的相关研究中,将Posit浮点数转换为原码,即将符号为负的Posit浮点数转换为绝对值,绝对值是该符号为负的Posit浮点数对应的正数,再加上表示负数的符号位。由于计算机采用补码进行运算,运算电路在运算时,需要将该符号为负的Posit浮点数对应的正数的尾数部分再转换为补码;在编码过程中,再次需要将补码转换为原码。由此可见,整个对Posit浮点数的处理器需要多个进行原码到补码的相互转换的电路,造成用于处理Posit浮点数的电路的面积较大、发热较大。

本申请实施例独创了补码型的解码电路,以独创的解码电路将Posit浮点数解码为可以直接参与运算的中间数据,再使用运算电路直接以中间数据进行运算,得到以中间数据表示的运算结果,最后使用独创的补码型编码电路将运算结果编码为Posit浮点数。整个对Posit浮点数的处理过程(解码、运算、编码)都以补码进行,没有大量的补码原码转化,减少了功耗。

上述对Posit浮点数的处理的各个电路和模块已经集成到开源RISC-V(基于精简指令集原则的开源指令集架构)处理器RocketChip(基于开源硬件构造语言开发的一款开源集成芯片生成器)中,构成了本申请提出的Posit浮点数处理器,可以执行所有的浮点指令,并正确完成相应的功能。

参考图1,图1是本申请实施例解码电路的结构示意图。首先对Posit浮点数处理器的解码电路进行说明。解码电路包括:无穷数确定模块101、零值判断模块102、符号判断模块103、regime真实符号确定模块104、regime字段统一模块105、regime值计算模块106、提取模块107、真实指数确定模块108、第一尾数字段确定模块109、保护位输出模块110。

所述解码电路用于根据CPU的计算指令,获取参与运算的多个目标Posit浮点数,并将所述多个目标Posit浮点数转换为各自对应的补码形式的中间数据;所述中间数据包括多个字段:符号字段、真实指数字段、第一尾数字段以及保护位字段;

相较于目前在计算Posit浮点数之前,需要通过判断Posit浮点数的符号来判断是否对Posit浮点数进行补码的转换,本申请实施例中的符号字段可以直接参与运算,减少了Posit浮点数在运算前和运算完成后的逻辑判断。

目标Posit浮点数是解码电路根据计算指令获取的待解码的Posit浮点数。因目标Posit浮点数是参与运算的,所以目标Posit浮点数的个数是两个或大于两个,解码电路可以对多个目标Posit浮点数可以同时解码,也可以依次解码。

本申请实施例设置的中间数据是定点数的格式,具体包括:无穷数字段、零值字段、符号字段、真实指数字段、第一尾数字段和保护位字段。

为区分中间数据和目标Posit浮点数的尾数字段,以第一尾数字段表示将中间数据中的尾数字段,以第二尾数字段表示目标Posit浮点数的尾数字段。

Posit浮点数中只有两个特殊编码:以所有位数全部是0的编码表示实数0,以最高位是1,其余位数全部是0的编码表示无穷数。因此,在解码电路设置了无穷数确定模块和零值判断模块,以对特殊编码的目标Posit浮点数作标记,使运算电路在根据标记识别到特殊编码的目标Posit浮点数时,能够直接输出,对多个特殊编码的目标Posit浮点数运算后的运算结果,进而使编码电路在运算结果是表示特殊编码的中间数据时,能够直接输出表示无穷数的编码和表示零的编码。根据上述分析可知,本申请提出的Posit浮点数处理器处理特殊编码的目标Posit浮点数的过程,更加快捷。

假设指定格式是Posit<8,1>,那么无穷数的编码是10000000,零的编码是00000000。

解码电路还包括:无穷数确定模块101和零值判断模块102;

所述中间数据还包括无穷数字段和零值字段;所述解码电路还包括:无穷数确定模块和零值判断模块;

所述无穷数确定模块101,用于在所述目标Posit浮点数是无穷数时,将所述目标Posit浮点数对应的中间数据的无穷数字段置为真;

所述零值判断模块102,用于在所述目标Posit浮点数是零时,将所述目标Posit浮点数对应的中间数据的零值字段置为真。

在无穷数确定模块判断得到目标Posit浮点数不是无穷数时,将零值字段和无穷数字段置为假。无穷数确定模块101、零值判断模块102和符号判断模块103并联,无论无穷数字段和零值字段是否为真,解码电路都会对目标Posit浮点数解码,得到符号字段、真实指数字段、第一尾数字段以及保护位字段。无穷数字段和零值字段用于保证因目标Posit浮点数是零或无穷数,而导致的运算结果是零或无穷数时,无论依据符号字段、真实指数字段、第一尾数字段以及保护位字段计算后得到的编码是否是零或无穷数的编码,以及无论依据符号字段、真实指数字段、第一尾数字段以及保护位字段计算得到特殊编码的计算效率,Posit浮点数处理器都能够快捷准确地输出表示零或无穷数的Posit浮点数。

所述中间数据还包括符号字段;所述解码电路还包括:符号判断模块;

所述符号判断模块103,用于根据所述目标Posit浮点数的最高位,确定该目标Posit浮点数的符号,再以该目标Posit浮点数的符号作为该目标Posit浮点数对应的中间数据的符号,并输出该目标Posit浮点数对应的中间数据的符号字段为所述中间数据的符号。

根据Posit浮点数标准,目标Posit浮点数的最高位为符号位。当目标Posit浮点数不是无穷数或零时,若其最高位是1时,目标Posit浮点数为负数,以1作为符号字段,若其最高位是0时,目标Posit浮点数为正数,以0作为符号字段。中间数据的符号字段是解码电路解析Posit浮点数编码后,直接以Posit浮点数的最高位,即Posit浮点数的符号字段作为符号字段。

解码电路还包括:第一异或器件、第二异或器件、反向前导零检测电路器件、第一移位电路器件、第一拼接电路器件、第一提取电路器件。

regime真实符号确定模块104,用于通过所述第一异或器件对目标Posit浮点数的最高位与所述目标Posit浮点数的次高位进行异或操作,得到所述目标Posit浮点数的regime字段的真实符号;

由于Posit浮点数整体是补码形式,因此负数的Posit浮点数的regime字段的符号,并不能直接由该Posit浮点数的regime字段的形式判断得到。具体表现在Posit浮点数在表示负数的时候,并不是将对应的正数的符号改成1,而是像补码一样,将Posit浮点数整体取反加一。例如,假设目标Posit浮点数的格式是Posit<8,1>,目标Posit浮点数是01011000,01011000表示3,但-3并不是11011000,而是10100111+1=10101000。

本申请实施例以regime真实符号确定模块,仅以异或电路器件对两位数(目标Posit浮点数的最高位和次高位)进行计算,就能分辨目标Posit浮点数中的regime字段的真实符号,减少了电路的面积,并且减少了Posit浮点数处理器运行时的发热。

继续以上述关于regime字段的示例进行说明,假设从Posit浮点数中获取regime字段的形式是1110,在Posit浮点数是正数时,Posit浮点数的regime字段是1110;在Posit浮点数是负数时,整个Posit浮点数是由另外一个编码补码得到的,必然地其中的regime字段也是由另一个编码0001补码得到的。

鉴于此,本申请实施例提出的Posit浮点数的解码电路以regime真实符号确定模块得到Posit浮点数中regime字段的真实符号。

regime真实符号确定模块的工作原理是:二进制的任意位数与0异或保持不变,与1异或取该位数的反码。Posit浮点数是正数时,最高位是0,0与regime字段的第一位异或,regime字段的第一位保持不变;Posit浮点数是负数时,最高位是1,1与regime字段的第一位异或,regime字段的第一位取反。例如,Posit浮点数是01110,regime字段1110是正数,Posit浮点数是11110,regime字段1110应该是0001,是负数。本申请实施例结合异算法的特点和regime字段本身的性质,以异或器件仅对最高位和次高位两位数进行异或,就能得到regime字段的真实符号,电路简单,不需要增加其他运算电路。

regime字段统一模块105,用于第一次除去所述目标Posit浮点数的最高位和次高位,第二次除去所述目标Posit浮点数的最高位和最低位,再通过所述第二异或器件对所述第一次除去的结果和所述第二次除去的结果进行异或操作,得到regime统一字段;

第一次除去是将目标Posit浮点数除去最高位和次高位;第二次除去是将相同的目标Posit浮点数除去最高位和最低位。第一次除去和第二次除去指的是,对于同一目标Posit浮点数,分别对其除去最高位和次高位,除去最高位和最低位。其中第一和第二并不表示对步骤执行顺序的限制。

regime字段统一模块的工作原理是:除去最高位和最低位后的Posit浮点数,与除去最高位和次高位后的Posit浮点数,会相差一位,而regime字段的最低位会翻转,因此regime字段的最后一位一定会与regime字段次低位异或,属于不同数的异或,regime字段的最低位之前的位数异或都是相同数的异或,而不同的数异或得到的是1,相同的数异或得到的是0,进而,得到的regime统一字段一定是以一串0再加1的形式。regime统一字段是将前导0的regime字段和前导1的regime字段进行统一后的字段。

例如,假设目标Posit浮点数是“0|110|0|000”,第一次除去的结果是“110|0|00”,第二次除去的结果是“10|0|000”,将“0|110|0|000”和“10|0|000”进行异或后,得到regime统一字段“01|0000”。

本申请实施例通过regime字段统一模块,将regime字段的两种编码形式,统一为一种编码形式,以达到直接通过一个前导零检测电路,就能得到所有regime字段(例如:11110和00001)的值的效果,避免了对两种编码形式的regime字段需要分别使用前导零检测电路和前导一检测电路的缺陷,避免了同时使用前导零检测电路和前导一检测电路导致的电路面积过大。

regime值计算模块106,用于通过所述反向前导零检测电路器件对所述regime统一字段进行检测,并根据所述反向前导零检测电路器件的输出得到所述regime字段的取值字段;

所述regime字段的取值字段是以二进制表示的regime字段的取值。

本申请另一种实施例提出,以反向前导零检测电路对regime统一字段进行检测,得到regime字段的值的方法。参考图2,图2是本申请实施例提出的反向前导零检测电路器件的结构示意图。

所述反向前导零检测电路器件包括或器件,第一取反器件,第二取反器件;

所述反向前导零检测电路器件,用于以所述第一取反器件分别对多个位宽为2的输入字段的第0位进行取反运算,再以所述或器件,分别对多个取反结果和所述多个位宽为2的输入字段的第1位进行或运算,得到多个输出字段的第0位;所述位宽为2的输入字段是所述regime统一字段通过二分法处理后得到的;

所述反向前导零检测电路器件,还用于以所述或器件分别对所述多个位宽为2的输入字段的第0位和所述多个位宽为2的输入字段的第1位进行或运算,得到所述多个输出字段的第1位;

所述反向前导零检测电路器件,还用将所述多个输出字段拼接,得到所述regime统一字段的取值的反码。

反向前导零检测电路器件首先将regime统一字段多次折半,得到多个位宽为2的输入字段。例如,假设regime统一字段是000001,通过二分电路得到的多个的位宽为2的输入字段是(00)、(00)、(01)。再以子电路对每个位宽为2的输入字段进行检测,得到每个位宽为2的输入字段中0的个数的反码。

示例地,以多个位宽为2的输入字段中的(01)进行说明,“1”是输入字段(01)的第0位,“0”是输入字段(01)的第1位,“1”取反后得到“0”,“0”与“0”进行或运算,得到0,作为(01)对应的输出字段的第0位。同理得到输出字段的第1位是1,(01)对应的输出字段是“10”,同理,以子电路对(00)进行计算,得到(00)对应的输出字段是01,进而输出regime统一字段的取值的反码[(01)(01)(10)]。

得到regime统一字段的取值的反码[(01)(01)(10)]后,对“10”取反得到“01”,01即为(01)中0的个数,表示(01)中有1个0。对01取反,01取反得到10,10即(00)中0的个数,表示(00)中有2个0。进而得到多个位宽为2的输入字段[(00)(00)(01)]的检测结果是[(2)+(2)+(1)],即000001中一共有5个0。

regime取值计算子模块,用于在所述regime字段的真实符号为正时,对所述反向前导零检测电路器件输出的反码取反,再对取反后的所述反向前导零检测电路器件输出的反码的最高位添加所述regime字段的真实符号,得到所述regime字段的取值字段;

regime取值计算子模块,还用于在所述regime字段的真实符号为负时,对所述反向前导零检测电路器件输出的反码的最高位添加所述regime字段的真实符号,得到所述regime字段的取值字段。

检测regime统一字段000001,得出其中有5个零,即regime字段的取值是5,得到regime字段的取值字段是101。根据regime真实符号和regime统一字段的取值,可以明确得到目标Posit浮点数中regime字段的取值。

本申请实施例提出的反向前导零检测电路器,首先检测regime统一字段直接得到regime字段的取值的反码,再对每个子电路得到的输出字段统一逻辑取反,避免了由于在每个子电路分别对输入字段的第1位和第0位的频繁取反,导致的电路面积增加。

提取模块107,用于通过所述第一移位电路器件,将所述目标Posit浮点数的最高三位移出,并将移出最高三位后的所述目标Posit浮点数的剩余字段左移指定位数;所述指定位数是根据所述反向前导零检测电路器件的输出得到的;

移出的最高三位分别是目标Posit浮点的符号位、目标Posit浮点的regime字段的翻转位,以及regime统一字段与regime字段相差的1位。

指定位数是反向前导零检测电路器件检测regime统一字段后,得到到regime统一字段的0的个数。例如,假设regime统一字段的是0001,那么指定位数是3。

本申请实施例提供的解码电路,以反向前导零检测电路器件检测得到regime统一字段的0的个数,再将regime统一字段的0的个数和符号位、翻转位和regime统一字段与regime字段相差的1位移出,得到剩下的位宽确定的指数字段和第二尾数字段,解决了由于Posit浮点数中的regime字段位宽不确定,导致指数分辨困难的问题,以进一步地直接从移出最高三位和指定位数后的目标Posit浮点数中提取得到指数字段。

所述提取模块,还用于根据所述目标Posit浮点数的指数字段的位宽,在左移后的目标Posit浮点数中,提取得到所述目标Posit浮点数的指数字段和第二尾数字段;

真实指数确定模块108,用于在所述目标Posit浮点数是负数时,对所述指数字段进行取反,再通过所述第一拼接电路器件,将所述指数字段或取反后的所述指数字段与所述regime字段的取值字段进行拼接,得到并输出所述目标Posit浮点数对应的中间数据中的真实指数字段;

第一尾数字段确定模块109,用于按照所述第一尾数字段的最大位宽,对所述第二尾数字段的低位补零得到所述第一尾数字段,输出所述第一尾数字段;所述第一尾数字段的最大位宽是所述目标Posit浮点数的总位宽减去所述目标Posit浮点数的符号位的位宽、所述指数字段的位宽,和所述regime字段的最小位宽得到的;

将从Posit浮点数中的提取的第二尾数字段,直接作为中间数据的第一尾数字段。将从Posit浮点数中的提取的指数字段与regime字段的取值字段进行拼接,得到中间数据的真实指数字段。拼接regime指数和指数字段时,regime指数在高位。

由于指数字段左移的位宽正是2es,本申请实施例直接将指数字段拼接在regime字段的取值字段的低位,实现regime字段的取值字段的进位。具体将指数字段置于低位,regime字段的取值字段置于高位,通过拼接,完成了regime字段的指数化,避免了利用useed对regime字段进行指数化需要的多余逻辑电路,进而减少了Posit浮点数处理器的电路面积。

在将Posit浮点数转换为对应的二进制表示的实数值,会通过useed,对Posit浮点数的指数字段和regime字段进行统一。统一后的指数字段和regime字段是:useed·regime+e,其中useed=2es,其中e指的是指数字段,regime指的是regime字段,es指的是Posit浮点数的指数位宽。

真实指数字段的位宽由指数的位宽和regime字段的取值字段的位宽确定,是固定的值。再进一步确定第一尾数字段的位宽的范围:目标Posit浮点数总位宽-指数字段的位宽-符号位-最小的regime字段(2位)=第一尾数字段的位宽的最大值。

本申请实施例得到的中间数据的真实指数字段,仅需要将regime字段的取值字段和指数字段进行拼接,就能得到能够参与运算的真实指数字段,以提取的第二尾数字段就能直接作为中间数据的第一尾数字段,解码过程简单,简化了解码电路的计算步骤。

保护位输出模块110,用于将每一位的值都为0的字段作为所述保护位字段,并输出所述保护位字段;所述保护位字段的位宽为3。

解码电路将目标Posit浮点数转换为中间数据的过程中不存在右移舍入,所以直接将保护位字段的三个保护位的值设置为0。

在运算电路以中间数据进行运算时,保护位字段用于对运算后的结果进行舍入操作,遵循了Posit浮点数标准中的舍入原则,另一方面真实指数字段和第一尾数字段,是直接提取的目标Posit浮点数的字段,或由目标Posit浮点数中的各个字段拼接得到的,仍然是补码形式,进而使本申请实施例提出的Posit浮点数处理器得到的中间数据,严格遵循了Posit浮点数标准,并且得到中间数据不需要转换为原码,解码过程简单。

参考图3,图3是本申请实施例提出的Posit浮点数处理器的结构示意图。所述Posit浮点数处理器包括:解码电路301、运算电路302以及编码电路303;

所述运算电路302,用于根据所述计算指令,对接收的所述解码电路输出的多个中间数据进行运算,得到以补码形式的中间数据表示的运算结果;

解码电路得到中间数据:无穷数字段、零值字段、符号字段、真实指数字段、第一尾数字段和保护位字段后,运算电路直接以中间数据进行运算。在中间数据中的无穷数字段或零值字段为真时,运算电路可以直接得到对应的特殊值(无穷数或零的中间数据),保护位字段在运算过程中,或对运算结果进行舍入操作。整个运算电路的输入是补码形式中间数据,输出仍是补码形式中间数据,不需要对中间数据进行原码和补码的转换,简化了运算过程。

所述编码电路303,用于根据所述计算指令中的指定格式,将所述运算结果转换为所述指定格式的Posit浮点数。

指定格式指的是对Posit浮点数的总位宽和指数位宽的约定。一般地以Posit<总位宽,指数位宽>作为指定格式。

编码电路依据计算机处理器(CPU)对运算结果指定的格式,将运算电路输出的中间数据转换为Posit浮点数编码。整个编码的过程不涉及原码到补码的转换,只需要将中间数据的各个字段还原为Posit浮点数编码的各个字段,编码电路逻辑简单。

所述编码电路还包括输出模块:

所述输出模块401用于在所述中间数据的无穷数字段真时,直接输出所述指定格式的Posit浮点数为表示无穷数的无穷数编码字段;

所述输出模块401还用于在所述中间数据的零值字段为真时,直接输出所述指定格式的Posit浮点数为表示零值的无穷数编码字段。

输出模块在中间数据的无穷数字段不为真,且零值字段不为真时,输出通过中间数据的符号字段、真实指数字段、第一尾数字段、保护位字段编码得到的Posit浮点数。可以理解的是,根据中间数据的符号字段、真实指数字段、第一尾数字段、保护位字段,编码得到Posit浮点数的计算较为复杂,Posit浮点数处理器将多个目标Posit浮点数进行处理,得到输出的Posit浮点数的时间较长,因此,通过输出模块,在无穷数字段真,或零值字段为真时,强行、优先直接输出表示0或无穷数的特殊编码,能够避免等待Posit浮点数处理器对目标Posit浮点数转换为中间数据,再计算中间数据耗费的时间,直接输出特殊编码,提高了Posit浮点数处理器对0或无穷数的特殊编码的输出效率。

参考图4,图4是本申请实施例提出的编码电路的结构示意图。

所述编码电路303包括:第二提取电路器件、第二移位电路器件、第二拼接电路器件以及以下模块:

指数字段编码模块402,用于以所述第二提取电路器件,在所述运算结果的真实指数字段中,按照最低位到最高位的顺序,提取得到位宽与指数编码字段的位宽相同的字段,根据所述位宽与指数编码字段的位宽相同的字段得到所述指数编码字段,并以提取所述位宽与指数编码字段的位宽相同的字段后的所述真实指数字段,作为所述regime编码字段对应的数值;

所述指数字段编码模块,还用于在所述中间数据的符号字段表示负数时,对所述位宽与指数编码字段的位宽相同的字段取反,得到所述指数编码字段;

在所述中间数据的符号字段表示正数时,将所述位宽与指数编码字段的位宽相同的字段作为所述指数编码字段。

编码电路是解码电路的逆过程,也就是根据一个具体的中间数据类型输出一个Posit<总位宽,指数位宽>的编码,需要进行移位舍入操作。

指数编码字段指的是表示运算结果的Posit浮点数的指数字段。

真实指数字段中,regime指数在高位,指数字段在低位,运算结果Posit浮点数的格式确定了指数编码字段的位宽,从而可以从真实指数字段中快速地提取出指数编码字段。例如,假设真实指数字段是11101011,表示运算结果的Posit浮点数的指数位宽是2,直接提取得到11作为指数编码字段,剩余的111010作为待转换为regime编码字段的regime指数。

regime格式确定模块403,根据所述运算结果的符号字段和所述regime编码字段的符号,确定所述regime编码字段的填充格式;

regime编码字段指的是表示运算结果的Posit浮点数的regime字段。

由于regime取值计算子模块对反向前导零检测电路器件输出的反码取反,添加上regime字段的真实符号,得到regime字段的取值字段,或者regime取值计算子模块对反向前导零检测电路器件输出的反码,添加上regime字段的真实符号,得到的regime字段的取值字段,因此运算结果对应的中间数据中的真实指数字段中的regime字段的取值字段,携带了regime编码字段的符号,因此编码电路可以在提取指数编码字段的真实指数字段中,根据regime字段的取值字段直接获得regime编码字段的符号。

进一步确定regime编码字段在运算结果的Posit浮点数中的表现形式,还需要结合运算结果的Posit浮点数的符号,即中间数据的符号,也是中间数据的符号字段。

填充格式指的是:根据regime编码字段的符号和Posit浮点数的符号(符号字段)确定的,regime编码字段是前导一还是前导零的形式。如果Posit浮点数是正数,regime编码字段也是正数,则填充10;如果Posit浮点数是正数,regime是编码字段负数,则填充01;如果Posit浮点数是负数,regime编码字段是正数,则填充01;如果Posit浮点数是负数,regime编码字段也是负数,则填充10。

regime字段编码模块404,用于以所述第二拼接电路器件,将所述填充格式、所述指数编码字段、所述运算结果的第一尾数字段以及所述运算结果的保护位字段依次拼接,得到拼接字段,并以所述第二移位电路器件,依据所述regime编码字段对应的数值,将所述拼接字段算术右移,得到所述regime编码字段;

拼接字段的最低三位是保护位字段,以保证按照填充格式填充时,对整个拼接字段的输入保护。

示例地,假设Posit浮点数是正数,regime编码字段是正数,填充格式是10,指数编码字段是11,运算结果的第一尾数字段是110111,得到拼接字段是10|11|110111|000,regime编码字段对应的值是3,需要将拼接字段11110111 000算术右移3位,得到11110|11|110|111。尾数字段的111经过保护位,保护位最后形成111。从而直接得到regime编码字段11110。保护位用于保护Posit浮点数的精度。Posit浮点数标准中规定了三位保护位GRS分别称作Guard,Round,Sticky。

若计算指令规定的计算结果Posit浮点数Posit<12,2>的总位宽是12bit,则需要对1111110 11110111进行舍入,舍入后的拼接字段是1111110 11110,在舍入过程中,111经过了保护位000,000分别对应GRS位,即S位,S位固定为1。

浮点数结果确定模块405,用于利用所述保护位字段对向右移位后的所述拼接字段进行舍入操作,并对进行舍入操作后的所述拼接字段的最高位添加所述运算结果的符号字段,得到所述指定格式的Posit浮点数。

舍入操作可以理解为二进制的“四舍五入”操作。

根据Posit浮点数是正数,中间数据的符号字段是1,在舍入后的拼接字段111111011110的最高位拼接上符号位,得到指定格式的运算结果Posit浮点数11111110 11110。

根据Posit的标准规范,编码电路对中间数据的编码过程采取饱和操作。

所述浮点数结果确定模块包括:

保护位子模块,用于在向右移位后的所述拼接字段的每一位都为0时,在向右移位后的所述拼接字段的最低位加1,在向右移位后的所述拼接字段的所有值都为1时,保持向右移位后的所述拼接字段不变;

所述保护位子模块,还用于在向右移位后的所述拼接字段中的任意两位的取值不相同,并且所述保护位的值大于4时,在向右移位后的所述拼接字段的最低位加1,或在向右移位后的所述拼接字段中的任意两位不相同,所述保护位的值等于4时,且向右移位后的所述拼接字段的最低位是1时,在向右移位后的所述拼接字段的最低位加1。

右移位后的所述拼接字段中的任意两位的取值不相同是,除了右移位后的所述拼接字段是00000……0和11111……1的形式外,其他所有形式拼接字段。

Posit的标准规范了,在编码时不考虑特殊编码(无穷数编码和零值编码)时,正的Posit浮点数最小值的编码是00000……01,正的Posit浮点数最大值的编码是011111……1,负的Posit浮点数在其绝对值最大时,编码是1111111……1,负的Posit浮点数在其绝对值最小时,编码是10000……01,饱和操作操作是,在编码后的数小于Posit浮点数最小值的编码时,取Posit浮点数最小值的编码,即00000……01;在编码后的数小于Posit浮点数最大值的编码时,取Posit浮点数最大值的编码,即1111111……1。

本申请实施例提出的Posit浮点数处理器,利用解码电路,将根据计算指令得到的Posit浮点数转换为补码形式的中间数据,中间数据包含了表示特殊Posit浮点数的无穷数字段和零值字段,以使运算电路和编码电路在计算参数或计算结果是特殊Posit浮点数时,可以直接输出表示特殊Posit浮点数的无穷数编码字段或零值编码字段,提高了Posit浮点数处理器的输出效率。

运算电路可以直接使用中间数据中的真实指数字段、第一尾数字段进行运算,而在Posit浮点数的编码规则,对Posit浮点数的组成字段进行提取和拼接后,就可得到真实指数字段和第一尾数字段,真实指数字段和第一尾数字段为补码形式的定点数,多个中间数据根据计算指令进行运算后,得到的中间数据表示的运算结果,仍然是补码形式的定点数,编码电路只需按照CPU处理器指定的格式,将补码形式的定点数转换为Posit浮点数的编码格式,就可以完成Posit浮点数的编码。上述过程不需要将Posit浮点数转换为原码,再将原码转换为Posit浮点数,简化了Posit浮点数的处理操作。避免了将Posit浮点数转换为原码,计算时却需要补码,而导致的计算冗余和浪费。

中间数据中的符号字段在运算电路中参与尾数字段的运算,直接输出运算结果的符号字段。可以直接用于运算电路中,对得到运算结果的符号,还可以用于编码电路中,得到regime编码字段,并直接作为最终表示运算结果的Posit浮点数的最高位,不用再考虑补码时,正负Posit浮点数的编码形式的差异,简化了Posit浮点数的处理操作。

中间数据中的保护位字段,用于运算电路中,对运算结果进行舍入操作,还可以用于编码电路中,对编码过程进行舍入操作,使Posit浮点数处理器的工作符合Posit浮点数的规范。

本说明书中的各个实施例均采用递进或说明的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置或者电路所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、装置或者电路中还存在另外的相同要素。

以上对本申请所提供的一种Posit浮点数处理器,进行了详细介绍,以上实施例的说明只是用于帮助理解本申请Posit浮点数处理器的工作原理;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种Posit浮点数的除法和开方运算处理器及运算处理系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类