一种用于浮点除法和平方根运算的预处理电路结构
技术领域
本发明涉及浮点运算单元设计,是一种用于实现浮点除法和浮点平方根运算的预处理电路结构。
背景技术
近年来,由于计算机的计算复杂度大大增加,浮点处理器的应用十分广泛。同时工业界广泛采用性能评测标准,促使处理器设计者投入更多的精力开发浮点运算单元。基于特定应用的系统,例如高性能的图像处理系统,对处理器提出了更高的要求,这些都需要高速的浮点运算单元来满足。
浮点运算单元一般具有加法、乘法、除法、平方根运算等基本功能。其中,实现除法和平方根运算的一种算法是基于乘法迭代的方法。这种算法的优点是:每次迭代精度增加一倍,需要迭代的次数少;由于共用乘法单元,需要增加的面积相对少。但同时,这种方法需要首先得到运算所需的初始值,这就需要增加一个预处理阶段。在预处理阶段中,通过查找表及其他逻辑得到输入操作数的倒数或平方根倒数的近似值,作为迭代算法的初始值。一种使用预处理结构的浮点运算单元的结构示意图见图1。
二进制数可以用这种形式表示:(-1)S×(b0b1b2…bn-1)×2E。其中,f=b1b2…bn-1。这样一个数存储在一个32位二进制段的三个字段中,即为单精度浮点数的存储格式,见图2。其中包括:符号s(1位):0表示正,1表示负。指数e(8位):指数的表示方法称为偏值表示法,一个固定的偏值从字段中减去,才得到真正的指数,对于32位的单精度浮点数,偏值为127(例如,如果真正的指数为0,则e=01111111)。尾数f(23位):小数点的位置约定在最左(最高)有效位的右边,即小数点左边有1位,对于规格化数,这位是1,小数点右边的部分称为尾数(即f),只有这部分存储于字段中。
对于浮点除法B/A和平方根运算
令操作数A的符号位为0,指数为01111111,尾数不变,记为a,需要得到1/a、
和
的近似值,作为迭代的初始值。这就需要在存储器的对应地址中存储按一定算法得到的值,这样就形成了一个查找表。在预处理阶段,将a的尾数的一部分作为地址,到存储器中查找,得到对应地址中存储的值,再经过一些其他运算,就可以得到所需要的初始值。初始值精度越高,需要迭代的次数越少,但是查找表需要的面积大大增加。如果是单精度计算,且希望仅通过一次迭代得到单精度的计算结果,就需要尾数为14位精度的初始值。
查找表有很多不同的算法和实现方式,其中一种算法是对称双向查找表(参考文献:Approximating elementary functions with symmetric bipartite tables)。
这种算法由Taylor级数展开得到,下面对它的原理作简要介绍。这里,将a的尾数记为y,将需要得到近似值的函数记为f(y)。首先,将y分为四段,y0、y1、y2、y3,其对应的值为y=y0+y1+y2+y3,四段的位数分别是n0、n1、n2、n3。
要使用两个查找表分别存储一定位数的a0、a1,位数根据所需精度决定,计算公式是:
a0(y0,y1)=f(1+y0+y1+δ2+δ3)
a1(y0,y2)=f′(1+y0+δ1+δ2+δ3)(y2-δ2)
其中,y0、y1、y2分别为其在y中对应的值,
a0(y0,y1)的存储地址为y0、y1的各位连接,a1(y0,y2)的存储地址为y0、y2的各位连接。
具有了这样的查找表后,就可以通过查找得到f(y)的近似值。y输入后,截取y0、y1、y2,将y0、y1的各位连接作为地址查找,得到对应地址中存储的a0;将y0、y2的各位连接作为地址查找,得到对应地址中存储的a1。然后,a0、a1相加,就近舍入,就得到了所需的近似值:f(y)=a0(y0,y1)+a1(y0,y2)。
所谓对称,指的是a1的查找。将y2去掉最高位后剩下的位记为y2′。存储a1的查找表只要存储y2的最高位为0时的a1(y0,y2)的值即可,存储地址为y0、y2′的各位连接,这样可以节约一半的面积。查找过程是:如果y2最高位是0,则由y2剩下的位y2′作为地址查找a1(y0,y2);如果y2最高位是1,则将y2剩下的位取反后作为地址查找a1(y0,y2),然后将查得的值取反即可。
这种查找表算法可以用于实现除法和平方根运算的预处理结构。
发明内容
本发明的目的在于设计一种用于浮点除法和平方根运算的预处理电路结构,它适用于基于乘法迭代方法实现的浮点除法和平方根运算,能够得到除法和平方根运算所需的初始值。
本发明的特征在于,含有:操作数处理电路、尾数截取电路、第一异或电路、第一地址寄存器、第二地址寄存器、第一至第六共六个存储器、补位电路、第一选择电路、第二异或电路、加法电路、和处理电路,以及第二选择电路,其中,
操作数处理电路,输入是单精度操作数operand_A,输出是:a_man,操作数operand_A的23位尾数;exp_odd_even,单精度浮点数存储格式中操作数operand_A的指数的最低位;
尾数截取电路,输入是所述数据a_man,输出为:所述数据a_man的高6位y0、第7至第10位y1、第11位c,以及第12至第15位y2;
第一异或电路,输入是所述尾数截取电路输出的数据c,以及y2,在对所述数据y2的每一位与数据c作异或后,得到y2_xor,共4位;
第一地址寄存器,输入是所述尾数截取电路输出的数据y0和y1,共10位,用s0表示;
第二地址寄存器,输入是所述尾数截取电路输出的数据y0,以及所述第一异或电路输出的数据y2_xor,共10位,用s1表示;
第一存储器,作倒数查找表用,地址位为10位,数据位为15位,在地址h中存储的数据是:d=1/(1+h1×2-6+h2×2-10+δ2+δ3),h1为地址h的高6位,h2为地址h的低4位,δ2=2-11-2-16,δ3=2-16-2-24,d就近舍入得到16位有效数字,其中第一位是1,在地址h中只存储后15位,所述第一存储器的输入是所述第一地址寄存器输出的地址s0,输出是数据Q1;
第二存储器,作平方根查找表1用,地址位为10位,数据位为15位,在地址h中存储的数据是: h1为地址h的高6位,h2为地址h的低4位,δ2=2-11-2-16,δ3=2-16-2-24,d就近舍入得到16位有效数字,其中第一位是1,在地址h中只存储后15位,所述第二存储器的输入是所述第一地址寄存器输出的地址s0,输出是数据Q2;
第三存储器,作平方根查找表2用,地址位为10位,数据位为15位,在地址h中存储的数据是: h1为地址h的高6位,h2为地址h的低4位,δ2=2-11-2-16,δ3=2-16-2-24,d就近舍入得到16位有效数字,其中第一位是1,在地址h中只存储后15位,所述第三存储器的输入是所述第一地址寄存器输出的地址s0,输出是数据Q3;
第四存储器,也作倒数查找表用,地址位为10位,数据位为5位,在地址h中存储的数据是:d=-[1/(1+h1×2-6+δ1+δ2+δ3)2]×(h2×2-15-δ2),h1为地址h的高6位,h2为地址h的低4位,δ1=2-7-2-11,δ2=2-11-2-16,δ3=2-16-2-24,d截取前5位有效数字,存储在地址h中,所述第四存储器的输入是所述第二地址寄存器输出的地址s1,输出是数据Q4;
第五存储器,也作平方根查找表1用,地址位为10位,数据位为4位,在地址h中存储的数据是: h1为地址h的高6位,h2为地址h的低4位,δ1=2-7-2-11,δ2=2-11-2-16,δ3=2-16-2-24,d截取前4位有效数字,存储在地址h中,所述第五存储器的输入是所述第二地址寄存器输出的地址s1,输出是数据Q5;
第六存储器,也作平方根查找表2用,地址位为10位,数据位为4位,在地址h中存储的数据是: h1为地址h的高6位,h2为地址h的低4位,δ1=2-7-2-11,δ2=2-11-2-16,δ3=2-16-2-24,d截取前4位有效数字,存储在地址h中,所述第六存储器的输入是所述第二地址寄存器输出的地址s1,输出是数据Q6;
补位电路,六个输入端分别依次与所述第一至第六存储器的输出端相连,分别输入数据Q1至Q6,该补位电路在数据Q1、Q2、Q3前各补01,依次得到r1、r2和r3,在数据Q4前补12位0,得到r4,在数据Q5、Q6前各补13位0,得到r5、r6,从r1至r6的每一个数据均为17位;
第一选择电路,分别设有数据exp_odd_even、以及操作状态信号operation_in的输入端,operation_in=0表示需要除法运算的初始值,operation_in=1表示需要平方根运算的初始值,所述第一选择电路还设有六个输入端,分别与所述补位电路的六个输出端相连,输入数据r1、r2、r3、r4、r5和r6,当operation_in=1且exp_odd_even=1时,所述第一选择电路输出r2和r5,当operation_in=1且exp_odd_even=0时,所述第一选择电路输出r3和r6,在其他情况下,所述第一选择电路输出r1和r4,所述第一选择电路的两个输出分别用a0、a1表示;
第二异或电路,两个输入端分别与所述尾数截取电路的数据c的输出端、所述第一选择电路的数据a1的输出端相连,将数据a1的每一位与数据c作异或,得到a1_xor,共17位;
加法电路,两个数据输入端分别与所述第一选择电路的数据a0的输出端、所述第二异或电路的数据a1_xor的输出端相连,首先把数据a0和a1_xor相加,得到17位的和,再把这17位的和就近舍入到15位,当第16位是1时则进位,是0时则截断,得到和sum,共15位;
和处理电路,输入端与所述加法电路的sum输出端相连,截取sum的第3位到第15位,再在前面补001111110,后面补10个0,得到seed1,共32位;再截取sum的第2位到第15位,前面补001111111,后面补9个0,得到seed2,共32位;再截取sum的第1位,得到flag;
第二选择电路,控制信号输入端与所述和处理电路的flag信号输出端相连,两个数据输入端分别与所述和处理电路的seed1、seed2数据输出端相连,当flag=0时,选择seed1输出,当flag=1时,选择seed2输出,输出结果x0即为所述预处理电路结构的输出结果,共32位,作除法或平方根运算的初始值用。
本发明的预处理电路结构可以得到基于乘法迭代实现的单精度浮点除法和平方根运算所需的初始值,是用相对较小的面积和较快的速度实现的。由于使用了对称双向查找表,比直接查找的查找表节省了很大的面积,另外由于对称性,比一般的双向查找表也节省了很多面积。由于本电路结构只需要查找操作和一步加法操作,而不需要乘法操作,可以达到较快的速度。本发明的预处理电路结构可以用在基于乘法迭代实现的单精度浮点除法和平方根运算的多种不同的电路结构之前,得到尾数为14位精度的初始值输入后面的电路结构。
附图说明
图1是一种使用预处理结构的浮点运算单元的结构示意图;
图2是单精度浮点数的存储格式;
图3是本发明的预处理结构的结构框图。
具体实施方式
为实现上述目的,本发明提供了一种预处理电路结构,它使用了对称双向查找表算法,能够得到单精度浮点除法和平方根运算所需的尾数为14位精度的初始值,也就是得到操作数的倒数的近似值或平方根倒数的近似值。本发明提供的预处理结构具有查找表、加法电路以及其他逻辑,它的结构框图见图3,含有:
操作数处理电路、尾数截取电路、第一异或电路、第一地址寄存器、第二地址寄存器、第一存储器、第二存储器、第三存储器、第四存储器、第五存储器、第六存储器、补位电路、第一选择电路、第二异或电路、加法电路、和处理电路、第二选择电路,其中,
第一存储器和第四存储器作为倒数查找表;其中,第一存储器的地址位为10位,数据位为15位,在地址h中存储的数据是:d=1/(1+h1×2-6+h2×2-10+δ2+δ3),其中,h1为h的高6位,h2为h的低4位,δ2=2-11-2-16,δ3=2-16-2-24,d就近舍入得到16位有效数字,其中第一位是1,只存储后15位在地址h中;
第四存储器的地址位为10位,数据位为5位,在地址h中存储的数据是:d=-1/(1+h1×2-6+δ1+δ2+δ3)2×(h2×2-15-δ2),其中,h1为h的高6位,h2为h的低4位,δ1=2-7-2-11,δ2=2-11-2-16,δ3=2-16-2-24,d截取前5位有效数字,存储这5位在地址h中;
第二存储器和第五存储器作为平方根查找表1;其中,第二存储器的地址位为10位,数据位为15位,在地址h中存储的数据是: 其中,h1为h的高6位,h2为h的低4位,δ2=2-11-2-16,δ3=2-16-2-24,d就近舍入得到16位有效数字,其中第一位是1,只存储后15位在地址h中;
第五存储器的地址位为10位,数据位为4位,在地址h中存储的数据是: 其中,h1为h的高6位,h2为h的低4位,δ1=2-7-2-11,δ2=2-11-2-16,δ3=2-16-2-24,d截取前4位有效数字,存储这4位在地址h中;
第三存储器和第六存储器作为平方根查找表2;其中,第三存储器的地址位为10位,数据位为15位,在地址h中存储的数据是: 其中,h1为h的高6位,h2为h的低4位,δ2=2-11-2-16,δ3=2-16-2-24,d就近舍入得到16位有效数字,其中第一位是1,只存储后15位在地址h中;
第六存储器的地址位为10位,数据位为4位,在地址h中存储的数据是: 其中,h1为h的高6位,h2为h的低4位,δ1=2-7-2-11,δ2=2-11-2-16,δ3=2-16-2-24,d截取前4位有效数字,存储这4位在地址h中;
预处理结构的输入信号有单精度操作数operand_A和操作状态信号operation_in(operation_in=0表示需要除法运算的初始值,operation_in=1表示需要平方根运算的初始值);
输入操作数operand_A输入操作数处理电路,该电路截取operand_A的23位尾数(即operand_A的后23位),得到,a_man,并截取operand_A的指数的最低位(即operand_A的第9位),得到exp_odd_even;
a_man输入到尾数截取电路,该电路截取a_man的高6位y0(共6位),截取a_man的第7位到第10位y1(共4位),截取a_man的第11位c,截取a_man的第12位到第15位y2(共4位);
c和y2输入第一异或电路,y2的每一位与c作异或,得到y2_xor(共4位);
y0和y1连接,存入第一地址寄存器,记为s0(共10位);y0和y2_xor连接,存入第二地址寄存器,记为s1(共10位);
将s0作为地址信号输入第一存储器、第二存储器、第三存储器,3个存储器分别输出相应地址中存储的数据Q1、Q2、Q3(分别为15位);将s1作为地址信号输入第四存储器、第五存储器、第六存储器,3个存储器分别输出相应地址中存储的数据Q4(共5位)、Q5(共4位)、Q6(共4位);
Q1、Q2、Q3、Q4、Q5、Q6输入补位电路,在Q1前补01,得到r1,在Q2前补01,得到r2,在Q3前补01,得到r3,在Q4前补12位0,得到r4,在Q5前补13位0,得到r5,在Q6前补13位0,得到r6(r1、r2、r3、r4、r5、r6均为17位);
r1、r2、r3、r4、r5、r6输入第一选择电路,输入操作状态信号operation_in和输入操作数处理电路得到的exp_odd_even作为第一选择电路的控制信号,当operation_in=1且exp_odd_even=1时,选择r2和r5输出,当operation_in=1且exp_odd_even=0时,选择r3、r6输出,当其他情况时,选择r1和r4输出,第一选择电路的两个输出分别记为a0、a1;
a1和尾数截取电路中得到的c输入第二异或电路,a1的每一位与c作异或,得到a1_xor(共17位);
a0和a1_xor输入加法电路,加法电路首先将a0和a1_xor相加,得到17位的和,然后将这17位的和就近舍入到15位(如果第16位是1则进位,如果第16位是0则截断),得到sum(共15位);
sum输入和处理电路,截取sum的第3位到第15位,前面补001111110,后面补10个0,得到seed1(共32位),截取sum的第2位到第15位,前面补001111111,后面补9个0,得到seed2(共32位),截取sum的第1位,得到fag;
seed1、seed2输入第二选择电路,flag作为第二选择电路的控制信号,当flag=0时,选择seed1输出,当flag=1时,选择seed2输出,第二选择电路的输出结果x0(共32位)即为预处理结构的输出结果,即除法或平方根运算需要的初始值。
为了得到尾数为14位精度的初始值,倒数查找表需要的面积是(2
10×15+2
10×5)bit=20Kb,其中,第一存储器的面积是(2
10×15)bit,第四存储器的面积是(2
10×5)bit。对于平方根,由于a的指数为奇数和偶数的情况不同,为了避免在指数是奇数时在计算中增加乘以
的乘法操作,平方根倒数需要两个查找表,平方根查找表1和平方根查找表2,面积都是(2
10×15+2
10×4)bit=19Kb,其中,第二存储器和第三存储器的面积是(2
10×15)bit,第五存储器和第六存储器的面积是(2
10×4)bit。
对于浮点除法B/A和平方根运算
令操作数A的符号位为0,指数为01111111,尾数不变,记为a。如果是除法操作,通过倒数查找表得到1/a的近似值;如果是平方根操作,且A的指数末位是0,则通过平方根查找表1得到
的近似值;如果是平方根操作,且A的指数末位是0,则通过平方根查找表2得到
的近似值。这样,得到的近似值就是除法或平方根运算所需要的迭代的初始值x0。