[发明专利]处理器浮点单元前导零数量的超前运算方法及系统有效
申请号: | 201711207258.9 | 申请日: | 2017-11-27 |
公开(公告)号: | CN108052307B | 公开(公告)日: | 2020-07-03 |
发明(设计)人: | 杨雪;庄伟;于立新;彭和平;侯国伟;张梅梅 | 申请(专利权)人: | 北京时代民芯科技有限公司;北京微电子技术研究所 |
主分类号: | G06F7/575 | 分类号: | G06F7/575 |
代理公司: | 中国航天科技专利中心 11009 | 代理人: | 范晓毅 |
地址: | 100076 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 处理器 浮点 单元 前导 数量 超前 运算 方法 系统 | ||
1.一种处理器浮点单元前导零数量的超前运算方法,其特征在于,所述方法包括下列步骤:
步骤100:译码运算,得到每8位数据的前导零个数:将数据位为8n位的数据A[8n-1:0]按照从高位到低位的顺序依次分为8位一组,分别通过n个8-4译码器译出n个8位数据中前导零的个数Bm[3:0];其中,Bm表示第m组8位数据的前导零个数,m=1~n,n=1~8;
步骤200:通过三级中的每一级的超前运算和逻辑判断得到数据A[8n-1:0]的前导零个数,每一级中会对输入数据进行两两分对,各对之间并行开展运算;其中,n为奇数时,最后一对只有一个输入数据;其中,
步骤200包括以下步骤:
步骤210:第一级输入为译码运算的结果Bm[3:0],输出为每16位或8位数据的前导零个数Bjk[4:0],逻辑判断依据为每对输入数据的最高位Bm[3],输出来自超前运算的结果和/或输入数据的低三位Bm[2:0];其中,k=j+1,j=1,3,5,7且j≤n;
步骤220:第二级输入为第一级输出的结果Bjk[4:0],输出为每32位、16位或8位数据的前导零个数Bjkrs[5:0],逻辑判断依据为每对输入数据的最高位Bjk[4],输出来自超前运算的结果和/或输入数据的低四位Bjk[3:0];其中,k=j+1,r=j+2,s=j+3,j=1,5且j≤n;
步骤230:第三级输入为第二级输出的结果Bjkrs[5:0],输出为8n位数据的前导零个数B;逻辑判断依据为每对输入数据的最高位Bjkrs[5],输出来自超前运算的结果和/或输入数据的低四位Bjkrs[4:0];其中,n=1~8;
8-4译码器的译码原理为,当输入数据为8’b00000000时,输出数据为4’b1000;当输入数据为8’b00000001时,输出数据为4’b0111;当输入数据为8’b0000001x时,输出数据为4’b0110;当输入数据为8’b000001xx时,输出数据为4’b0101;当输入数据为8’b00001xxx时,输出数据为4’b0100;当输入数据为8’b0001xxxx时,输出数据为4’b0011;当输入数据为8’b001xxxxx时,输出数据为4’b0010;当输入数据为8’b01xxxxxx时,输出数据为4’b0001;当输入数据为8’b1xxxxxxx时,输出数据为4’b0000;其中,x=0或1;
数据Bm[3:0]的运算公式为:
Bm[3]=~(A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1]|A[0]);
Bm[2]=~(A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1]|~A[0])(A[3]|A[2]|~A[1])(A[3]|~A[2])(~A[3]);
Bm[1]=~(A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|((A[1]|~A[0])~A[1]))(A[5]|~A[4])(~A[5]);
Bm[0]=~(A[7]|(A[6]|A[5]|(A[4]|A[3]|(A[2]|A[1]|~A[0])~A[2])~A[4])~A[6]);
其中,A[p]为数据A的第p+1位,Bm[q](q=0~3)为数据Bm的第q+1位;其中,p=0~7;
当n=1时,B1即为运算的前导零数量,运算结束;当1n≤8时,将Bm由高位到低位两两分为一对,各对之间并行开展第一级运算,当n为奇数时最后一对不足两个数据,则保留Bn不做运算,Bn的值直接传输给下一级,位数不足时高位补零;或
当n=2时,B1和B2的运算结果B12即为运算的前导零数量,运算结束;当2n≤8时,进入第二级逻辑判断,将第一级逻辑判断的输出结果Bjk由高位到低位两两分为一对,各对之间并行开展第二级逻辑判断,若最后一对不足两个数据,则保留一个数据不做运算直接传递给下一级,位数不足时高位补零,其中k=j+1;j=1,3,5,7且j≤n;或
当2n≤4时,B1234即为运算的前导零数量,运算结束;当4n≤8时,进入第三级逻辑判断,对第二级逻辑判断的两个运算结果进行运算;
每一级超前运算包括:
在第一级超前运算中,若高位数值Bj8,则该对数据前导零个数为Bjk=5’b{00,Bj[2:0]};若高位数值Bj=8,而低位数值Bk8,则该对数据前导零个数为Bjk=5’b{01,Bk[2:0]};若高位数值Bj=8,且低位数值Bk=8,则该对数据前导零个数为Bjk=5’b{10,000};当n为奇数时,最后一对只有Bn,只需在高位补零即可输出Bjk=5’b{0,Bn[3:0]};其中,k=j+1,j=1,3,5,7且j≤n;
在第二级超前运算中,若高位数值Bjk16,则该对数据前导零个数为Bjkrs=6’b{00,Bjk[3:0]};若高位数值Bjk=16,而低位数值Brs16,则该对数据前导零个数为Bjkrs=6’b{01,Brs[3:0]};若高位数Bjk=16,且低位数值Brs=16,则该对数据前导零个数为Bjkrs=6’b{100,000};当最后一对只有一个数据Bjk时,只需在高位补零即可输出Bjkrs=6’b{0,Bjk[4:0]};其中,k=j+1,r=j+2,s=j+3,j=1,5且j≤n;
在第三级超前运算中,若高位数值B123432,则该对数据前导零个数为B=7’b{00,B1234[4:0]};若高位数值B1234=32,而低位数值B567832,则该对数据前导零个数为B=7’b{01,B5678[4:0]};若高位数B1234=32,且低位数值B5678=32,则该对数据前导零个数为B=7’b{1,000,000};
每一级逻辑判断包括:
在第一级逻辑判断中,若Bj的最高位Bj[3]=0,则输出Bjk=5’b{00,Bj[2:0]};若Bj[3]=1,而Bk[3]=0,则输出Bjk=5’b{01,Bk[2:0]};若Bj[3]=1,且Bk[3]=1,则输出Bjk=5’b{10,000};当n为奇数时,最后一对只有Bn,输出Bjk=5’b{0,Bn[3:0]};其中,k=j+1,j=1,3,5,7且j≤n;
在第二级逻辑判断中,若Bjk[4]=0,则输出Bjkrs=6’b{00,Bjk[3:0]};若Bjk[4]=1,而Brs[4]=0,则输出Bjkrs=6’b{01,Brs[3:0]};若Bjk[4]=1,且Brs[4]=1,则输出Bjkrs=6’b{100,000};当最后一对只有一个数据Bjk时,输出Bjkrs=6’b{0,Bjk[4:0]};其中,k=j+1,r=j+2,s=j+3,j=1,5且j≤n;
在第三级逻辑判断中,若B1234[5]=0,则输出B=7’b{00,B1234[4:0]};若B1234[5]=1而B5678[5]=0,则输出B=7’b{01,B5678[4:0]};若B1234[5]=1且B5678[5]=1,则输出B=7’b{1,000,000};当只存在B1234,没有B5678时,前导零个数B=B1234。
2.一种处理器浮点单元前导零数量的超前运算系统,其特征在于包括:
第一模块,用于译码运算得到每8位数据的前导零个数:将数据位为8n位的数据A[8n-1:0]按照从高位到低位的顺序依次分为8位一组,分别通过n个8-4译码器译出n个8位数据中前导零的个数Bm[3:0];其中,Bm表示第m组8位数据的前导零个数,m=1~n,n=1~8;
第二模块,用于通过三级中的每一级的超前运算和逻辑判断得到数据A[8n-1:0]的前导零个数,每一级中会对输入数据进行两两分对,各对之间并行开展运算;其中,n为奇数时,最后一对只有一个输入数据;
8-4译码器的译码原理为,当输入数据为8’b00000000时,输出数据为4’b1000;当输入数据为8’b00000001时,输出数据为4’b0111;当输入数据为8’b0000001x时,输出数据为4’b0110;当输入数据为8’b000001xx时,输出数据为4’b0101;当输入数据为8’b00001xxx时,输出数据为4’b0100;当输入数据为8’b0001xxxx时,输出数据为4’b0011;当输入数据为8’b001xxxxx时,输出数据为4’b0010;当输入数据为8’b01xxxxxx时,输出数据为4’b0001;当输入数据为8’b1xxxxxxx时,输出数据为4’b0000;其中,x=0或1;
数据Bm[3:0]的运算公式为:
Bm[3]=~(A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1]|A[0]);
Bm[2]=~(A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1]|~A[0])(A[3]|A[2]|~A[1])(A[3]|~A[2])(~A[3]);
Bm[1]=~(A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|((A[1]|~A[0])~A[1]))(A[5]|~A[4])(~A[5]);
Bm[0]=~(A[7]|(A[6]|A[5]|(A[4]|A[3]|(A[2]|A[1]|~A[0])~A[2])~A[4])~A[6]);
其中,A[p]为数据A的第p+1位,Bm[q](q=0~3)为数据Bm的第q+1位;其中,p=0~7;
当n=1时,B1即为运算的前导零数量,运算结束;当1n≤8时,将Bm由高位到低位两两分为一对,各对之间并行开展第一级运算,当n为奇数时最后一对不足两个数据,则保留Bn不做运算,Bn的值直接传输给下一级,位数不足时高位补零;或
当n=2时,B1和B2的运算结果B12即为运算的前导零数量,运算结束;当2n≤8时,进入第二级逻辑判断,将第一级逻辑判断的输出结果Bjk由高位到低位两两分为一对,各对之间并行开展第二级逻辑判断,若最后一对不足两个数据,则保留一个数据不做运算直接传递给下一级,位数不足时高位补零,其中k=j+1;j=1,3,5,7且j≤n;或
当2n≤4时,B1234即为运算的前导零数量,运算结束;当4n≤8时,进入第三级逻辑判断,对第二级逻辑判断的两个运算结果进行运算;
每一级超前运算包括:
在第一级超前运算中,若高位数值Bj8,则该对数据前导零个数为Bjk=5’b{00,Bj[2:0]};若高位数值Bj=8,而低位数值Bk8,则该对数据前导零个数为Bjk=5’b{01,Bk[2:0]};若高位数值Bj=8,且低位数值Bk=8,则该对数据前导零个数为Bjk=5’b{10,000};当n为奇数时,最后一对只有Bn,只需在高位补零即可输出Bjk=5’b{0,Bn[3:0]};其中,k=j+1,j=1,3,5,7且j≤n;
在第二级超前运算中,若高位数值Bjk16,则该对数据前导零个数为Bjkrs=6’b{00,Bjk[3:0]};若高位数值Bjk=16,而低位数值Brs16,则该对数据前导零个数为Bjkrs=6’b{01,Brs[3:0]};若高位数Bjk=16,且低位数值Brs=16,则该对数据前导零个数为Bjkrs=6’b{100,000};当最后一对只有一个数据Bjk时,只需在高位补零即可输出Bjkrs=6’b{0,Bjk[4:0]};其中,k=j+1,r=j+2,s=j+3,j=1,5且j≤n;
在第三级超前运算中,若高位数值B123432,则该对数据前导零个数为B=7’b{00,B1234[4:0]};若高位数值B1234=32,而低位数值B567832,则该对数据前导零个数为B=7’b{01,B5678[4:0]};若高位数B1234=32,且低位数值B5678=32,则该对数据前导零个数为B=7’b{1,000,000};
每一级逻辑判断包括:
在第一级逻辑判断中,若Bj的最高位Bj[3]=0,则输出Bjk=5’b{00,Bj[2:0]};若Bj[3]=1,而Bk[3]=0,则输出Bjk=5’b{01,Bk[2:0]};若Bj[3]=1,且Bk[3]=1,则输出Bjk=5’b{10,000};当n为奇数时,最后一对只有Bn,输出Bjk=5’b{0,Bn[3:0]};其中,k=j+1,j=1,3,5,7且j≤n;
在第二级逻辑判断中,若Bjk[4]=0,则输出Bjkrs=6’b{00,Bjk[3:0]};若Bjk[4]=1,而Brs[4]=0,则输出Bjkrs=6’b{01,Brs[3:0]};若Bjk[4]=1,且Brs[4]=1,则输出Bjkrs=6’b{100,000};当最后一对只有一个数据Bjk时,输出Bjkrs=6’b{0,Bjk[4:0]};其中,k=j+1,r=j+2,s=j+3,j=1,5且j≤n;
在第三级逻辑判断中,若B1234[5]=0,则输出B=7’b{00,B1234[4:0]};若B1234[5]=1而B5678[5]=0,则输出B=7’b{01,B5678[4:0]};若B1234[5]=1且B5678[5]=1,则输出B=7’b{1,000,000};当只存在B1234,没有B5678时,前导零个数B=B1234。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京时代民芯科技有限公司;北京微电子技术研究所,未经北京时代民芯科技有限公司;北京微电子技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711207258.9/1.html,转载请声明来源钻瓜专利网。