发明内容
因此,本发明提供一种浮点除法和平方根运算装置及方法,克服了现有技术中浮点处理装置运算结果不可靠的不足。
第一方面,本发明实施例提供一种浮点运算装置,包括:功能分类及译码模块,用于接收待处理浮点数及第一控制信号,对第一控制信号进行译码,根据译码结果对所述待处理浮点数进行拆分,根据拆分后的待处理浮点数生成数据分配信号,根据预设的数据类型生成用于运算选择的第二控制信号;运算处理模块,用于根据所述数据分配信号及所述第二控制信号对所述待处理浮点数进行数据检测及运算,生成运算状态标志及运算结果;运算结果输出模块,用于输出所述待处理浮点数的运算状态标志及运算结果。
所述第一控制信号包括:装置工作使能、异常使能、向量/标量模式选择、单精度/双精度数据选择及除法/平方根计算模式选择。
在一实施例中,所述第二控制信号包括:启动信号、功能选择及精度控制。
在一实施例中,所述运算处理模块包括多个运算子模块,所述运算子模块至少包括:第一运算子模块、第二运算子模块、第三子模块及第四子模块,其中,第一运算子模块,用于对32位单精度浮点数、64位双精度浮点数及按照二进制双精度浮点格式扩展的单精度浮点数进行运算,输入和输出数据位宽均为64位;第二运算子模块,用于对32位单精度浮点数进行运算,输入和输出数据位宽均为32位;第三运算子模块,用于对32位单精度浮点数、64位双精度浮点数进行运算,输入和输出数据位宽均为64位;第四运算子模块,用于对32位单精度浮点数进行运算,输入和输出数据位宽均为32位。
在一实施例中,所述运算处理模块还包括:浮点数检测子模块,用于对待处理浮点数中的特殊类型数据及运算前的异常进行检测。
在一实施例中,所述运算状态标志包括:表征计算结果异常状态的异常标志和表征特殊状态的特殊状态标志。
在一实施例中,所述功能分类及译码模块还用于接收中断控制信号,根据所述中断控制信号中断所述待处理浮点数的运算操作。
第二方面,本发明实施例提供一种浮点运算方法,包括如下步骤:获取待处理浮点数及第一控制信号,对第一控制信号进行译码,根据译码结果对所述待处理浮点数进行拆分,根据拆分后的待处理浮点数生成数据分配信号,根据预设的数据类型生成用于运算选择的第二控制信号;根据所述数据分配信号及所述第二控制信号对所述待处理浮点数进行数据检测及运算,生成运算状态标志及运算结果;输出所述待处理浮点数的运算状态标志及运算结果。
在一实施例中,所述对所述待处理浮点数进行数据检测,包括:对待处理浮点数中的特殊类型数据及运算前的异常进行检测,生成表征计算结果异常状态的异常标志和表征特殊状态的特殊状态标志。
在一实施例中,采用基4数字循环SRT算法实现对所述待处理浮点数进行浮点除法或平方根运算。
第三方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行本发明第一方面所述的浮点运算方法。
本发明技术方案,具有如下优点:
本发明提供的一种浮点运算装置及方法,其中装置包括:功能分类及译码模块接收待处理浮点数及第一控制信号,对第一控制信号进行译码,根据译码结果对待处理浮点数进行拆分,根据拆分后的待处理浮点数生成数据分配信号,根据预设的数据类型生成用于运算选择的第二控制信号;运算处理模块根据数据分配信号及第二控制信号对进行数据检测及运算,生成运算状态标志及运算结果;运算结果输出模块输出待处理浮点数的运算状态标志及运算结果。本发明提供的浮点运算装置输出运算结果的同时也输出运算状态标志,可表征该运算结果的运算状态正常或者异常,使得运算结果更加可靠。通过采用了面向除法和平方根迭代计算逻辑的合并电路结构,且迭代算法实现流程及各功能模块数据位宽均按照SRT-4算法迭代速度快,收敛精度高。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,还可以是两个元件内部的连通,可以是无线连接,也可以是有线连接。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
实施例1
本发明实施例提供一种浮点运算装置,该浮点运算装置对诸如浮点除法、浮点平方根等计算的功能操作,如图1所示,该浮点运算装置包括:功能分类及译码模块1,用于接收待处理浮点数及第一控制信号,对第一控制信号进行译码,根据译码结果对所述待处理浮点数进行拆分,根据拆分后的待处理浮点数生成数据分配信号,根据预设的数据类型生成用于运算选择的第二控制信号;运算处理模块2,用于根据所述数据分配信号及所述第二控制信号对所述待处理浮点数进行数据检测及运算,生成运算状态标志及运算结果;运算结果输出模块3,用于输出所述待处理浮点数的运算状态标志及运算结果。
在本发明实施例中,浮点运算装置主要处理浮点除法或浮点平方根运算,仅以此举例,不以此为限。待处理浮点数可以为128位,也可以是256位或以上,根据实际工程需要确定。在运算过程中通过对浮点数进行数据检测,输出运算结果的同时也输出运算状态标志,可以表征该运算结果的运算状态正常或者异常,异常时是何种异常状态,使得运算结果更加可靠,根据异常状态方便后续调试维护。
在本发明实施例中,浮点运算装置接收的第一控制信号主要包括装置工作使能、异常使能、向量/标量模式选择、单精度/双精度数据选择及除法/平方根计算模式选择,第二控制信号主要包括:启动信号、功能选择及精度控制,运算处理模块根据第一控制信号产生的数据分配信号及所述第二控制信号,对所述待处理浮点数进行数据检测及运算,以上包含的控制信号不以此为限,还可以包括时钟信号、复位信号、舍入模式信号等等。
在本发明实施例中,运算处理模块2包括多个运算子模块,所述运算子模块至少包括:第一运算子模块、第二运算子模块、第三子模块及第四子模块,其中,第一运算子模块,用于对32位单精度浮点数、64位双精度浮点数及按照二进制双精度浮点格式扩展的单精度浮点数进行运算,输入和输出数据位宽均为64位;第二运算子模块,用于对32位单精度浮点数进行运算,输入和输出数据位宽均为32位;第三运算子模块,用于对32位单精度浮点数、64位双精度浮点数进行运算,输入和输出数据位宽均为64位;第四运算子模块,用于对32位单精度浮点数进行运算,输入和输出数据位宽均为32位。运算处理模块还包括:浮点数检测子模块,用于对待处理浮点数中的特殊类型数据及运算前的异常进行检测。本发明实施例可以支持多功能32/64位二进制浮点运算,运算子模块的个数根据待处理的浮点数位确定。
本发明实施例中,采用基4数字循环(或迭代)SRT算法(SRT-4),基于上述浮点运算装置可以能够快速实现标量和向量模式的32/64位浮点除法、浮点平方根等多种计算功能,涵盖功能如下表所示:
功能分类 |
功能说明 |
迭代周期数 |
DP_DIV |
DP浮点标量除法 |
29 |
DP_SQRT |
DP浮点标量平方根 |
28 |
SP64_DIV |
SP64浮点标量除法 |
14 |
SP64_SQRT |
SP64浮点标量平方根 |
13 |
DP_V_DIV |
DP浮点向量除法 |
29 |
DP_V_SQRT |
DP浮点向量平方根 |
28 |
SP32_V_DIV |
SP32浮点向量除法 |
14 |
SP32_V_SQRT |
SP32浮点向量平方根 |
13 |
本发明实施例中,输入到装置中的浮点数主要为SP32、SP64、DP,其中SP32和DP分别表示遵循二进制浮点IEEE 754标准格式的32位单精度浮点数和64位双精度浮点数;SP64表示按照二进制双精度浮点格式扩展的单精度浮点数;向量表示4组SP32或2组DP浮点数并行计算,其它功能表示标量计算;_DIV表示浮点数除法;_SQRT表示浮点数平方根;带_V_标志表示32/64位浮点数向量计算,无_V_标志表示64位浮点数标量计算(包括DP、SP64)。当输入浮点为128位时,该浮点运算装置既支持64位浮点格式的标量计算,又支持4组32位或2组64位浮点数的向量计算。
在一具体实施例中,如图2所示为处理128位浮点数的浮点运算装置,主要分为并行的4组PE单元(PE0~PE3),这里PE表示运算子模块,输入到4组PE单元的32位或64位浮点数来自外部输入的128位数据,该128位数据主要从4组32位浮点数、2组64位浮点数、高64位浮点数+低64位全零组合等数据中进行三选一。从实际功能需求、降低电路面积出发,4组PE单元功能分配如下:
(1)PE0单元:支持SP32、SP64、DP等浮点数运算,输入和输出数据位宽均为64位。
(2)PE2单元:支持SP32、DP等浮点数运算,输入和输出数据位宽均为64位。
(3)PE1和PE3单元:仅支持SP32浮点数运算,输入和输出数据位宽均为32位。
经PE0~PE3计算通路后,计算结果合成为128位数据,并随相应的状态标志信号一起输出,本装置中提及的状态标志信号包括浮点运算异常标志和特殊状态标志。其中,浮点运算异常标志如下所述:
vxsnan_flag:无效操作异常标志,主要针对输入带有SNaN(Signaling NaN,指示非数值)操作数的浮点运算。
vxidi_flag:无效操作异常标志,主要针对∞÷∞浮点计算。
vxzdz_flag:无效操作异常标志,主要针对0÷0浮点计算。
nsqrt_flag:无效操作异常标志,主要针对负浮点数的平方根计算。
zx_flag:除零异常标志,主要针对浮点数除法中除数为0情形的计算。
ox_flag:上溢出异常标志,在浮点数除法的浮点尾数后处理过程中,因对浮点尾数中间计算结果进行舍入进位操作(支持IEEE 754标准规定的4种舍入方式)而导致对应的浮点指数值超出SP32、SP64和DP浮点格式规定的最大指数值,也即超出对应浮点数所能表示的最大值,从而引起浮点数最终结算结果上溢出。
ux_flag:下溢出异常标志,在浮点数除法或平方根的浮点尾数后处理过程中,当浮点指数值为零时,因浮点尾数中间结果太小(定义为tiny)且在对其舍入操作时,导致对应的浮点数值趋近于零和浮点精度损失,从而引起浮点数最终计算结果下溢出。
xx_flag:不精确异常标志,在对浮点尾数中间结果进行后处理过程中,如果因舍入操作导致浮点指数值、浮点尾数值与舍入前的浮点数对应指数值、尾数中间结果不同,则将产生不精确异常,当产生浮点上溢出和下溢出时,也会产生不精确异常。
fx_flag:浮点异常统计标志,该标志位是上述异常标志信号的“或”逻辑运算。
浮点运算特殊状态标志如下所述:
v_flag:浮点计算结果有效标志。
s_flag:计算结果抑制状态标志,用来指示浮点计算结果是否需要写入到用户指定的寄存器或数据存储器中。
fr_flag:浮点尾数舍入状态标志,舍入后导致浮点计算结果增大。
fi_flag:浮点尾数舍入不精确状态标志,舍入后导致浮点计算结果不精确。
fprf_flag:浮点计算结果状态标志。该标志信号为5位数据位宽,用于指示浮点计算结果类型。
本发明实施例提供如图2所示的浮点运算装置,可支持1组64位浮点计算(①表示此类型数据流,生成1个有效的64位浮点数)、2组64位浮点计算(②表示此类型数据流,生成2个有效的64位浮点数)、4组32位浮点计算(③表示此类型数据流,生成4个有效的32位浮点数)。此外,该装置外部输入信号中还设置了中断控制信号,如果该信号高电平有效,则4组PE单元将不会启动,或者结束当前正在执行的运算操作。该装置控制通路的基本工作流如图3所示,在输入控制信号vin(装置工作使能)、excpt(异常使能如ve、ze、oe、ue、xe等,这5类信号分别为无效操作异常使能、除零异常使能、上溢异常使能、下溢异常使能、不精确异常使能)、vec_m(向量/标量模式选择)、dp_m(单精度/双精度数据选择)、sqrt_en(除法/平方根计算模式选择)作用下,通过译码后分别产生中间控制信号(valid)、输入到数据拆分模块的计算类型判定信号(op_type),然后分别执行逻辑“与”操作(valid与~excpt逻辑“与”运算,except为数据拆分过程中因数据判定而得到的vxsnan_flag、vxidi_flag、vxzdz_flag、nsqrt_flag、zx_flag等异常标志信息)、128位源操作数据拆分操作(拆分为2组64位或4组32位浮点数),最终将产生的控制信号start以及已有输入控制信号dp_m、sqrt_en和异常使能等一起输入各PE单元中;在4组PE单元并行输出计算结果后,需要通过计算结果合成模块将4组PE单元计算结果拼合为128位数据,并将4组PE单元分别产生的各类异常标志信号分别执行“或”逻辑,最终输出128位计算结果及其对应的运算标志信息。
本发明实施例提供的多功能浮点除法和平方根运算装置的数据通路结构如图4所示,整体工作流程如下:
(1)输入数据分别为128位操作数A(也即opa)和操作数B(也即opb),浮点平方根运算时仅操作数B有效,操作数A无效;128位输入数据通过数据拆分模块(也即dec/unpack_hi_dword、dec/unpack_lo_dword模块)完成128位数据高/低64位浮点数据字段的有效拆分,根据计算功能类型及前面描述的各PE单元支持的数据类型和计算功能,将SP32/SP64/DP浮点数分别输出到对应的PE单元。
(2)输入到PE单元的32/64位浮点数在特殊浮点数检测模块(也即spcl64、spcl32模块)中进行特殊数据类型和异常检测,其中特殊数据类型包括SNaN、QNaN、无穷大、零等特殊浮点数;异常检测主要对操作数执行无效异常检查,如果出现SNaN、∞÷∞、0÷0、负浮点数平方根等无效异常和除零异常,不会给对应的PE单元发送计算启动信号,而是直接产生vxsnan_flag、vxidi_flag、vxzdz_flag、nsqrt_flag、zx_flag等异常标志信号、特殊值计算结果输出与其它PE单元的32/64位浮点计算结果进行128位数据合成、状态标志位“或”运算,输出最终结果。
(3)在特殊浮点数检测的同时,对非特殊浮点数需要通过split模块将32/64位浮点数进行拆分,首先产生相应的符号位(s)、阶码位(fe)、带隐藏位的尾数位(fm),然后通过dnrm_fm数据通路,将fe输入至lzd模块中对其进行前导零检测,并将前导零计算结果(lzd_cnt)和fm输入到nrm模块中进行浮点尾数规格化处理。
(4)在nrm模块中,fm根据lzd_cnt值进行规格化逻辑左移操作。在fm执行左移操作的同时,fe通路上的阶码调整模块(也即ep0~ep3)根据前导零检测结果,执行fe减lzd_cnt,从而并行完成前规格化处理后的浮点数尾数(pre_fm)和阶码值(pre_fe),并经过流水寄存器输入到fm_iter模块(也即iter0~iter3模块)中,对pre_fm进行SRT-4算法迭代计算。
(5)pre_fm在fm_iter模块中主要执行基于SRT-4数字循环实现算法的除法或平方根迭代计算,并根据规定的迭代循环次数产生计算结果,当完成最后一次迭代计算时,需要根据余数的符号位对结果进行修正。其迭代的过程包括:
①迭代电路结构与数据宽度,fm_iter模块采用了面向除法和平方根迭代计算逻辑的合并电路结构如图5所示,且迭代算法实现流程及各功能模块数据位宽均按照SRT-4算法来确定。在图5中,residual sum、residual carry、divisor、s[j]、Q[j]/S[j]为流水寄存器,其它模块均为逻辑功能模块,图5中的9(4.5)表示数据位宽为9位,其中4位整数位,5位小数位;7(4.3)、3(0.3)数据位宽格式依次类推;d/s为除法或平方根计算模式控制信号,用于选择除数(以d表示浮点除法数据通路)和平方根中间倍数值(以s表示浮点平方根数据通路),实现二选一控制;r(x-1)是输入到该装置经过处理的被开方数,其中r表示数字迭代算法中的基数,在本装置中r=4;当执行浮点除法运算时,输入的被除数为x。
流水寄存器主要包括余数寄存器(也即residual sum、residual carry)、除数寄存器(也即divisor)、平方根值寄存器(也即s[j])、商累加寄存器(也即Q[j]/S[j],其中j表示第j次迭代产生的部分商值或根值,Q[j]表示浮点除法时的累加商值,S[j]表示浮点平方根时的累加根值,每次执行浮点除法或平方根计算时,均需要对Q[j]和S[j]进行二选一输出)。
4-2compr模块为CSA42加法压缩器(Carry Save Adder,CSA),用来计算全精度余数,其中sum、cry分别表示CSA42的计算结果、进位结果。CPA(Carry Propagate Adder)加法器用来计算余数估计值。QSL(Quotient-digit Selection Look-up table)是商/根数字查值表模块,该模块对CPA输出的计算结果首先进行截位操作,将CPA产生的小数位低两位部分舍弃(由于不产生进位问题,因此不会影响查值结果),然后对截断后的数据进行查找表内的商值/根值查找。
fly cnvrs为在线商值/根值转换模块,在浮点除法或平方根计算的尾数迭代过程中,每次循环都会产生商数字或根数字,本模块主要是为了提高累加操作速度而采取的一种特殊处理,内嵌了商值/根值合成在一起的查找表。此外,因平方根值会随迭代次数发生变化,因此每次都需要对新的根值计算其倍数,也即求余逻辑的一个输入源为根值的倍数,也即中间倍数值2*s[j]。
在单精度浮点数运算模式下,余数寄存器residual sum和residual carry位宽均为30位,其中4位整数位,26位小数位。平方根值寄存器s[j]位宽为28位,其中2位整数位,26位小数位,且整数部分初始值为1。CSA42计算位宽为30位,其中4位整数位,26位小数位,因中间倍数值2*s[j]也会参与CSA42计算,因此2*s[j]对应的位宽格式与CSA42压缩器计算位宽相同。CPA加法器输入宽度是9位(也即4位整数位,5位小数位),查表逻辑的余数估计值是7位(也即4位整数位,3位小数位),除数估计值是3位小数,在线转换寄存器Q[j]/S[j]是28位(也即2位整数位,26位小数位)。
在双精度浮点运算模式下,余数寄存器位宽调整为60位,其中4位整数位,56位小数位。在线转换寄存器Q[j]/S[j]位宽为58位,其中2位整数位,56位小数位。CSA42、CPA、查值逻辑与单精度浮点运算模式下的对应数据位宽均相同。
②迭代控制,32/64位浮点数对应规格化尾数pre_fm实现除法和平方根算法时的迭代控制主要是控制迭代次数,使运算结果符合指定的精度要求。迭代次数需要根据数据精度、迭代尾数有效位和实际尾数有效位来综合考虑。
③迭代计算流程,多功能浮点除法和平方根迭代计算流程分别如图6和图7所示,功能浮点除法和平方根迭代计算流程如下:
(a)迭代前商累加值初始化为0,根累加值初始化为1;
(b)由输入操作数初始化余数寄存器;
(c)计算估计余数~rw以及截断除数~d或截断2x根值~2[j];
(d)查表逻辑得到迭代数值;
(e)计算累加商值Q[j]或累加根值S[j];
(f)判断精度是否达到,是则结束,否则继续迭代。
(6)后处理阶段,该阶段包含了尾数简单规格化(也即fast_nrm模块)、异常处理(ux/ox/denormal模块)、进位舍入处理(rnd/xx)等功能模块。其中,fast_nrm模块处理来自上一级流水段的尾数和阶码,然后进行浮点计算结果的上/下溢出和结果类型判定、尾数进位舍入后的尾数规格化和阶码加法及其状态标志判定等操作,最后将32/64位计算结果及其对应的状态标志信号分别从PE单元输出。
(7)在功能类型指示信号等控制下,对四路PE单元输出的32/64位计算结果进行选择,并行组合成128位输出数据,同时对四路PE单元输出的相同状态标志信号分别进行“或”运算。最终合成后的128位数据、各类状态标志信号经过一级latch/dff流水寄存器输出。
本发明实施例提供的浮点运算装置,通过采用了面向除法和平方根迭代计算逻辑的合并电路结构,且迭代算法实现流程及各功能模块数据位宽均按照SRT-4算法迭代速度快,收敛精度高。
实施例2
本发明实施例提供一种浮点运算方法,如图8所示,该方法包括:
步骤S1:获取待处理浮点数及第一控制信号,对第一控制信号进行译码,根据译码结果对所述待处理浮点数进行拆分,根据拆分后的待处理浮点数生成数据分配信号,根据预设的数据类型生成用于运算选择的第二控制信号。
在本发明实施例中,基于实施例1中提供的浮点运算装置,待处理浮点数可以为128位,也可以是256位或以上,根据实际工程需要确定。获取待处理浮点数及第一控制信号,主要包括:装置工作使能、异常使能、向量/标量模式选择、单精度/双精度数据选择及计算模式选择,对第一控制信号译码后所述待处理浮点数进行拆分,生成数据分配信号,根据运算模块支持的数据类型,生成第二控制信号,主要包括:启动信号、功能选择及精度控制,不以此为限,还可以包括时钟信号、复位信号、舍入模式信号等等。
步骤S2:根据数据分配信号及第二控制信号对所述待处理浮点数进行数据检测及运算,生成运算状态标志及运算结果。
本发明实施例以浮点的除法和平方根作为举例,并不以此为限,在其他实施例中还可以进行浮点乘法、加法等运算。具体的采用基4数字循环SRT算法实现对所述待处理浮点数进行浮点除法或平方根运算,迭代速度快,收敛精度高,在运算过程中通过对浮点数进行数据检测,输出运算结果的同时也输出运算状态标志,可以表征该运算结果的运算状态正常或者异常,异常时是何种异常状态,使得运算结果更加可靠。
步骤S3:输出待处理浮点数的运算状态标志及运算结果。
本发明实施例,根据输出运算状态标志及运算结果,来确定运算结果是否有效可用,当运算状态标志为异常时,根据异常状态方便后续调试维护。
本发明实施例提供的一种浮点运算方法,获取待处理浮点数及第一控制信号,对第一控制信号进行译码,根据译码结果对所述待处理浮点数进行拆分,根据拆分后的待处理浮点数生成数据分配信号,根据预设的数据类型生成用于运算选择的第二控制信号,根据数据分配信号及第二控制信号对所述待处理浮点数进行数据检测及运算,生成运算状态标志及运算结果,可表征该运算结果的运算状态正常或者异常,使得运算结果更加可靠,采用SRT-4算法实现对进行浮点除法或平方根运算,迭代速度快,收敛精度高。
实施例3
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例2中的浮点运算方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明创造的保护范围之中。