发明内容
本发明的实施例提供一种浮点数加法电路及其实现方法,通过使用融合了乘法运算和加法运算的加法运算,提高了运算精度,并且对运算系统中的关键运算路径的时序进行优化,解决了现有技术中运算系统的浮点数运算性能不高的问题,提升了运算系统的运算性能。
本发明实施例采用的技术方案为:
一种浮点数加法电路,所述电路包括:信号输入端、取负电路、指数运算电路、移位电路、作差电路、符号选择电路、规格化电路、溢出处理电路和信号输出端,其中,
所述信号输入端用于获得第一浮点数信号和第二浮点数信号;
所述取负电路用于对所述第一浮点数信号和所述第二浮点数信号进行取负操作;
所述指数运算电路用于根据所述第一浮点数信号得到第一幂指数,根据所述第二浮点数信号得到第二幂指数,由所述第一幂指数和所述第二幂指数的较大值得到较大幂指数,由所述较大幂指数和所述第一幂指数的差得到第一幂指数差,由所述较大幂指数和所述第二幂指数的差得到第二幂指数差;
所述移位电路用于根据所述第一幂指数差对所述取负电路操作后的所述第一浮点数信号移位,根据所述第二幂指数差对所述取负电路操作后的所述第二浮点数信号移位;
所述作差电路用于对所述移位电路操作后的所述第一浮点信号和所述第二浮点信号进行作差运算得到第一差信号和第二差信号,并对作差运算的结果求前导,得到第一前导信号和第二前导信号;
所述符号选择电路用于选取所述第一差信号和所述第二差信号中的正值信号作为第一正值信号,并且选取所述第一前导信号和所述第二前导信号中的正值信号作为第二正值信号;
所述规格化电路用于根据所述符号选择电路选择的所述第二正值信号和所述指数运算电路得到的所述较大幂指数对所述符号选择电路选择的所述第一正值信号进行规格化;
所述溢出处理电路用于对规格化后的累加结果进行溢出处理;
所述信号输出端用于输出所述溢出处理电路处理后输出。
一种浮点数加法电路实现方法,包括:
通过信号输入端获得第一浮点数信号和第二浮点数信号;
对所述第一浮点数信号和所述第二浮点数信号进行取负操作;
根据所述第一浮点数信号得到第一幂指数,根据所述第二浮点数信号得到第二幂指数,由所述第一幂指数和所述第二幂指数的较大值得到较大幂指数,由所述较大幂指数和所述第一幂指数的差得到第一幂指数差,由所述较大幂指数和所述第二幂指数的差得到第二幂指数差;
根据所述第一幂指数差对取负操作后的所述第一浮点数信号移位,根据所述第二幂指数差对取负操作后的所述第二浮点数信号移位;
对移位操作后的所述第一浮点信号和所述第二浮点信号进行作差运算得到第一差信号和第二差信号,并对作差运算的结果求前导,得到第一前导信号和第二前导信号;
选取所述第一差信号和所述第二差信号中的正值信号作为第一正值信号,并且选取所述第一前导信号和所述第二前导信号中的正值信号作为第二正值信号;
根据选择的所述第二正值信号和所述较大幂指数对所述第一正值信号进行规格化;
对规格化后的累加结果进行溢出处理;
通过信号输出端输出溢出处理后的输出结果。
与现有技术相比,本发明实施例通过在浮点数信号进行移位之前的运算路径上,将其中一个浮点数信号的符号按照相反符号取负,另一个浮点数信号的符号按照符号取负,节省了原本需要在关键路径上完成的移位后按照符号取负的操作,以及在加法负分支路径上比正分支路径多出的一级CSA(Carry-SaveAdder,进位保留加法)电路,从而在整体电路上减少了一级异或操作、一级加法操作和一级CSA电路,优化了整体电路的时延,提高了电路的运算速度和运算精度。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为使本发明技术方案的优点更加清楚,下面结合附图和实施例对本发明作详细说明。
需要说明的是,本发明中涉及的浮点数信号为复数,包括实数。一般应用于数据信号处理领域,比如图像处理系统,雷达系统和通讯系统。通过提升计算速度,提升复数累加/加法运算的效率,此电路和方法可以极大提升DSP(DigitalSignal Processing,数字信号处理)或其它数字设备的性能。比如应用于LTE(LongTerm Evolution,长期演进)、UMTS(Universal Mobile Telecommunications System,通用移动通信系统)、GSM(Global System for Mobile communications,全球移动通信系统)等现行通讯系统中的。
实施例一
本实施例提供一种浮点数加法电路,如图1所示,所述电路包括:信号输入端101、取负电路102、指数运算电路103、移位电路104、作差电路105、符号选择电路106、规格化电路107、溢出处理电路108和信号输出端109,其中,
所述信号输入端101用于获得第一浮点数信号和第二浮点数信号;
所述取负电路102用于对所述第一浮点数信号和所述第二浮点数信号进行取负操作;
所述指数运算电路103用于根据所述第一浮点数信号得到第一幂指数,根据所述第二浮点数信号得到第二幂指数,由所述第一幂指数和所述第二幂指数的较大值得到较大幂指数,由所述较大幂指数和所述第一幂指数的差得到第一幂指数差,由所述较大幂指数和所述第二幂指数的差得到第二幂指数差;
所述移位电路104用于根据所述第一幂指数差对所述取负电路102操作后的所述第一浮点数信号移位,根据所述第二幂指数差对所述取负电路102操作后的所述第二浮点数信号移位;
所述作差电路105用于对所述移位电104路操作后的所述第一浮点信号和所述第二浮点信号进行作差运算得到第一差信号和第二差信号,并对作差运算的结果求前导,得到第一前导信号和第二前导信号;
所述符号选择电路106用于选取所述第一差信号和所述第二差信号中的正值信号作为第一正值信号,并且选取所述第一前导信号和所述第二前导信号中的正值信号作为第二正值信号;
所述规格化电路107用于根据所述符号选择电路106选择的所述第二正值信号和所述指数运算电路103得到的所述较大幂指数对所述符号选择电路106选择的所述第一正值信号进行规格化;
所述溢出处理电路108用于对规格化后的累加结果进行溢出处理;
所述信号输出端109用于输出所述溢出处理电路处理后输出。
可选的,所述信号输入端101还用于获得第三浮点数信号和第四浮点数信号,根据所述第三浮点数信号和所述第四浮点数信号的乘积得到所述第二浮点数信号。
其中,所述第一浮点数信号为一个浮点数信号或者至少两个浮点数信号相加的和;所述第二浮点数信号为至少两个浮点数信号相乘的积。
与现有技术相比,本发明实施例根据第一浮点数信号的符号和第二浮点数信号的符号对第一浮点数信号和第二浮点数信号进行取负操作,将两个浮点数信号中的一个浮点数信号的符号按照相反符号取负,将另一个浮点数信号的符号按照符号取负;对取负后的浮点数信号按照幂指数差进行移位操作;将经过移位的浮点数信号通过作差电路,获得第一差信号和第二差信号以及第一前导信号和第二前导信号,并使用符号选择电路选择出第一正值信号和第二正值信号;根据选择的所述第二正值信号和较大幂指数对所述第一正值信号进行规格化,对规格化后的累加结果进行溢出处理;通过信号输出端输出溢出处理后的输出结果。其中通过在浮点数信号进行移位之前的运算路径上,将其中一个浮点数信号的符号按照相反符号取负,另一个浮点数信号的符号按照符号取负,节省了原本需要在关键路径上完成的移位后按照符号取负的操作,以及在作差电路的负分支路径上比正分支路径多出的一级CSA电路,从而在整体电路上减少了一级异或操作、一级加法操作和一级CSA电路,优化了整体电路的时延,提高了电路的运算速度和运算精度。
实施例二
本实施例提供一种浮点数加法电路,如图2所示,从信号输入端输入3个浮点数信号a、c和d,信号输出端输出累加结果z,其中z=a+c×d,浮点数信号c和d的乘积用浮点数信号b表示,如图2所示,所述电路包括:信号输入端101、取负电路102、指数运算电路103、移位电路104、作差电路105、符号选择电路106、规格化电路107、溢出处理电路108和信号输出端109,其中,
所述信号输入端101用于获得a、c和d三个浮点数信号。
所述取负电路102用于对浮点数信号a和浮点数信号b进行取负操作,其中浮点数信号b为浮点数信号c和d进行乘法操作后得到的浮点数信号,对浮点数信号a的符号根据相反符号取负,对浮点数信号b的符号根据符号取负,例如,若浮点数信号a的符号为正,则取负电路102输出符号取负(即正号变为负号)后的浮点数信号a,若浮点数信号a的符号为负,则取负电路102直接输出浮点数信号a;若浮点数信号b的符号为正,则取负电路102直接输出浮点数信号b,若浮点数信号b的符号为负,则取负电路102输出符号取负后的浮点数信号b。
可选的,所述取负电路102还可以对浮点数信号b的符号根据相反符号取负,对浮点数信号a的符号根据符号取负,此步骤与上述步骤能够得到一样的输出结果,达到一样的技术效果。
需要说明的是,当取负电路102对浮点数信号b进行取负操作时,需要根据取负方式的不同,对浮点数信号c和浮点数信号d执行不同的乘法操作,例如,当对浮点数信号b的符号根据相反符号取负时,则在进行乘法操作之前,将浮点数信号c或者浮点数信号d的符号取反(即正号变负号,负号变正号);当对浮点数信号b的符号根据符号取负时,直接对浮点数信号c和浮点数信号d执行有符号乘法。
需要说明的是,当浮点数信号a和浮点数信号b二者中的一个浮点数信号的符号根据相反符号取负时,另一个浮点数信号的符号根据符号取负,以保证在所述作差电路105中进行计算时将加法变为减法,减少计算时延。
所述指数运算电路103用于根据浮点数信号a得到第一幂指数,根据浮点数信号b得到第二幂指数,由所述第一幂指数和所述第二幂指数的较大值得到较大幂指数,由所述较大幂指数和所述第一幂指数的差得到第一幂指数差,由所述较大幂指数和所述第二幂指数的差得到第二幂指数差。
所述移位电路104用于根据根据所述第一幂指数差对所述取负电路102操作后的所述第一浮点数信号移位,根据所述第二幂指数差对所述取负电路102操作后的所述第二浮点数信号移位。例如,将浮点数信号a和浮点数信号b中幂指数较小的浮点数信号的尾数向右移位,移位的位数与相应的幂指数差一致。
所述作差电路105用于对移位电104路操作后的所述第一浮点信号和所述第二浮点信号进行作差运算得到第一差信号和第二差信号,并对作差运算的结果求前导,得到第一前导信号和第二前导信号。例如,第一差信号对应加法正分支的结果,为Z0=~a+b+1,第二差信号对应加法负分支的结果,为Z1=a+~b+1,~表示位取反操作,即对于所有比特1,将其反转为0,对于所有比特0,将其反转为1;第一前导信号对应前导正分支的结果,第二前导信号对应前导负分支的结果。其中,在进行浮点数的加法运算时,浮点数加法运算结果的尾数是有范围限制的,例如1≤尾数<2,所以当出现尾数超过规定的数值范围时,就需要通过前导信号中的前导0的个数来指示尾数进行合理的移位操作,使得尾数处于合法的范围内。
所述符号选择电路106用于选取第一差信号和第二差信号中的正值信号作为第一正值信号,选取第一前导信号和第二前导信号中的正值信号作为第二正值信号。
所述规格化电路107用于根据符号选择电路106选择的第二正值信号和指数运算电路103得到的较大幂指数对符号选择电路106选择的第一正值信号进行规格化。例如,根据第二正值信号中包括的前导0个数,确定第二正值信号中尾数的移位位数,并且将较大幂指数作为尾数的幂指数。
所述溢出处理电路108用于规格化后的累加结果进行溢出处理。例如,对规格化电路107输出的幂指数进行判断,若该幂指数大于等于规定的幂指数上限,则将输出饱和作为上溢出值;若该幂指数小于规定的幂指数下限,则将输出饱和作为下溢出值。
所述信号输出端109用于输出所述溢出处理电路处理后的输出结果Z。
需要说明的是,在对浮点数信号c和浮点数信号d进行乘法操作时,采用向下取整的方式得到二者的乘积;在通过移位电路104对浮点数信号进行移位时,采用向下取整的方式得到移位后的浮点数信号。
与现有技术相比,本发明实施例根据第一浮点数信号a的符号和第二浮点数信号b的符号对第一浮点数信号a和第二浮点数信号b进行取负操作,将两个浮点数信号中的一个浮点数信号的符号按照相反符号取负,将另一个浮点数信号的符号按照符号取负;对取负后的浮点数信号按照幂指数差进行移位操作;将经过移位的浮点数信号通过作差电路,获得第一差信号和第二差信号以及第一前导信号和第二前导信号,并使用符号选择电路选择出第一正值信号和第二正值信号;根据选择的所述第二正值信号和较大幂指数对所述第一正值信号进行规格化,对规格化后的累加结果进行溢出处理;通过信号输出端输出溢出处理后的输出结果。其中通过在浮点数信号进行移位之前的运算路径上,将其中一个浮点数信号的符号按照相反符号取负,另一个浮点数信号的符号按照符号取负,节省了原本需要在关键路径上完成的移位后按照符号取负的操作,以及在作差电路的负分支路径上比正分支路径多出的一级CSA电路,从而在整体电路上减少了一级异或操作、一级加法操作和一级CSA电路,优化了整体电路的时延,提高了电路的运算速度和运算精度。
实施例三
本实施例提供一种浮点数加法电路实现方法,如图3所示,所述方法包括:
301、通过信号输入端获得第一浮点数信号和第二浮点数信号。
例如,获得的浮点数信号可以为浮点数信号a和浮点数信号b两个,输出的累加结果为Z,运算过程可以为:Z=a+b,其中b可以为多个浮点数信号的乘积,例如b=c×d,将这种加法形式推广到一般的浮点数运算中:
其中a
i、c
j和d
j均为浮点数信号,b
j=c
j×d
j,i=0,1,…,n-1,j=0,1,…,m-1,只要从a
i和b
j中任意一组或两组中取两个及两个以上的浮点数信号组合即可,即n≥0,m≥0,n+m≥2。
302、对所述第一浮点数信号和所述第二浮点数信号进行取负操作。
例如,对浮点数信号a的符号根据相反符号取负,对浮点数信号b的符号根据符号取负。那么,若浮点数信号a的符号为正,则输出符号取负(即正号变为负号)后的浮点数信号a,若浮点数信号a的符号为负,则直接输出浮点数信号a;若浮点数信号b的符号为正,则直接输出浮点数信号b,若浮点数信号b的符号为负,则输出符号取负后的浮点数信号b。
可选的,还可以对浮点数信号b的符号根据相反符号取负,对浮点数信号a的符号根据符号取负,此步骤与上述步骤能够得到一样的输出结果,达到一样的技术效果。
需要说明的是,当对浮点数信号b进行取负操作时,需要根据取负方式的不同,对浮点数信号c和浮点数信号d执行不同的乘法操作,例如,当对浮点数信号b的符号根据相反符号取负时,则在进行乘法操作之前,将浮点数信号c或者浮点数信号d的符号取反(即正号变负号,负号变正号);当对浮点数信号b的符号根据符号取负时,直接对浮点数信号c和浮点数信号d执行有符号乘法。
需要说明的是,当浮点数信号a和浮点数信号b二者中的一个浮点数信号的符号根据相反符号取负时,另一个浮点数信号的符号根据符号取负,以保证在作差操作中进行计算时将加法变为减法,减少计算时延。例如,上述的取负操作可以使a和b两个浮点数信号在进行作差操作时,用-a代替a或者用-b代替b。以-a代替a为例,则作差操作的正分支用b-(-a)代替b+a,作差操作的负分支用(-a)-b代替-a-b,从而省去了一级加法操作,提高了运算速度,同样的,用-b代替b也能达到相同的效果。
303、根据所述第一浮点数信号得到第一幂指数,根据所述第二浮点数信号得到第二幂指数,由所述第一幂指数和所述第二幂指数的较大值得到较大幂指数,由所述较大幂指数和所述第一幂指数的差得到第一幂指数差,由所述较大幂指数和所述第二幂指数的差得到第二幂指数差。
304、根据所述第一幂指数差对取负操作后的所述第一浮点数信号移位,根据所述第二幂指数差对取负操作后的所述第二浮点数信号移位。例如,将浮点数信号a和浮点数信号b中幂指数较小的浮点数信号的尾数向右移位,移位的位数与相应的幂指数差一致。
305、对移位操作后的所述第一浮点信号和所述第二浮点信号进行作差运算得到第一差信号和第二差信号,并对作差运算的结果求前导,得到第一前导信号和第二前导信号。例如,第一差信号对应加法正分支的结果,为Z0=~a+b+1,第二差信号对应加法负分支的结果,为Z1=a+~b+1,~表示位取反操作,即对于所有比特1,将其反转为0,对于所有比特0,将其反转为1;第一前导信号对应前导正分支的结果,第二前导信号对应前导负分支的结果。其中,在进行浮点数的加法运算时,浮点数加法运算结果的尾数是有范围限制的,例如1≤尾数<2,所以当出现尾数超过规定的数值范围时,就需要通过前导信号中的前导0的个数来指示尾数进行合理的移位操作,使得尾数处于合法的范围内。
306、选取所述第一差信号和所述第二差信号中的正值信号作为第一正值信号,并且选取所述第一前导信号和所述第二前导信号中的正值信号作为第二正值信号。
307、根据选择的所述第二正值信号和所述较大幂指数对所述第一正值信号进行规格化。例如,根据第二正值信号中包括的前导0个数,确定第二正值信号中尾数的移位位数,并且将较大幂指数作为尾数的幂指数。
308、对规格化后的累加结果进行溢出处理。例如,对规格化电路107输出的幂指数进行判断,若该幂指数大于等于规定的幂指数上限,则将输出饱和作为上溢出值;若该幂指数小于规定的幂指数下限,则将输出饱和作为下溢出值。
309、通过信号输出端输出溢出处理后的输出结果。
其中,浮点数信号a和浮点数信号b可以在相同的时钟周期内输入,也可以分批在不同的时钟周期内输入;输出的计算结果的信号在浮点数信号输入后的一个或多个时钟周期后输出;所述浮点数信号和输出的计算结果的信号的精度为半精度、单精度、双精度、扩展精度或自定义位宽精度。
需要说明的是,在对浮点数信号c和浮点数信号d进行乘法操作时,采用向下取整的方式得到二者的乘积;在对浮点数信号进行移位时,采用向下取整的方式得到移位后的浮点数信号。
与现有技术相比,本发明实施例根据第一浮点数信号的符号和第二浮点数信号的符号对第一浮点数信号和第二浮点数信号进行取负操作,将两个浮点数信号中的一个浮点数信号的符号按照相反符号取负,将另一个浮点数信号的符号按照符号取负;对取负后的浮点数信号按照幂指数差进行移位操作;将经过移位的浮点数信号通过作差电路,获得第一差信号和第二差信号以及第一前导信号和第二前导信号,并使用符号选择电路选择出第一正值信号和第二正值信号;根据选择的所述第二正值信号和较大幂指数对所述第一正值信号进行规格化,对规格化后的累加结果进行溢出处理;通过信号输出端输出溢出处理后的输出结果。其中通过在浮点数信号进行移位之前的运算路径上,将其中一个浮点数信号的符号按照相反符号取负,另一个浮点数信号的符号按照符号取负,节省了原本需要在关键路径上完成的移位后按照符号取负的操作,以及在作差电路的负分支路径上比正分支路径多出的一级CSA电路,从而在整体电路上减少了一级异或操作、一级加法操作和一级CSA电路,优化了整体电路的时延,提高了电路的运算速度和运算精度。
本发明实施例提供的浮点数加法电路可以实现上述提供的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。本发明实施例提供的浮点数加法电路及其实现方法可以适用于浮点数运算,但不仅限于此。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。