[發明專利]處理器浮點單元前導零數量的超前運算方法及系統有效
| 申請號: | 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.szxzyx.cn/pat/books/201711207258.9/1.html,轉載請聲明來源鉆瓜專利網。





