TWI389028B - 多用途之乘加法功能單元 - Google Patents
多用途之乘加法功能單元 Download PDFInfo
- Publication number
- TWI389028B TWI389028B TW094139409A TW94139409A TWI389028B TW I389028 B TWI389028 B TW I389028B TW 094139409 A TW094139409 A TW 094139409A TW 94139409 A TW94139409 A TW 94139409A TW I389028 B TWI389028 B TW I389028B
- Authority
- TW
- Taiwan
- Prior art keywords
- operand
- result
- path
- operations
- bit
- Prior art date
Links
- 238000012360 testing method Methods 0.000 claims description 111
- 238000006243 chemical reaction Methods 0.000 claims description 66
- 230000004044 response Effects 0.000 claims description 32
- 238000004364 calculation method Methods 0.000 claims description 17
- 238000010606 normalization Methods 0.000 claims description 16
- 238000013507 mapping Methods 0.000 claims description 5
- 239000000543 intermediate Substances 0.000 claims 17
- 239000000047 product Substances 0.000 description 66
- 238000006073 displacement reaction Methods 0.000 description 48
- 230000006870 function Effects 0.000 description 31
- 238000010586 diagram Methods 0.000 description 29
- 239000013067 intermediate product Substances 0.000 description 26
- 238000012545 processing Methods 0.000 description 26
- 230000015654 memory Effects 0.000 description 23
- 238000000034 method Methods 0.000 description 22
- 238000013461 design Methods 0.000 description 18
- 101000835595 Homo sapiens Tafazzin Proteins 0.000 description 15
- 102100026508 Tafazzin Human genes 0.000 description 15
- 230000004048 modification Effects 0.000 description 14
- 238000012986 modification Methods 0.000 description 14
- 238000001514 detection method Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 10
- 238000012937 correction Methods 0.000 description 9
- 238000012546 transfer Methods 0.000 description 9
- 239000000872 buffer Substances 0.000 description 8
- 230000001788 irregular Effects 0.000 description 8
- 230000009467 reduction Effects 0.000 description 8
- 235000012431 wafers Nutrition 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 6
- 239000003550 marker Substances 0.000 description 6
- 230000001419 dependent effect Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013142 basic testing Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000000052 comparative effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/221—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test buses, lines or interfaces, e.g. stuck-at or open line faults
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Advance Control (AREA)
- Emergency Protection Circuit Devices (AREA)
Description
本申請案主張以下美國專利申請案之優先權,以下美國專利申請案均於2004年11月10日提申,且全部受讓給本申請案之受讓人:●申請案第10/985,291號,名稱為「Multipurpose Multiply-Add Functional Unit」;●申請案第10/986,531號,名稱為「Multipurpose Functional Unit with Combined Integer and Floating-Point Multiply-Add Pipeline」;●申請案第10/985,695號,名稱為「Multipurpose Functional Unit with Multiply-Add and Logical Test Pipeline」;以及●申請案第10/985,674號,名稱為「Multipurpose Functional Unit with Multiply-Add and Format Conversion Pipeline」。第10/9865,291號。
本發明一般係關於微處理器,更明確地說,係關於一種供處理器核心使用的多用途之乘加法功能單元。
即時電腦動畫對處理器的需求非常高。為滿足該些需求,專屬圖形處理單元通常會採用高平行架構,讓數顆(舉例來說,16顆)核心平行進行運算,每顆核心均包含多條(舉例來說,8條)平行管線,該等平行管線含有功能單元來執行該處理單元所支援的運算。該些運算通常包含各種整數與浮點算數運算(加法、乘法等等)、位元式邏輯運算、比較運算、格式轉換運算等等。該等管線通常具有相同的設計,因此其所支援的任何指令均可由任何管線來處理;據此,每條管線均需要一組完整的功能單元。
習知技術中,每個功能單元被設計成僅僅用來處理一或兩項運算。舉例來說,該等功能單元可能包含一整數加/減法單元、一或多個二元式邏輯單元、以及一或多個格式轉換單元用以於整數與浮點格式間進行轉換。
圖形處理單元希望支援的基本運算(指令)數目已經隨著時間而不斷提高。已經有人提出各種新型的指令,例如三元式「乘加法」(MAD)指令,其可針對運算元A、B、以及C來計算A*B+C。不斷地增加功能單元來支援此等運算會造成一些問題。舉例來說,因為任何新的功能單元均必須被加入每條管線中,所以,光是增加額外單元所需要的晶片面積便非常地龐大。另外,新的功能單元還會增加功率消耗,如此便可能必須改良冷卻系統。此等因素均會提高設計晶片的難度與成本。此外,就此來說,功能單元的數量會超過某一循環中可被送出的指令數量,從而使得無法有效運用該等功能單元的處理能力。
所以,本發明希望提供僅需要小晶片面積且可被有效運用的功能單元。
本發明的實施例提供多用途之功能單元。於一實施例中,該多用途之功能單元支援以下全部運算:整數與浮點運算元的加法、乘法、以及乘加法;測試運算,其包含布林運算、最大值與最小值運算、三元式比較運算以及二元式測試運算(舉例來說,大於、小於、等於、或是無序(unordered));左移與右移運算;格式轉換運算,用以於整數格式與浮點格式間進行轉換、用以於其中一種整數格式與另一種整數格式間進行轉換以及用以於其中一種浮點格式與另一種浮點格式間進行轉換;超越函數(包含指數函數與三角函數在內)之引數的引數縮減運算(argument reduction operation);以及分數運算,用以回傳一浮點運算元的分數部。於其它實施例中,該多用途之功能單元亦可支援該些運算及/或其它運算的任何子集。
根據本發明之一項觀點,一用於一處理器的多用途之功能單元包含:一輸入部、一乘法管線、一測試管線、一加法管線、一指數管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生控制信號。該乘法管線會被耦接至該輸入
部並且會被配置成用以響應該等控制信號來計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該測試管線會被耦接至該輸入部並且會被配置成用以響應該等控制信號來對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行比較運算,並且選擇該比較結果作為第二中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該指數管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行指數計算,並且選擇該指數計算的結果作為指數結果。該輸出部會被耦接用以接收該運算結果與該指數結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。該等受支援的運算包含:浮點乘加法(FMAD)運算、整數乘加法(IMAD)運算、以及至少一種比較測試運算。
本發明可支援各種比較測試運算。舉例來說,於其中一實施例中,該至少一種比較測試運算包含選自由下面所組成之群中其中一或多種運算:最大值(MAX)運算、最小值(MIN)運算、以及三元式比較(CMP)運算。於另一實施例中,該至少一種比較測試運算包含選自由下面所組成之群中其中一或多種二元式測試(SET)運算:大於運算、小於運算、等於運算、以及無序運算,其中該等一或多種二元式測試
運算中每一者均會產生一布林結果。於支援具有布林結果之SET運算的實施例中,可能會於該測試管線與該輸出部間耦接一附屬結果路徑,而且該條附屬結果路徑會被配置成用以將一布林附屬結果從該測試管線傳送至該輸出部,而該輸出部則可進一步響應該等控制信號被配置成當該運算碼指定的係該等SET運算中其中一者時用以依據該布林附屬結果以產生最終的結果。
本發明還可支援其它運算。舉例來說,該等受支援的運算可能進一步包含:位元式布林邏輯運算(舉例來說,AND運算、OR運算、XOR運算);浮點加法(FADD)運算以及整數加法(IADD)運算,其中該加法管線可進一步響應該等控制信號被配置成用以實施該FADD運算與該IADD運算;浮點乘法(FMUL)運算以及整數乘法(IMUL)運算,其中該乘法管線可進一步響應該等控制信號被配置成用以實施該FMUL運算與該IMUL運算;格式轉換運算,用以將第一運算元從輸入格式轉換成目標格式;區域映對(PRO)運算,舉例來說,此為針對三角函數與指數函數;以及分數(FRC)運算,用以傳回該第一運算元的分數部。本發明亦可支援該些運算的各種子組合以及其它運算。
根據本發明另一項觀點,一微處理器包含一具有功能單元的執行核心,該等功能單元會被配置成用以執行程式運算。該等功能單元至少其中一者係一多用途之功能單元,其能夠執行數種受支援的運算,該等受支援的運算包含至少下面的運算:浮點乘加法(FMAD)運算、整數乘加法
(IMAD)運算、以及至少一種比較測試運算。該多用途之功能單元包含:一輸入部、一乘法管線、一測試管線、一加法管線、一指數管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還進一步可響應該運算碼被配置成用以產生控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該測試管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行比較運算,並且選擇該比較結果作為第二中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該指數管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行指數計算,並且選擇該指數計算的結果作為指數結果。該輸出部會被耦接用以接收該運算結果與該指數結果,並且會被配置成用以響應該等控制信號來為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。
根據本發明又一項觀點,提供一種操作一微處理器之功能單元的方法。該方法包括接收一運算碼與一或多個運
算元,該運算碼會指定欲對該等一或多個運算元來實施的複數種受支援的運算中其中一種。響應該運算碼與該等一或多個運算元,該功能單元中的乘法管線會運作用以產生一第一中間結果,該功能單元中的測試管線會運作用以產生一第二中間結果,而該功能單元中的指數管線則會運作用以產生一指數結果與一對齊控制信號。該功能單元中的加法管線會響應該運算碼與該對齊控制信號來運作用以加總該等第一與第二中間結果,並且產生一運算結果。該功能單元中的輸出部會運作用以從該運算結果與該指數結果中計算出最終的結果。該等受支援的運算包含:浮點乘加法(FMAD)運算、整數乘加法(IMAD)運算、以及至少一種比較測試運算。
根據本發明進一步觀點,一用於一處理器的多用途之功能單元包含:一輸入部、一乘法管線、一加法管線以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部可進一步響應該運算碼被配置成用以產生控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該輸出部會被耦接用以接收該運
算結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。該等受支援的運算包含浮點乘加法(FMAD)運算以及整數乘加法(IMAD)運算,該等運算均可對該等第一運算元、第二運算元、以及第三運算元來進行運算,而且該乘法管線與該加法管線可進一步響應該等控制信號而被配置,俾使該最終結果於FMAD運算中代表的係一浮點數值而於IMAD運算中代表的則係一整數數值。
本發明還可支援各種其它運算。舉例來說,於其中一實施例中,該等受支援的運算進一步包含浮點加法(FADD)運算以及整數加法(IADD)運算,兩者均係對第一與第三運算元來作運算。於另一實施例中,該等受支援的運算進一步包含浮點乘法(FMUL)運算以及整數乘法(IMUL)運算,兩者均係對第一與第二運算元來作運算。於又一實施例中,該等受支援的運算進一步還包含整數的絕對差相加(ISAD)運算。
根據本發明另一項觀點,一微處理器包含一具有功能單元的執行核心,該等功能單元會被配置成用以執行程式運算。該等功能單元至少其中一者係一多用途之功能單元,其能夠執行數種受支援的運算,該等受支援的運算包含至少下面的運算:浮點乘加法(FMAD)運算以及整數乘加法(IMAD)運算。該多用途之功能單元包含:一輸入部、一乘法管線、一加法管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,
並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生複數個控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該輸出部會被耦接用以接收該運算結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。該乘法管線與該加法管線可進一步響應該等控制信號被配置,俾使該最終結果於FMAD運算中代表的係一浮點數值而於IMAD運算中代表的則係一整數數值。
根據本發明又一項觀點,提供一種操作一微處理器之功能單元的方法。該方法包括接收一運算碼與一或多個運算元,該運算碼會指定欲對該等一或多個運算元來實施的複數種受支援的運算中其中一種。響應該運算碼與該等一或多個運算元,該功能單元中的乘法管線會運作用以產生一第一中間結果與一第二中間結果。該功能單元中的加法管線會運作用以加總該等第一與第二中間結果,並且產生一運算結果。該功能單元中的輸出部會運作用以從該運算結果中計算出最終的結果。該等受支援的運算包含:浮點乘加法(FMAD)運算以及整數乘加法(IMAD)運算。
根據本發明再一項觀點,一用於一處理器的多用途之功能單元包含:一輸入部、一乘法管線、一測試管線、一加法管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生複數個控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該測試管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行比較運算,並且選擇該比較結果作為第二中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該輸出部會被耦接用以接收該運算結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。該等複數個受支援的運算包含:一可對該等第一運算元、第二運算元、以及第三運算元進行運算的乘加法(MAD)運算;以及一可對該等第一運算元、第二運算元、以及第三運算元中至少其中一者進行運算的邏輯測試運算。
於一些實施例中,該邏輯測試運算可能係一二元式測試(SET)運算所組成的集合中其中一者,該二元式測試運算
集合包含至少下面的測試運算:等於測試、大於測試、以及小於測試。於其中一實施例中,該邏輯測試運算的該等第一運算元、第二運算元、以及第三運算元可能係整數運算元,亦可能是浮點運算元。於一些實施例中,該等受支援的運算還包含可對該等第一運算元、第二運算元、以及第三運算元進行運算的浮點乘加法(FMAD)運算。於其它實施例中,該等受支援的運算還包含:位元式布林AND運算、位元式布林OR運算、以及位元式布林XOR運算。
根據本發明另一項觀點,一微處理器包含一具有功能單元的執行核心,該等功能單元會被配置成用以執行程式運算。該等功能單元至少其中一者係一多用途之功能單元,其能夠執行數種受支援的運算,該等受支援的運算包含:一可對該等第一運算元、第二運算元、以及第三運算元進行運算的乘加法(MAD)運算;以及一可對該等第一運算元、第二運算元、以及第三運算元中至少其中一者進行運算的邏輯測試運算。該多用途之功能單元包含:一輸入部、一乘法管線、一測試管線、一加法管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生複數個控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該測試管線會被耦接至該
輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行比較運算,並且選擇該比較結果作為第二中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該輸出部會被耦接用以接收該運算結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。
根據本發明又一項觀點,提供一種操作一微處理器之功能單元的方法。該方法包括接收一運算碼與一或多個運算元,該運算碼會指定欲對該等一或多個運算元來實施的數種受支援的運算中其中一種。響應該運算碼與該等一或多個運算元,該功能單元中的乘法管線會運作用以產生一第一中間結果,該功能單元中的測試管線會運作用以產生一第二中間結果。該功能單元中的加法管線會運作用以加總該等第一與第二中間結果,並且產生一運算結果。該功能單元中的輸出部會運作用以從該運算結果中計算出最終的結果。該等受支援的運算包含:一可對該等第一運算元、第二運算元、以及第三運算元進行運算的乘加法(MAD)運算;以及一可對該等第一運算元、第二運算元、以及第三運算元中至少其中一者進行運算的邏輯測試運算。
根據本發明進一步觀點,一用於一處理器的多用途之功能單元包含:一輸入部、一乘法管線、一加法管線、一
指數管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該指數管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行指數計算,並且選擇該指數計算的結果作為指數結果。該輸出部會被耦接用以接收該運算結果與該指數結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。該等受支援的運算包含:一可對該等第一運算元、第二運算元、以及第三運算元進行運算的乘加法(MAD)運算;以及一格式轉換運算,用以將該第一運算元從一輸入格式轉換成一目標格式。
本發明還可支援整數運算與浮點運算的各種組合。舉例來說,於其中一實施例中,支援整數MAD運算,而且還支援該輸入格式與該目標格式中至少其中一者係整數格式的格式轉換運算。於另一實施例中,支援浮點MAD運算,
而且還支援該輸入格式與該目標格式中至少其中一者係浮點格式的格式轉換運算。於又一實施例中,該MAD運算可選為浮點MAD運算或是整數MAD運算。
根據本發明另一項觀點,一微處理器包含一具有功能單元的執行核心,該等功能單元會被配置成用以執行程式運算。該等功能單元至少其中一者係一多用途之功能單元,其能夠執行數種受支援的運算,該等受支援的運算至少包含下面的運算:一可對該等第一運算元、第二運算元、以及第三運算元進行運算的乘加法(MAD)運算;以及一格式轉換運算,用以將該第一運算元從一輸入格式轉換成一目標格式。該多用途之功能單元包含:一輸入部、一乘法管線、一加法管線、一指數管線、以及一輸出部。該輸入部會被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且會接收一運算碼用以指定欲實施的數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生控制信號。該乘法管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果。該加法管線會被耦接至該乘法部與該測試管線並且可響應該等控制信號被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果。該指數管線會被耦接至該輸入部並且可響應該等控制信號被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行指數計算,並且選擇
該指數計算的結果作為指數結果。該輸出部會被耦接用以接收該運算結果與該指數結果,並且可響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果。
根據本發明又一項觀點,提供一種操作一微處理器之功能單元的方法。該方法包括接收一運算碼與一或多個運算元,該運算碼會指定欲對該等一或多個運算元來實施的複數種受支援的運算中其中一種。響應該運算碼與該等一或多個運算元,該功能單元中的乘法管線會運作用以產生一第一中間結果與一第二中間結果,該功能單元中的測試管線會運作用以產生一第二中間結果。該功能單元中的指數管線會運作用以產生一指數結果與一對齊控制信號。該功能單元中的加法管線會響應該對齊控制信號來運作用以加總該等第一與第二中間結果,並且產生一運算結果。該等受支援的運算包含至少下面的運算:一可對該等第一運算元、第二運算元、以及第三運算元進行運算的乘加法(MAD)運算;以及一格式轉換運算,用以將該第一運算元從一輸入格式轉換成一目標格式。
從下文詳細說明中,配合圖式,將可更瞭解本發明的特性與優點。
本發明的實施例提供一種供任何處理系統使用的高速多用途之功能單元,該處理系統能夠執行大量的高速運
算,例如圖形處理器。於其中一實施例中,該功能單元支援三元式乘加法(MAD)運算,用以透過一含有一乘法器樹與一加法器電路的管線,針對整數格式或浮點格式的輸入運算元A、B以及C來計算A*B+C。變更該MAD管線的硬體,該功能單元還支援其它的整數與浮點算術運算。該功能單元可進一步擴充以便利用少量的額外電路系統便可支援各種比較運算、格式轉換運算以及位元式運算。
I.系統概述
A.圖形處理器
圖1所示的係一根據本發明一實施例之電腦系統100的方塊。電腦系統100包含一中央處理單元(CPU)102以及一系統記憶體104,兩者會透過一匯流排106進行通信。從被耦接至匯流排106的一或多個使用者輸入裝置108(舉例來說,鍵盤、滑鼠)中可接收使用者輸入。視覺輸出會被送至一像素型的顯示裝置110(舉例來說,習知的CRT型或LCD型監視器)上,該顯示裝置會在被耦接至系統匯流排106的圖形處理子系統112的控制下進行運作。系統碟128以及一或多個抽取式儲存裝置129(舉例來說,磁碟機、光碟(CD)機、及/或DVD播放機)之類的其它組件亦可被耦接至系統匯流排106。系統匯流排106可利用一或多個各種匯流排協定來施行,該等協定包含PCI(週邊組件互連)、AGP(高級圖形處理)、及/或PCI-Express(PCI-E)。本實施例中亦可提供適當的「橋接」晶片(例如北橋以及南橋(圖中未
顯示))來互連各種組件及/或匯流排。
圖形處理子系統112包含一圖形處理單元(GPU)114以及一圖形記憶體116,可利用一或多種積體電路裝置(例如可程式處理器、特定應用積體電路(ASIC)、以及記憶體裝置)來施行。GPU 114包含一描圖模組120、一記憶體介面模組122、以及一掃描輸出(scanout)模組124。描圖模組120可被配置成用以實施和從透過系統匯流排106所提供的圖形資料中來產生像素資料相關的各項工作(舉例來說,施行各種2D或3D描圖演算法)、和圖形記憶體116產生互動用以儲存且更新像素資料、以及實施類似的工作。描圖模組120可被有利地配置成用以從於CPU 102上所執行的各種程式所提供的2D或3D實景資料(scene data)中來產生像素資料。必要時,亦可改變描圖模組120的此種特殊配置,不過,因為此並非為瞭解本發明的關鍵所在,所以本文將省略其詳細說明。
記憶體介面模組122會與描圖模組120以及掃描輸出控制邏輯124進行通信,該記憶體介面模組122會管理和圖形記憶體116所進行的所有互動作業。記憶體介面模組122還可包含數條路徑,用以將收自系統匯流排106的像素資料寫入圖形記憶體116之中,而不必由描圖模組120來進行處理。必要時,亦可改變記憶體介面模組122的此種特殊配置,不過,因為此並非為瞭解本發明的關鍵所在,所以本文將省略其詳細說明。
圖形記憶體116可利用具有常見習知設計的一或多種
積體電路記憶體裝置來施行。該圖形記憶體116可包含各種實體或邏輯子分部,例如像素緩衝器126。像素緩衝器126會儲存一影像(或一影像其中一部份)的像素資料,其會由掃描控制邏輯124來讀取與處理,並且會被傳送至顯示裝置110進行顯示。此像素資料可從透過系統匯流排106被送至GPU 114之描圖模組120的2D或3D實景資料(scene data)中來產生或是可藉由CPU 102上所執行的各種程序來產生,並且透過系統匯流排106送至像素緩衝器126。
掃描輸出模組124可與GPU 114一起整合於單一晶片之中或是亦可設計在不同的晶片中。掃描輸出模組124會從像素緩衝器126中讀取像素顏色資料並且將該資料傳送至顯示裝置110中進行顯示。於其中一實施例中,掃描輸出模組124係以等時的方式來運作;不論GPU 114中發生的任何其它活動或是系統100中其它地方發生的任何其它活動為何,其均會以指定的更新速率(舉例來說,80Hz)來掃描輸出像素資料訊框。於一些實施例中,該指定的更新速率可能係一項使用者可選擇的參數,而且可配合該顯示格式來改變掃描輸出的順序(舉例來說,交錯式掃描或連續式掃描)。掃描輸出模組124還可實施其它作業,例如調整特殊顯示硬體的顏色數值及/或藉由組合源自像素緩衝器126的像素資料與一視訊或游標重疊影像或類似的影像(其可從圖形記憶體116、系統記憶體104、或是任何資料來源(圖中未顯示)中取得)來產生組合式畫面影像。必要時,亦可改變掃描輸出模組124的此種特殊配置,不過,因為此並非為
瞭解本發明的關鍵所在,所以本文將省略其詳細說明。
於系統100的運作期間,CPU 102會執行各種程式,例如作業系統程式、應用程式、以及圖形處理子系統112的驅動程式。該等驅動程式可施行習知的應用程式介面(API),例如OpenGL、Microsoft DirectX、或是D3D,其可使應用程式與作業系統程式產生起本項技術所知的圖形處理子系統112各項功能。圖形處理子系統112的運作可經由使用適當的命令緩衝器而非同步於其它的系統運作。
吾人將會發現,本文所述的系統僅係作為解釋之用,各種變化與修正均有可能。一GPU可利用任何合宜的技術來設計,舉例來說,可將其設計成一或多個積體電路裝置。該GPU可安置在一可能含有一或多個此類處理器的擴充卡之上、直接安置於一系統主機板之上、或是整合於一系統晶片組組件之中(舉例來說,整合於常用PC系統架構的北橋晶片之中)。該圖形處理子系統可能包含任何數量的專屬圖形記憶體(部份施行方式亦可能不包含任何專屬圖形記憶體)並且可以任何組合方式來使用系統記憶體與專屬圖形記憶體。明確地說,必要時,可將該像素緩衝器設計在專屬圖形記憶體或系統記憶體之中。該掃描輸出電路系統可與一GPU整合在一起或是可設置在一分離的晶片之上,並且可利用一或多個ASIC、可程式處理器元件、其它積體電路技術、或是上述任何組合方式來施行。此外,用來實現本發明的GPU亦可併入各種裝置之中,其包含一般用途電腦系統、視訊遊戲機、以及其它的特殊用途電腦系統、DVD
播放機、手持式裝置(如行動電話或個人數位助理)、...等。
B.執行核心
圖2所示的係一根據本發明一實施例之執行核心200的方塊圖。舉例來說,執行核心200可被設計在上述GPU 114之描圖模組120的可程式繪圖器(shader)之中。該執行核心200會被配置成用以執行任意的指令序列,用以進行各種運算。執行核心200包含一擷取與分派單元202、一發送單元204、一多用途之乘加法(MMAD)功能單元220、數個(M個)其它功能單元(FU)222、以及一暫存器檔224。每個功能單元220、222均會被配置成用以實施指定的運算。下文將說明MMAD單元220所實施的運算。該等其它功能單元222可能具有常用的習知設計並且可能會支援各種作業,例如超函數計算(舉例來說,正弦與餘弦、指數與對數、...等)、倒數、紋理過濾、記憶體存取(舉例來說,載入作業與儲存作業)、整數或浮點算術、...等。
於執行核心200的運作期間,擷取與分派單元202會從一指令儲存體(圖中未顯示)中取得指令,對該等指令進行解碼,並且將該等指令分派給發送單元204作為和運算元參考值或運算元資料相關聯的運算碼。對每個指令而言,發送單元204會從暫存器檔224中取得任何的關係運算元。當某道指令的所有運算元均已經備妥之後,發送單元204便會藉由將該運算碼與該等運算元傳送給MMAD單元220或另一功能單元222來發送該道指令。發送單元204可
有利地使用該運算碼來選擇正確的功能單元以執行特定的指令。擷取與分派單元202以及發送單元204均可利用習知的微處理器架構及技術來施行,不過,因為此並非為瞭解本發明的關鍵所在,所以本文將省略其詳細說明。
MMAD單元220與其它功能單元222會接收該等運算碼與相關聯的運算元,並且對該等運算元來執行該項指定運算。結果資料會以一結果數值(OUT)以及一條件碼(COND)的形式來提供,該條件碼COND提供的係和該結果數值OUT有關的一般資訊,例如其究竟係正值或負值或是一特殊數值(說明如下)。於一些實施例中,該條件碼COND可能還會表示於該功能單元的運作期間是否有發生錯誤或是例外。該結果資料會透過一資料傳輸路徑226被向前傳送至暫存器檔224(或是另一目的地)。
吾人將會發現,圖2的執行核心僅係作為解釋之用,各種變化與修正均有可能。擷取與分派單元202以及發送單元204均可施行任何必要的微架構,其包含具有有序或無序指令發送的純數架構或超純數架構、推測式執行模型、...等必要的微架構。於部份架構中,該發送器可送至一長指令字組,該字組中包含供多重功能單元來使用的運算碼及/或運算元。該執行核心還可包含一連串的管線式功能單元,其中,某一級中各功能單元的結果會被向前傳送至後級中的功能單元,而非直接傳送至一暫存器檔,該等功能單元可受控於單一長指令字組或是不同的指令。熟習本項技術的人士於閱讀本文教示內容之後便可瞭解,MMAD
單元220可被設計成任何微處理器中的功能單元,而不僅限於圖形處理器或僅限於任何特殊的處理器或執行核心架構。
C. MMAD單元
根據本發明一實施例,執行核心200包含一MMAD單元220,其支援對三個運算元(本文以A、B、以及C來表示)來實施的各種整數與浮點運算。於其中一實施例中,MMAD單元220會施行一乘加法(MAD)管線,用以針對整數或浮點運算元來計算A*B+C,而且此條管線中的各種電路可被用來執行各種其它的整數與浮點運算。MMAD單元220的運算係受控於發送電路204,該發送電路204會如上述般地提運算元與運算碼給MMAD單元220。發送電路204所提供之配有每組運算元的該等運算碼會控制MMAD單元220的行為,用以於該組運算元上選擇性地執行運算中其中一種。
MMAD單元220可有利地被設計成用來處理具有各種格式的運算元,該等格式包含整數格式與浮點格式。於本文所述的實施例中,MMAD單元220會處理兩種浮點格式(本文稱為fp32以及fp16)以及六種整數格式(本文稱為u8、u16、u32、s8、s16、以及s32)。現在將說明該些格式。
「Fp32」表示的係IEEE 754標準中的單精確度浮點格式,其中係以一位記號位元、八位指數位元、以及23位有意義位元來代表一正常的浮點數。該指數會向上偏移127位,俾使可利用從1至254的整數來代表範圍介於2-126至
2127之間的指數。對「正常」數來說,該等23位有意義位元係被解釋成一24位位元假數的分數部,並且有一隱含數字1係其整數部。該等指數位元中全部為零的數值則稱為非正規數(denorm),且會被解釋成於該假數中不具有隱含的最前方數字1,此等數值可能代表的係某一計算中的下限溢位(underflow)。該等指數位元中全部為一且該等有意義位元中全部為零的(正或負)數值則稱為(正或負)INF,此數值可能代表的係某一計算中的上限溢位(overflow)。該等指數位元中全部為一且該等有意義位元中一非零數的數值則稱為非數值(Not a Number,NaN),其可用來代表一未被定義的數值。零亦被視為係一特殊數值,並且可以將該等指數位元與該等有意義位元全部設為零來代表。
「Fp16」表示的係半精確度格式,通常用在圖形處理中。fp16格式和fp32類似,不過,fp16具有5位指數位元以及10位有意義位元。該指數會向上偏移15位,而正常數的有意義位元係被解釋成一11位位元假數的分數部,並且有一隱含數字「1」係其整數部。特數數值(包含非正規數、INF、NaN、以及零)的定義則與fp32相似。
本文中所指定的整數規格會於前方利用「s」或「u」來表示該格式究竟係有記號或無記號,並且會利用一數字來表示全部的位元數(舉例來說,8、16、32),因此,s32表示的便係有記號的32位整數,u8表示的則係無記號的8位整數,依此類推。對有記號的格式來說,二的負補數有利於使用。因此,u8的範圍係[0,15],而s8的範圍則係[-8,
7]。於本文所使用的所有格式中,最大意義位元(MSB)係位於位元欄的左邊,而最小意義位元(LSB)則係位於右邊。
應該瞭解的係,為達解釋的目的,本文會定義且參考特定的格式,而且還應該瞭解的係,一MMAD單元可支援該些格式或其它不同格式的任何組合。
除了處理不同的運算元格式以外,MMAD單元220可被有利地配置成用以支援數種不同的運算。舉例來說,圖3所示的便係一份運算種類清單,可由本文所述之MMAD單元220實施例來執行。浮點算術運算(列於302處)可對fp32格式或fp16格式的運算元來執行,而結果則會以輸入格式回傳。於一些實施例中,則僅針對其中一種格式(舉例來說,fp32)支援浮點算術。受支援的運算有加法(FADD)運算、乘法(FMUL)運算、乘加法(FMAD)運算以及各種運算元比較運算。該些運算包含:三元式條件式選擇運算(FCMP),其會在C大於等於零時選擇A,否則便選擇B;以及最大值運算(FMAX),用以回傳運算元A與B中較大者,以及最小值運算(FMIN),用以回傳兩者中較小者。二元式測試運算(FSET)會對運算元A與B實施數種二元關係測試中其中一種,並且回傳一布林數值,用以表示是否符合該項測試。於本實施例中,可被測試的二元關係包含:大於(A>B)、小於(A<B)、等於(A=B)、無序(A?B,只要A或B任一者為NaN便成立)、以及不等於(舉例來說,A≠B)、以及各種組合測試(例如,A≧B、A< >B、A?=B、...等)。
整數算術運算(列於304處)可對任何整數格式的運算
元來執行,而結果則會以輸入格式回傳。該等受支援的整數算術運算包含:加法(IADD)運算、乘法(IMUL)運算、乘加法(IMAD)運算、條件式選擇運算(ICMP)、最大值運算(IMAX)、最小值運算(IMIN)以及二元式測試運算(ISET),上述所有運算的定義均與浮點運算中相對應者雷同。另外還支援絕對差相加(ISAD)運算,其會計算|A-B|+C。
位元運算(列於306處)會將該等運算元視為32位位元的欄位。邏輯運算(LOP)包含二元式布林運算AND(A&B)、OR(A|B)、以及XOR(A Λ B)。LOP的結果係一32位位元的欄位,用以表示對運算元A與B的對應位元執行該項運算後的結果。位元運算還支援左移運算(SHL)與右移運算(SHR),其中運算元A係用來提供要被移位的位元欄位,而運算元B則係用來指定該位移量。右移可為邏輯行為(將零插入該等新的MSB位置中),亦可為算術行為(將記號位元延伸至該等新的MSB位置中)。
格式轉換運算(列於308處)會將運算元A從其中一種格式轉換成另一種格式。「F2F」一般表示的便係從其中一種浮點格式轉換成另一種浮點格式。於一些實施例中,該些轉換還可包含將該運算元縮放2N,N為整數。此外,格式轉換運算還支援具有整數捨入(integer rounding)的F2F轉換。「F2I」表示的係從浮點格式轉換成整數格式。和F2F轉換相同的係,可將該運算元縮放2N。「I2F」一般表示的係從整數至浮點轉換,此等運算可結合負值運算或絕對值運算,以及結合2N縮放。「I2I」表示的係從其中一種整數
格式轉換成另一種整數格式,該些運算亦可結合絕對值運算或負值運算。「FRC」係一「分數」運算,其會傳回一浮點輸入運算元的分數部。
fp32引數縮減運算(列於310處)亦稱為範圍縮減運算(PRO),其係用來將一超越函數(例如sin(x)、cos(x)、或是2x)的引數x侷限在一合宜的數值區間中,俾使可利用合宜配置的功能單元(其可能係圖2中各功能單元222中其中一者)來計算該超越函數。於本實施例中,在發送一超越函數指令給一功能單元以前,其引數係當作運算元A被送至MMAD單元220。對正弦函數與餘弦函數來說,運算元A映對於區間[0,2 π]之中;對指數函數(亦可表示成EX2)而言,運算元A則可以N+f來表示,其中N為整數,而f則位於[0,1]之中。如本項技術中所熟知者,此引數縮減可藉由將可能的引數集限制在一侷限範圍中以簡化超越函數之功能單元的設計。
本文中的第II章節與第III章節會說明一能夠執行圖3中所示之所有運算的MMAD單元220。第II章節說明的係MMAD單元220的電路結構,而第III章節說明的則係如何利用該電路結構來執行圖3中所列出的運算。應該瞭解的係,本文所述的MMAD單元220僅係供作解釋之用,只要利用適當的電路方塊組合便可支援其它或不同的功能組合。
II. MMAD單元結構範例
圖4所示的係一根據本發明一實施例之MMAD單元220的簡化方塊圖,其可支援圖3中所示的所有運算。於本實施例中,MMAD單元220施行的係一供所有運算使用的八級管線。於每個處理器循環中,MMAD單元220均可透過運算元輸入路徑402、404、406來接收三個新的運算元(A0、B0、C0)(舉例來說,來自圖2的發送電路204),並且透過運算碼路徑408來接收一運算碼,用以表示要執行的運算。於本實施例中,該運算可能係圖3中所示的任何運算。除了該運算之外,本發明的優點係,該運算碼還可表示該等運算元的輸入格式以及用來當作其結果的輸出格式;該輸出格式可能和輸入格式相同,亦可能不同。應該注意的係,圖3中所示的運算亦可能具有與其相關聯的多個運算碼。舉例來說,其中一運算碼用來表示fp32運算元的FMUL,而另一不同的運算碼則用來表示fp16運算元的FMUL,依此類推。
MMAD單元220會經由所有第0至7級來處理每種運算,並且會於信號路徑410上產生一32位位元的結果數值(OUT)以及於信號路徑412上產生一對應的條件碼(COND)。該些信號可被傳送至暫存器檔224(如圖2中所示),亦可被傳送至一處理器核心的其它元件,端視結構而定。於其中一實施例中,每一級均對應於一處理器循環。於其它實施例中,其中一級中所示的元件均可跨越多個處理器循環進行分割,或者亦可將源自兩(或更多)級的元件結合在其中一個處理器循環中。其中一種設計方式係1.5GHz
中有十個級(循環)。
第II.A章節概要說明MMAD管線,而第II.B-I章節則詳細說明每一級的電路方塊。
A. MMAD管線
參考FMAD運算期間如何使用第0至2級中的電路方塊便可對該條管線有初步瞭解。第0級係運算元格式化級,可視情況將其設計在發送單元204中或設計在MMAD單元220中,用於以一致的方式來對齊且代表運算元(其位元可能少於32位位元)。第1至3級執行的係該FMAD運算中的乘法部份(A*B=P),第4至6級執行的係加法部份(P+C)。於第7級中,最終結果會被格式化用以分散於信號路徑410、412之上。第7級還包含控制邏輯,用以在發生特殊數值輸入、上限溢位、下限溢位、或是下文所述的其它條件時來產生特殊的輸出。
為幫助進行本說明,圖4中以虛線邊界來表示。
MMAD單元220的三條主要內部資料路徑,並且本文中將其稱為「假數路徑」413、「指數路徑」415、以及「測試路徑」417。雖然該些名稱代表的係於特定運算(舉例來說,FMAD運算或比較運算)期間由每條路徑上所示之各種電路方塊來執行的功能,不過,非常清楚的係,內部資料路徑413、415、417任一路徑中的電路方塊均可以和運算相依的方式作為各種用途。
於假數路徑413中,第1至3級中所含的方塊會將浮
點運算元A與B的假數相乘。第2級中的乘法器方塊414係由前置乘法器方塊416與後置乘法器方塊418來支援。相乘的結果會以結果R3a出現在第3級末端處的路徑421之上。第4至6級包含一對齊方塊420與一分數加總方塊422,用以將結果R3a與浮點運算元C的假數(其係透過測試路徑417中路徑419上的結果R3b來提供)進行對齊與相加。最終的假數會於正規化方塊423中進行正規化,並且以結果R6出現在第6級輸出處的路徑425之上。
指數路徑415會對浮點運算元A、B、以及C的指數部(以Ea、Eb、Ec來表示)執行正確的運算,以便支援FMAD運算。第1級中的指數乘積方塊424可計算乘積A*B的指數,舉例來說,其會相加Ea與Eb,並且扣除偏移量(舉例來說,127)。而第2級中的指數加總方塊426則會決定(A*B)+C總和的有效最終指數(EFE)以及指數差(Ediff),該指數差(Ediff)係用來控制第4級中的對齊方塊420的作業。指數路徑415中後面的電路方塊(其包含第3級中的Rshift計數方塊428、第4級中的指數增額方塊430、以及第6級中的指數減額方塊432)則會依據該等假數結果的特性來調整該指數EFE,用以於路徑427上提供最終的指數E0。
測試路徑417的電路方塊主要係用在FMAD以外的其它運算中,尤其是用在整數比較運算與浮點比較運算。測試路徑417包含第1級中的位元式邏輯方塊434以及第3級中的比較邏輯方塊436,該些元件的作業說明如下。於一FMAD運算期間,測試路徑417會將運算元C的假數傳送
至第3級輸出處的路徑419之中。
平行於該等主要資料路徑,MMAD單元220還會透過第1級中的特殊數值偵測電路438來處理特殊數值(舉例來說,於fp32與fp16等運算元中,該等特殊數值為NaN、INF、非正規數、以及零),特殊數值偵測電路438會於路徑429上產生一特殊數值信號(SPC)。特殊數值偵測電路438會接收全部三個運算元A、B、以及C,且該特殊數值偵測電路438可能係具有的習知設計,而該特殊數值信號SPC則可能針對每一運算元包含數位(舉例來說,3位)位元,用以透過一預定的特殊數值碼來表示每個運算元的特殊數值狀態。該特殊數值信號SPC可被送至各個下游電路方塊中,該等電路方塊包含第7級中的輸出控制方塊440。必要時,該輸出控制方塊440會使用該特殊數值信號SPC來取代源自該管線(例如R6及E0)中具有特殊數值的各個結果,舉例說明如下。
於該條管線的末端處,輸出控制方塊420會於信號路徑410上提供結果OUT且會於信號路徑412上提供條件碼COND。本發明的優點係,該條件碼的位元數少於該結果的位元數,其會產生和該結果特性有關的資訊。舉例來說,該條件碼中的位元可能會表示該結果究竟係正值、負值、零、NaN、INF、非正規數、...等。如本項技術中所熟知者,在一條件碼搭配一結果的情況中,該結果的後續使用者在進行他們的處理中,有時候便可利用該條件碼而不必利用該結果本身。於一些實施例中,亦可利用該條件碼來表示
於該運算執行期間是否發生例外或是其它事件。於其它實施例中,亦可完全省略該條件碼。
除了該等資料路徑之外,MMAD單元220還提供一控制路徑,圖4中以第0級中的控制方塊442來表示。控制方塊442會接收該運算碼並且產生各種和運算碼相依的控制信號,本文中一般以「OPCTL」來表示,該控制信號可以同步於該條管線中之資料傳送的方式被傳送至每個電路方塊。(OPCTL信號連接至該等各種電路方塊中的方式並未顯示於圖4中。)如下文所述,OPCTL信號可響應於該運算碼以致動、取消MMAD單元220中各個電路方塊的作業以及對該等電路方塊的作業進行其它控制,俾使可利用相同的管線元件來執行不同的運算。本文中所參考使用的各種OPCTL信號可能包含該運算碼本身或是衍生自該運算碼的特定其它信號(舉例來說,藉由設計在控制方塊442中的組合邏輯)。於一些實施例中,可利用數個管線級中的多個電路方塊來設計控制方塊442。應該瞭解的係,於某一特定作業中被送至不同方塊中的該等OPCTL信號可能係相同的信號,亦可能係不同的信號。依照本文所揭示的部份,熟習本項技術的人士便能夠建構出合宜的OPCTL信號。
應該注意的係,某一特定級的電路方塊可能會需要不同的處理時間量,而某一特殊級中所需要的時間亦可能會因隨著每種運算而改變。據此,MMAD單元220可能還包含各種時序電路與同步電路(圖4中未顯示),用以控制從其中一管線級至下一管線級的不同路徑之上的資料傳送。任
何適當的電路系統(舉例來說,鎖存器、傳輸閘、...等)均可使用。
B.第0級中的元件
於本實施例中,會將8位位元(16位位元)的整數運算元傳送至MMAD單元220,作為一32位位元運算元的八位(16位)LSB,並且以「填補」的格式來傳送fp16運算元,其會於該等五位指數位元左邊插入三位額外位元(全部為零)且於該等十位分數位元的右邊插入13位額外位元(全部為零)。於第0級中,格式化方塊400會有利地對該等已收到的運算元執行進一步格式化處理,用以進行特定運算。
圖5係格式化方塊400中各組件的方塊圖。每個被收到的運算元A0、B0、C0會平行往下傳送於多條路徑上,每條路徑上會使用不同的轉換。八位位元向上轉換器504、505、506會藉由記號擴充最大意義位元(MSB)將8位位元整數轉換成32位位元整數。同樣地,16位位元向上轉換器508、509、510亦會藉由記號擴充將16位位元整數轉換成32位位元整數。對運算元A來說,fp16向上轉換器方塊512則會藉由將該指數偏移量從15調整為127用以將fp16運算元提升為fp32。
選擇多工器(多工器)514、515、516會依據對應於該運算元格式(如上述運算碼所指定的格式)的OPCTL信號來為每個運算元選擇正確的輸入格式。在多工器514至516之後,每條運算元路徑還包含一條件式反向器電路518、519、
520,該等反向器電路可用來藉由翻轉所有位元以產生該運算元的一補數。條件式反向器電路518至520係受控於一OPCTL信號以及該等運算元的記號位元。下文將說明可實施反向的特定情況。
於一些實施例中,對fp16運算元與fp32運算元來說,內部會使用33位位元的代表符。於此代表符中,於該等有意義位元的前方隱含著開頭1,俾使可為fp32(fp16)傳送24(11)位假數位元。於其它實施例中,可於該32位位元欄位中任意對齊格式少於32位位元的整數運算元,而格式化方塊400則可將此等運算元移動至該內部32位位元資料路徑的LSB處。同樣地,亦可傳送fp16運算元而無需進行填補,而格式化方塊400則會如上述般地插入填補位元或是執行其它的對齊作業。
C.第1級中的元件
再次參考圖4,格式化方塊400會將運算元A、B、以及C提供給第1級的各條資料路徑。如上述,第1級於假數路徑413中包含一前置乘法器方塊416,於指數路徑415中包含一指數乘積方塊424,於測試路徑417中包含一位元式邏輯方塊434,以及包含特殊數值偵測方塊438。
圖6A所示的係前置乘法器方塊416的方塊圖。前置乘法器方塊416會準備一被乘數(運算元A)與一乘數(運算元B),利用Booth3演算法來進行相乘。實際的乘法作業係在第2級的乘法器方塊414中來施行。於整數運算元A與B
的情況中,前置乘法器方塊416會對整個運算元進行運算;而於浮點運算元的情況中,前置乘法器方塊416則會對含有不明確或明確前方「1」的假數部份進行運算。因此,雖然本說明僅針對某種運算元,不過,應該瞭解的係,可視情況採用整個運算元或僅使用假數部份。
如圖6A所示,前置乘法器方塊416包含一「3X」加法器612、一Booth3編碼器614以及一選擇多工器(多工器)616。該3X加法器612可能具有常見習知的設計,其會接收運算元A(被乘數)並且算出3A(舉例來說,藉由相加A+2A)以供乘法器方塊414來使用。運算元A與經算出的3A均會被向前傳送至第2級。Booth3編碼器614可能具有常見習知的設計,其會接收運算元B(乘數)並且實施習知的Booth3編碼作業,從運算元B的該等位元中產生重疊的4位位元區段。於其它實施例中,亦可使用Booth3以外的乘法演算法,並且可利用任何適當的前置乘法器電路系統來取代本文所述的特殊電路。
選擇多工器616會受控於一OPCTL信號,用以於運算元B、經過Booth3編碼的運算元B、以及以Booth3編碼格式儲存於暫存器618、620中的常數乘數(舉例來說,1/2 π與1.0)。該等被選出的數值會以結果BB被送至第2級。對一FMUL或IMUL運算來說,會選擇經過Booth3編碼的運算元B。於其它運算中,選擇多工器616可被控制用以將運算元B繞過Booth3編碼器614(舉例來說,用以進行如下文所述的比較運算),或是用以在來自暫存器618、620的常數
乘數中選擇其中一個(舉例來說,用以進行下文所述的引數縮減運算或格式轉換運算)。於其它實施例中,對使用常數乘數的運算來說,可於MMAD單元220的輸入處提供該乘數作為運算元B0或是可於前置乘法器方塊416的輸入處選擇該乘數的非Booth編碼代表符,然後再利用編碼器614進行Booth編碼。
圖6B所示的係指數乘積方塊424的方塊圖。對浮點算術運算來說,指數乘積方塊424會接收運算元A與B的指數位元(Ea、Eb),並且於第一加法器電路622中進行相加以計算A*B乘積的指數。指數乘積方塊424還包含一第二加法器電路624,其會將一偏移量β(其可能係正數、負數、或是零)加入Ea+Eb的總合之中。偏移量暫存器626會儲存一或多個候選偏移數值,並且會利用一OPCTL信號以運算相依的方式來選擇該正確的偏移量。舉例來說,於FMUL運算中,當相加兩個已經過偏移的指數Ea與Eb時,可利用該偏移量β來校正該fp16或fp32指數偏移量。於其它運算中,可如下文所述般選擇不同的數值作為偏移量β。於指數乘積方塊424的輸出處,會有一選擇多工器628響應於一OPCTL信號在該總合與該等兩個輸入指數之間作選擇。其結果Eab會於路徑431上被傳送至第2級。
可利用比該等輸入指數Ea、Eb多一位位元的方式來有利地表示結果Eab,以便於下游處偵測到指數飽和(上限溢位)情形。舉例來說,倘若指數Ea與Eb各為八位位元的話,那麼Eab便可為九位位元。
圖6C所示的係位元式邏輯方塊434的方塊圖。運算元A與B會被送至一AND2電路630、一OR2電路632、以及一XOR2電路634。該些電路中每一者均可能具有常見的習知設計,其可用來對運算元A與B的對應位元執行指定的邏輯運算,用以提供一32位位元的候選結果。同時,有一條件式反向器635會運作用以於FRC運算期間將運算元C反向,並且於其它運算期間讓原來的運算元C通過而不予以改變。選擇多工器636會響應於一OPCTL信號來選擇該等各種邏輯運算結果或運算元C(或是其反向值)中其中一者,讓被選到的資料(R1)於路徑433上被傳送通過第2級。該供選擇多工器636使用的OPCTL信號會被配置成在MAD、ADD、或CMP運算中選擇運算元C;在邏輯運算中選擇該等邏輯運算結果中正確的一者;並且於SET運算中傳送來自XOR2電路634的結果。對某些運算來說,結果R1並不會用在下游的組件中,因此於此等情形中,便可作任何選擇。
第1級還包含一「I2F位元組」電路444,如圖4所示。此電路會於I2F格式轉換運算期間被用到,其會選擇運算元A的八位MSB作為ByteA並且透過路徑435將ByteA傳送至第2級。I2F位元組電路444還包含一AND樹(圖中未顯示),用以判斷運算元A的24位LSB是否全部為1。位於路徑437上的該AND樹輸出信號(And24)可能係單一位元,當運算元A的24位LSB全部為1的話其便被設為1,否則便被設為0。
D.第2級中的元件
再次參考圖4,第2級於假數路徑413上包含乘法器方塊414並且於指數路徑415上包含指數加總方塊426。於測試路徑417上,路徑433會將資料R1傳送至第3級,而未作進一步處理。
圖7A所示的係乘法器方塊414的方塊圖,其包含一乘法器樹700。於乘法器樹700中,Booth多工器704會接收運算元A、經算出的結果3A以及來自第1級的Booth3編碼運算元BB,並且執行Booth乘法演算法。如本項技術中所熟知者,Booth乘法包含選擇一對應於Booth3編碼運算元BB中每個位元群的部份乘積(其將會是被乘數A的倍數)。該等所產生的部份乘積會以一進位-保留加法器(CSA)樹來進行相加,於本實施例中,該進位-保留加法器(CSA)樹係由三個(3:2)CSA 706連接兩個(3:2)CSA 708然後再連接一個(4:2)39位位元CSA 710所組成。Booth多工器704以及CSA 706、708、710均可能具有常見習知的設計。最終的結果係以冗餘(總合、進位)代表符來表示的乘積A*B。該等總合與進位欄位係有利地寬於該等運算元(舉例來說,於其中一實施例中各為48位位元)。當然,亦可以其它乘法器電路(包含用以施行Booth乘法以外之演算法的電路)來取代。
於其中一實施例中,該乘法器會支援高達24位位元乘以24位位元的乘法。如本項技術中所熟知者,利用多個乘
法運算(舉例來說,多個16位位元乘以16位位元的乘法運算)便可合成更大運算元(舉例來說,32位位元整數)的乘積。於實施例中,該乘法器可能具有不同的大小且可能支援高達32位位元乘以32位位元的乘法。此等設計選擇並非為本發明的關鍵所在,並且可依據晶片區域與效能等考量來進行。
乘法器方塊414還包含運算元A與B的旁通路徑。明確地說,一選擇多工器711會接收運算元A以及來自乘法器樹700的總合欄位,而另一選擇多工器713則會接收運算元B以及來自乘法器樹700的進位欄位。多工器711、713係受控於一共同的OPCTL信號,致使該等運算元(A、B)或是該乘法結果(總合、進位)會被選來作為結果R2a與R2b,並且於路徑715、717上來傳送。對乘法運算或MAD運算來說,則可選擇總合與進位結果。對其它運算來說(舉例來說,ISAD或最大值或最小值等運算),則可能會選擇運算元A與B,其說明如下。應該注意的係,結果路徑715、717係有利地寬於正常的運算元(舉例來說,48位位元相對於32位位元),據此,當它們被多工器711、713選到時,便可於必要時利用前方零或尾部零來填補運算元A與B。
圖7B所示的係指數加總方塊426的方塊圖,其包含一差值電路714、一選擇多工器716以及一八位位元居先編碼器718。差值電路714會接收路徑431上的乘積指數Eab以及路徑439上運算元C的指數部(Ec),並且計算差值(Eab-Ec)。於浮點加法運算或MAD運算中,差值電路714
會提供一信號Sdiff於路徑721上來代表該差值的記號。此記號可用來控制選擇多工器716,用以選擇Eab與Ec中較大者作為(A*B)+C總合的有效最終指數(EFE)。信號EFE會於路徑723上往下游傳送。該差值(Ediff)本身可能係正值或負值,會於路徑725上被傳送至下游的組件。對浮點加法或MAD以外的運算來說,可以利用指數加總方塊426作為其它用途,據此,差值電路714便會接收一OPCTL信號用以控制Sdiff與Ediff等信號的產生,其方式如下。
於I2F轉換運算中會用到居先編碼器718來確認運算元A之該等八位MSB中前方1(若有的話)的位置。該等MSB(ByteA信號)會透過路徑435被送至居先編碼器718,而該居先編碼器的輸出BP代表的則係從該前方1之位元位置中所衍生出來的指數(倘若所有八位MSB均為零的話,該輸出BP便可為零)。於I2F轉換運算中,差值電路714還會於輸出選擇中利用信號And24,其說明如下。
E.第3級中的元件
第3級包含:假數路徑413上的後置乘法器方塊418、指數路徑415上的Rshift計數電路428、以及測試路徑417上的比較邏輯436。
圖8A所示的係後置乘法器方塊418的方塊圖,其包含一中間乘積(IP)加法器804、殘餘位元(sticky bit)邏輯808、一整數多工器810、一輸入選擇多工器812以及一輸出選擇多工器814。響應一OPCTL信號,輸入選擇多工器812會
於路徑717上的結果R2b(來自第2級的乘法器方塊414)以及暫存器816中所儲存的恆定運算元(數值1)之間的作選擇。如上述,多工器812的OPCTL信號會於需要運算元A之二補數的特定格式轉換運算中選擇該恆定的運算元。於此等情況中,運算元A會於第0級中被反向,並且利用IP加法器804來加1。對其它運算來說,多工器812則可選擇結果R2b。
IP加法器804會相加R2a與R2b等結果(或是相加R2a與該恆定運算元),用以產生一總合RP。IP加法器804還會透過一路徑805來提供該總合RP的兩位MSB(RP2)給比較邏輯方塊436。於乘法或MAD運算的情況中,該總合RP係乘積A*B。對其它運算來說,該總合RP則可能代表A+B(舉例來說,於運算元A與B被繞過乘法器樹700的情況)或~A+1(舉例來說,於運算元A在第0級中被反向且被繞過乘法器樹700的情況,於此情況中,輸入多工器812會選擇該恆定的運算元)。
如上述,結果R2a與R2b可寬於正常運算元(舉例來說,48位位元)。據此,IP加法器804可能會被設計成一48位位元加法器,而路徑RP則可能係49位位元寬,以便容納進位。後置乘法器方塊418係有利地將總合RP縮減至具有正常運算元寬度(舉例來說,32位位元)的結果R3a,舉例來說,丟棄LSB。殘餘位元邏輯808可能具有常見的習知設計,且其係有利地收集複數位殘餘位元SB3(該等位元其中一部份或全部會被丟棄)並且將它們提供給下游組件,
該等下游組件可利用該等殘餘位元來進行捨入,其方式說明如下。同時,整數多工器810會處理整數運算元;多工器810會響應一OPCTL信號來選擇該49位位元總合RP中的上32位位元或下32位位元。該選擇會相依於如何在寬路徑715、717上對齊該等運算元R2a與R2b。
輸出多工器814會響應一OPCTL信號來從該浮點路徑或整數路徑中來選擇該結果R3a,其相依於該運算與該運算元格式並且會於路徑421上提供R3a。此外,旁通路徑817允許結果R2a繞過IP加法器804並且被輸出多工器814選擇,從而於路徑421上傳送R2a(其可能係運算元A)作為結果R3a。
再次參考圖4,Rshift計數電路428會響應於一OPCTL信號。於一FMAD(或是FADD)運算中,Rshift計數電路428會使用路徑725上的指數差值Ediff來決定該等浮點加數(舉例來說,A*B以及C)的正確對齊。明確地說,指數較小的加數會被右移,以便可利用較大的指數的來表示。據此,Rshift計數電路428會利用該指數差值Ediff的記號來判斷A*B或C是否具有較大指數,並且產生一交換控制信號(SwapCtl)來控制要右移哪個加數,其方式說明如下。Rshift計數電路428還會使用該指數差值Ediff的大小來產生一位移量信號(RshAmt)用以控制該被選定的加數要被右移多遠,其方式說明如下。該位移量可能會依據該等加數的寬度而被鉗止。該些信號會於路徑441上被傳送至對齊方塊420。
利用該OPCRL信號,Rshift計數電路428便可供可能會用到右移的其它運算使用。此等用法的範例說明如下。
圖8B所示的係比較邏輯方塊436的方塊圖,其包含一AB記號電路820、一個二元式測試邏輯單元822、以及一選擇多工器824。比較邏輯方塊436會被配置成用以接收結果R1、R2a、以及R2b,並且從三者之中選擇其中一者用以於路徑419上進行傳送,當作結果R3b。於MAD或加法運算的情況中,運算元C會被接收作為輸入R1並且經由比較邏輯方塊436來傳送,而未作任何修正。對其它運算來說(包含LOP、CMP、MAX、MIN、以及SET等運算在內),比較邏輯方塊436可能會於輸入中選擇其中一不同者。
AB記號電路820會於路徑805上從IP加法器804(圖8A)中接收該等兩個MSB RP2。於最大值運算(FMAX或IMAX)、最小值運算(FMIN或IMIN)、或是二元式測試運算(FSET或ISET)的情況中,第0級中的條件式反向器519(參見圖5)會有利地對運算元B進行反向處理,並且利用上述的選擇多工器讓運算元A與B旁通進入IP加法器804之中。於此等情況中,該結果RP為差值A-B,而該等MSB RP2則會表示該差值是否為負值(其意謂著B>A)。AB記號電路820會接收該等MSB並且產生一記號信號Sab(舉例來說,該記號信號為一位位元的信號,倘若A-B為負值的話該信號便會被判定(asserted),否則便會被取消(deasserted))。該記號信號Sab會透過路徑821被送至二元式測試邏輯單元822以及下游組件。
除了記號信號Sab之外,二元式測試邏輯單元822還會透過路徑429接收來自第1級之特殊數值偵測方塊438(圖4)中的特殊數值信號SPC、接收一OPCTL信號、以及接收一來自第1級之位元式邏輯電路434的結果R1。對條件式選擇運算(FCMP、ICMP)來說,該結果R1係運算元C;對要用到第3級中的二元式測試邏輯單元822的其它運算來說,該結果R1則係XOR單元634的輸出。
響應於該些輸入信號,二元式測試邏輯單元822便會產生一比較選擇信號(CSEL),用以控制選擇多工器824的運算;以及產生一布林結果信號(BSEL),其會於路徑825上被傳送至第7級,如圖4所示。該CSEL選擇還可透過路徑827被傳送至下游組件。
該等CSEL信號與BSEL信號的產生和運算相依。於FMAX、IMAX、FMIN、或是IMIN運算的情況中,運算元A與B會繞過乘法器樹700(圖7A)且當作結果R2a與R2b。二元式測試邏輯822會產生一CSEL信號,用以依據記號信號Sab來選擇該些兩個運算元中其中一者。
對於條件式選擇運算來說(FCMP、ICMP),路徑433上的結果R1為運算元C。尤其是,特殊數值信號SPC會特別表示運算元C是否為零(或者任何其它特殊數值)。二元式測試邏輯822會使用運算元C的記號位元與該特殊數值信號SPC來判斷是否滿足條件C≧0,並且據此選擇運算元A(R2a)與B(R2b)中其中一者。
對於二元式測試運算元(FSET、ISET)來說,二元式測
試邏輯822會產生一布林真或偽信號BSEL。此信號會透過路徑825送至第7級,其會被用來為該布林結果產生一正確的32位位元代表符。於此情況中,路徑433上的結果R1會提供該32位位元XOR2結果。二元式測試邏輯822會執行四項基本測試:「無序」(A?B)、「等於」(A=B)、「大於」(A>B)、以及「小於」(A<B)。倘若A與B中至少其中一者為INF或NaN的話,A?B測試便會產生布林真,其可藉由參考該特殊數值信號SPC來決定。倘若路徑R1上XOR結果的所有位元均為零的話,A=B測試便會產生布林真。倘若路徑Sab上的記號信號表示A-B為負數的話,A<B測試便會產生布林真。倘若其它三項測試全部產生偽的話,A>B測試便會產生布林真。將該等四項基本測試的結果反向便可解決否定測試(不等於、不大於、不小於、或是非無序)。藉由建構源自該等四項基本測試或是它們的否定測試的結果的合宜布林OR運算便可支援額外的組合測試(舉例來說,A≦B等)。於其中一實施例中,二元式測試邏輯822會被配置成用以平行執行多項測試,並且依據該OPCTL信號來選擇一結果BSEL。多工器824的任何輸入均可被選來作為結果BSEL,因為於SET運算中將會忽略該結果。
F.第4級中的元件
再次參考圖4,第4級包含一對齊方塊420以及一指數增額方塊430。
圖9所示的係對齊方塊420的方塊圖。於FMAD或
FADD運算中,對齊方塊420會被用來對齊該等假數,以準備進行浮點加法。對齊方塊420亦可被用來於其它運算中執行右移作業,其方式說明如下。對齊方塊420的控制信號會透過路徑441由Rshift計數電路428來提供其中一部份。
對齊方塊420包含一「小」交換多工器904以及一「大」交換多工器906,分別會從路徑421、419中接收輸入R3a與R3b。小交換多工器904與大交換多工器906會受到來自Rshift計數電路428之SwapCtl信號的共同控制,俾使當小交換多工器904將輸入R3a、R3b中其中一者送入一小運算元路徑908中時,大交換多工器906便會將輸入R3a、R3b中另一者送入一大運算元路徑910中。於FMAD運算的情況中,該等運算元相應於(A*B)與C,且具有較小指數的運算元便會被送入小運算元路徑908中。
小運算元路徑908包含一右移電路912、殘餘位元(sticky bit)邏輯914、一位移多工器916、以及一條件式反向器918。右移電路912會於小運算元路徑908上右移該等資料位元,位移量(舉例來說,零至32位位元)係受控於來自Rshift計數電路428之RshAmt信號。於其中一實施例中,右移電路912可能會透過該RshAmt信號或一不同的OPCTL信號(圖中未顯示)而受控用以執行算術或邏輯位移。
殘餘位元邏輯914會捕捉被右移電路912移出去的部份或所有LSB,並且透過路徑915來提供殘餘位元SB4給第5級,用以進行捨入,其方式說明如下。於其中一實施
例中,殘餘位元邏輯914還會透過路徑SB3從第3級中接收該等殘餘位元SB3(參見圖8A),殘餘位元邏輯914究竟係傳送所收到的殘餘位元SB3或是產生新的殘餘位元則會受控於一OPCTL信號。
位移多工器916係在前面的相乘結果進位至下一個位元位置中時用來調整該對齊情形。其還可在位移量RshAmt據以實施的指數差值(Ediff)為負值時用來支援該對齊位移的正確施行方式。將Rshift計數電路428中的Ediff數值反向處理以獲得RshAmt然後操作位移多工器916來向右多移動一位位元便可處理此等情況。於一些實施例中,位移多工器916還可支援當一運算元被移動32位位元而應該回傳零的運算,不必使用額外的特殊邏輯。
條件式反向器918究竟是否要將小運算元路徑918上的運算元反向處理會響應於一OPCTL信號,或者於部份情形中會響應於其它信號(例如CSEL信號或來自比較邏輯方塊436的Sab信號(參見圖8B))。舉例來說,條件式反向可用來於第5級中施行減法運算。輸出信號R4a會於路徑909上被送至第5級。
大運算元路徑910包含一條件式零電路920以及一位移多工器922。條件式零電路920可響應於一OPCTL信號來利用零取代路徑910上的運算元。舉例來說,於希望讓R3a或R3b通過第5級中的加法器(說明如下)而不進行任何修正的運算中便會使用此作法。對FMAD運算來說,條件式零電路920不會發揮作用,而大運算元則會通過而未作
任何修正。和位移多工器916相同,位移多工器922可在前面的乘法發生進位的情況中用來調整對齊情形。
來自大運算元路徑910的輸出信號R4b會於路徑911上被送至第5級。
再次參考圖4,指數增額方塊430會於路徑723上接收一有效最終指數EFE並且於路徑421上接收乘積結果R3a(或是僅接收該乘積結果的最大意義位元)。於FMAD或FMUL運算中,指數增額方塊430偵測後置乘法器方塊418中該等48位位元總合結果與進位結果(R2a、R2b)相加之後是否會進位至第49位位元位置中。倘若會的話,那麼該有效最終指數EFE便會增加1。該經過修正(或未經過修正)的有效最終指數EFE2會透過路徑443被送至第4級。
G.第5級中的元件
第5級包含分數加總方塊422。於加法以及MAD運算中,此方塊會執行該加法運算。對會用該方塊的所有運算來說,還可於此級中施行捨入作業。
圖10所示的係分數加總方塊422的方塊圖,其包含一加1加法器1002、一AND2電路1004、一反向器1006、一捨入邏輯單元1008、以及一選擇多工器1010。加數R4a與R4b會於路徑909、911上接收自對齊方塊420。加1加法器1002可能具有常見的習知設計,其會相加該等加數,用以產生一Sum輸出並且將1加入該總合之中用以產生一Sum+1輸出。反向器1006會將該Sum輸出反向處理以產生
一~Sum輸出。該些輸出均支援二補數算術以及捨入運算。
同時,AND2電路1004還會對該等運算元R4a與R4b的對應位元執行邏輯AND運算,並且提供一32位位元的結果。如下所述,在FRC運算中會用到AND2電路1004。於其它運算中,AND2電路1004則可能會被繞過或是被置於低功率的閒置狀態中。
捨入邏輯1008可能具有常見的習知設計,其會接收一OPCTL信號、於路徑821上接收來自邏輯方塊436的記號信號Sab(參見圖8B)、路徑915上的殘餘位元SB4、以及來自加1加法器1002中被選定的MSB與LSB。響應該些信號,捨入邏輯1008便會指示多工器1010於Sum、Sum+1、~Sum、以及AND2等輸出之中選擇其中一者作為結果R5。該被選定的結果R5會於路徑1011上進行傳送。
結果R5的選擇會相依於數項考量。舉例來說,捨入邏輯1008係有利地執行針對IEEE標準算術所定義的四種捨入模式(最近值(nearest)捨入模式、最大下界(floor)捨入模式、最小上界(ceiling)捨入模式、以及截尾(truncation)捨入模式),其以不同的模式可選擇不同的結果。該OPCTL信號或是另一控制信號(圖中未顯示)可用來指定該等捨入模式中其中一者。此外,該選擇作業還將會相依於格式(整數或浮點)、該結果究竟係正值或負值、是否需要絕對值或否定值、以及其它類似的考量。此處可以施行依照該等各種捨入模式來捨入正數與負數的習知規則。對FRC運算來說,會選擇AND2電路1004的輸出;但是對其它運算來說,此
輸出則可能會被略過。
H.第6級中的元件
再次參考圖4,第6級包含一正規化方塊423以及一指數減額方塊432。在FMAD、FMUL、或是FADD運算中,正規化方塊423會運作用以藉由左移該結果來對齊假數R5,直到前方位元為1為止。因為本文中的左移隱含著乘以2的意義,所以該左移量會被送至指數減額方塊432中,該方塊會據此來縮減該指數EFE,從而產生一最終指數E0。於其它運算中,則可利用正規化方塊423來執行左移,其方式說明如下。
圖11所示的係正規化方塊423的方塊圖。居先編碼器1108會接收路徑1011上的加法結果R5並且決定前方1的位置。此資訊會被送至位移控制電路1110,該電路會產生一左移量信號LshAmt。該左移量信號LshAmt會被送至左移電路1112以及指數減額方塊432(圖4)。左移電路1112會將結果R5向左移動所指定的位元數並且於路徑425上提供結果R6。指數減額方塊432會依照該LshAmt信號來縮減指數EFE2並且會於路徑427上提供所生成的最終指數E0。
位移控制電路1110還會接收一OPCTL信號、來自路徑443的EFE2信號、以及來自路徑429的特殊數值信號SPC,以便於其它背景中利用該左移電路1112來執行左移作業,其範例說明如下。
I.第7級中的元件
再次參考圖4,第7級包含輸出控制方塊440,其會格式化且選擇最終結果(OUT與COND),用以透過路徑410、412傳送給MMAD單元220外部的組件。圖12所示的係輸出控制方塊440的方塊圖。對浮點運算來說,格式化方塊1210會透過路徑427接收最終指數E0並且透過路徑425接收最終假數R6。對浮點運算來說,格式化方塊1210會使用數值E0與R6來產生OPCTL信號所指定之具有fp32或fp16格式的結果Rdata。
對整數運算來說,格式化方塊1210會接收結果R6並且捨棄指數E0。格式化方塊1210可讓整數結果R6通過而不予以修正;亦可對其進行適當的格式化,舉例來說,針對一小於32位位元的整數格式來對齊排列一32位位元結果中正確位置處的合法位元。於一些實施例中,格式化方塊1210還會鉗止發生上限溢位或下限溢位的整數輸出(舉例來說,將其鉗止至所指定之整數格式的最大值或最小值)。
經過格式化的結果Rdata會被送至最終選擇多工器1212當作輸入。該選擇多工器1212會於結果Rdata以及一或多個預設數值之間選出路徑410上的最終輸出OUT。於其中一實施例中,該等預設數值包含具有fp16格式與fp32格式的NaN與INF以及32位位元的布林真值(舉例來說,0x1)或偽值(舉例來說,0x0)。該經選定的最終結果OUT還會被送至一條件碼電路1218,該電路會依據該結果來產生
一條件碼COND。因為該結果格式部份相依於該運算碼,所以,條件碼電路1218便會接收一表示該預期格式的OPCTL信號。條件碼的範例已經說明如上。
於浮點算術運算中,指數飽和邏輯1216會接收該最終指數E0並且判斷是否發生指數上限溢位(或是下限溢位)。有利的是,部份依據一OPCTL信號來作此判斷,其中該OPCTL信號會表示使用中的究竟係fp6或fp32格式。來自指數飽和邏輯1216的指數飽和信號Esat會被送至最終結果選擇邏輯1214。
最終結果選擇邏輯1214會響應於一控制信號組合來控制最終選擇多工器1212的作業,該控制信號組合包含一OPCTL信號、路徑429上的特殊數值信號SPC(來自第1級)、路徑825上的布林選擇信號BSEL(來自第3級)、以及指數飽和信號Esat。最終結果的選擇會相依於該等運算與結果格式、以及特殊數值或飽和的發生而發生改變。
舉例來說,於浮點算術運算的情況中,最終結果選擇邏輯1214係有利地使用該特殊數值信號SPC來施行涉及特殊數值的算術規則(舉例來說,與任意數相加或相乘的NaN係一NaN,依此類推)。在該等輸入運算元(A、B、或C)中其中一者為特殊數值的情況中,最終結果選擇邏輯1214會指示多工器1212參照該結果Rdata來選擇對應的特殊數值。此外,最終結果選擇邏輯1214還會使用飽和信號Esat用以在發生指數上限溢位或是下限溢位的情況中來選擇一特殊數值(舉例來說,INF或零)。
於二元式測試(FSET、ISET)的運算中,最終結果選擇邏輯1214會使用布林選擇信號BSEL在布林真值輸出與布林偽值輸出之間作選擇,而略過數值結果Rdata。
J.運算元旁通或穿越路徑
如上述,MMAD單元220提供旁通或穿越路徑來讓運算元穿越各個電路方塊而未經過任何修正。舉例來說,運算元A會穿越第1級中的前置乘法器416(參見圖6A)。運算元A可進一步繞過第2級中的乘法器樹700(參見圖7A)作為結果R2a,繞過第3級中的IP加法器804(參見圖8A)作為結果R3a,並且傳送經過第4級中的小運算元路徑908(參見圖9)作為結果R4a。此外,條件式零單元920還可將結果R4b強制為零,致使第5級中的加1加法器1002(參見圖10)會將該運算元A與零相加。倘若而後多工器1010選擇的係該Sum結果的話,那麼結果R5便係運算元A。
同樣地,運算元B亦可繞過第1級中的前置乘法器方塊416(參見圖6A)而送至路徑BB之上,並且繞過第2級中的乘法器樹700(參見圖7A)作為結果R2b。運算元C可穿越第1級中的位元式邏輯方塊434(參見圖6C)作為結果R1,並且穿越第3級中的比較邏輯方塊436(參見圖8B)作為結果R3b。於本實施例中雖然並未為運算元B與C提供進一步的旁通路徑;不過,必要時,仍可於替代實施例中提供進一步的旁通作業(舉例來說,和針對運算元A所示者類似的旁通作業)。
因此,第III章節中的運算說明雖然係針對要被繞過或穿越以抵達某一特殊級的各種運算元,不過應該瞭解的係,於通過某些級的一旁通路徑或穿越路徑的後面並未必需要於接續級中繼續遵循該旁通路徑。此外,於其中一級中經過修正的數值亦可能會遵循一旁通路徑穿越一接續級。於某一運算中要繞過一特殊電路方塊的情況中,該方塊可能會被設為不作用狀態以便降低功率消耗;或者亦可允許其正常運作但是略過其輸出,舉例來說,可利用選擇多工器或其它電路元件。
吾人將會發現,本文所述的MMAD單元僅具解釋用途,實際上可對其進行任何變化與修正。本文所述的許多電路方塊提供習知的功能且可利用本技術中熟知的技術來設計;據此,本文中已經省略該些方塊的詳細說明。將作業電路系統分割成數個方塊可予以修正,再者,亦可組合複數個方塊,或是對該些方塊進行變更。此外,從下文中便可明白,管線級的數量以及特殊級的特殊電路方塊或運算的指派方式同樣可予以修正或變更。某一特殊設計方式的電路方塊選擇與排列將會相依於要支援的運算組,而熟習本項技術的人士便會瞭解,針對每一種可能的運算組合來說,並未必需要用到本文所述的所有方塊。
III. MMAD單元運算範例
MMAD單元220係有利地運用上述的電路方塊,以節省面積的方式來支援圖3中所列出的所有運算。據此,
MMAD單元220的運算將會和正在執行的運算有關的至少部份方面相依。下面段落將說明使用MMAD單元220來執行圖3中所列出的每一種運算。
A.浮點運算
MMAD單元220所支援的浮點運算如圖3中的302處所示。對算術運算(FADD、FMUL、FMAD)來說,會利用指數路徑415來計算指數,同時利用假數路徑413來計算假數。其它的浮點運算(FCMP、FMIN、FMAX、以及FSET)則會運用fp32格式與fp16格式中的特性,藉由和32位位元無記號整數相同的方式來處理該等數值以精確地決定相對大小,該些運算則可利用假數路徑413以及測試路徑417來處理。
1. FMAD運算
FMAD運算會針對運算元A、B、以及C來計算A*B+C,其中該等運算元A、B、以及C會以fp16或fp32的格式被送至MMAD單元220,而回傳的結果則具有和該等輸入運算元相同的格式。
於第0級中會接收運算元A0、B0、以及C0,並且藉由選擇多工器514至516(圖5)讓其穿越格式化方塊400形成運算元A、B、以及C,而不予以修正。
於第1級中,前置乘法器方塊416會從運算元A的假數部份中來計算3A並且對運算元B的假數部份進行Booth3編碼,將經過Booth編碼的假數傳送於路徑BB上。指數乘積方塊424會接收運算元A與B的指數部(Ea、Eb)並且計
算Ea+Eb,一偏移量β係有利地用於重建該總合中正確的fp16或fp32指數偏移量。運算元C的假數部份會被傳送至位元式邏輯方塊434,其中多工器636(圖6C)會選擇運算元C作為結果R1並且傳送於路徑433之上。運算元C的指數部(Ec)會於路徑439上繞送至指數路徑415。另外,於第1級中,特殊數值偵測方塊438還會判斷運算元A、B、或C中任一者是否為特殊數值並且於路徑429上產生正確的特殊數值信號SPC供使用於第7級之中。
於第2級中,乘法器方塊414會計算A*B的假數部份並且選擇總合欄位與進位欄位作為結果R2a與R2b。指數加總方塊426會於路徑431上接收該乘積指數Eab並且於路徑439上接收運算元C的指數部(Ec)。差值單元704(圖7B)會計算Eab-Ec,並且將結果Ediff傳送至路徑725之上。另外,Eab與Ec中其中一者會依據Eab-Ec的記號而被選為有效最終指數EFE。運算元C的假數(R1)會穿越路徑433。
於第3級中,後置乘法器方塊418會相加總合結果R2a與進位結果R2b,並且將結果R3a提供至路徑421之上。殘餘位元邏輯808(圖8A)雖可運作,不過於本實施例中,殘餘位元SB3路徑則會於後面的級中被略過,致使乘積A*B會被截尾而非捨入。Rshift計數方塊428會使用路徑725上Ediff的記號來決定要移動哪個運算元以進行浮點加法並且產生一對應的SwapCtl信號。Rshift計數方塊428還會使用路徑Ediff上該數值的大小來決定該被選定運算元要被移動的位元數並且產生一正確的RshAmt信號。運算元C的假數
部份會穿越比較邏輯436而送至路徑419之上成為結果R3b。
於第4級中,對齊方塊420會接收乘積A*B的假數作為結果R3a並且接收運算元C的假數作為結果R3b。依據來自Rshift計數方塊428的SwapCtl信號,交換多工器904、906(圖9)便會將該等運算元中其中一者送入小運算元路徑908中且將另一者送入大運算元路徑910中。該小運算元會被右移電路912右移,而殘餘位元邏輯914則會從已經被移出去的位元中產生殘餘位元SB4。所產生的已對齊加數R4a、R4b會被送至路徑909、911之上。指數增額方塊430(圖4)會接收乘積A*B的假數(R3a),並且視情況對有效最終指數EFE進行增額,其方式已說明如上。其結果EFE2會被傳送至路徑443之上。
於第5級中,分數加總方塊422會接收該等經過對齊的加數R4a與R4b。加1加法器1002(圖10)會產生Sum與Sum+1兩個輸出,而反向器1006則會提供一反向Sum。捨入邏輯1008會接收路徑SB4上的殘餘位元並且控制選擇多工器1010用以依據該等殘餘位元、所選定的捨入模式、以及加1加法器1002中所算出之總合的記號,在Sum與Sum+1兩個輸出之間作選擇。所產生的假數R5會被傳送於路徑1011之上。
於第6級中,正規化方塊423會對假數R5進行正規化。居先編碼器1108(圖11)會偵測前方1的位置並且將該資料送至位移控制單元1110,該位移控制單元1110會產生一對
應的LshAmt信號。左移方塊1112會將該假數向左移動,並且於路徑425之上傳送結果R6。指數減額方塊432(圖4)會據此向下調整有效最終指數EFE2,並且於路徑427之上傳送所生成的最終指數E0。
於第7級中,輸出控制電路440會產生最終結果。格式化方塊1210(圖12)會接收指數E0與假數R6,並且以適當的格式(舉例來說,fp32或fp16)於Rdata上產生正規數。飽和邏輯1216會依照該指定格式來評估該指數E0、偵測任何的上限溢位、並且產生一適當的飽和信號Esat。最終結果選擇邏輯1214會接收該飽和信號Esat以及特殊數值信號SPC。對本運算來說,除非Esat或SPC信號表示該最終結果應該係一特殊數值,否則最終結果選擇邏輯1214便會指示多工器1212選擇結果Rdata。倘若Esat或SPC信號表示該最終結果應該係一特殊數值的話,那麼該適當的特殊數值便會被選為該最終結果。如上述,於該等輸入運算元中其中一者係一特殊數值的情況中,最終結果選擇邏輯1214能夠施行符合IEEE 754的規則(或是其它規則)。
2. FMUL運算與FADD運算
對浮點乘法(FMUL)來說,MMAD單元220會接收運算元A作為被乘數且接收運算元B作為乘數。有利地提供數值0.0(浮點零)作為運算元C。接著便會執行上述的FMAD運算來產生乘積A*B(+0.0),不過於第4級中,殘餘位元邏輯914(圖9)可有利地讓來自第3級的殘餘位元SB3穿越,
允許對該乘積進行捨入處理。於一些實施例中,可利用第4級中的條件式零方塊920(圖9)來強制運算元C為零,俾使可提供任何數值作為運算元C。
對浮點加法(FADD)來說,MMAD單元220會接收運算元A與C作為加數。於其中一實施例中,會將運算元B設為1.0用以計算(A*1.0)+C,以便執行FMAD運算。舉例來說,藉由提供浮點1.0給MMAD單元220作為運算元B或是藉由操作前置乘法器選擇多工器616(圖6A)來從暫存器620中選擇經過Booth3編碼的1.0,便可達到將運算元B設為1.0的目的。
於FADD的替代設計方式中,可將運算元B設為0.0(舉例來說,藉由提供浮點零作為MMAD單元220的輸入運算元),並且讓運算元A與B繞過第3級,其中可於後置乘法器方塊418中利用IP加法器804(圖8A)來計算A+0.0的總合;或者於一替代實施例中,亦可讓運算元A進一步繞過IP加法器804作為結果R3a。接續級則可運作用以執行FMAD運算來計算A+C。
3. FMIN運算與FMAX運算
浮點最大值(FMAX)運算與浮點最小值(FMIN)運算均會回傳兩個運算元中較大或較小者。如上述,該些與其它比較型運算均會利用假數路徑413與測試路徑417中的組件來處理。MMAD單元220會接收運算元A與B,用以對兩者執行FMAX或FMIN運算;而運算元C則可被設為任
意值。
對MIN運算與MAX運算來說,運算元B會於第0級中被反向(反向成~B),而運算元A與運算元~B的所有32位位元均會穿越第3級,分別作為結果R2a與R2b。於第3級中,IP加法器804(圖8A)會計算A+~B(也就是,A-B)的總合。此結果的兩位MSB,也就是RP2,會被送至給比較邏輯方塊436。應該注意的係,雖然運算元A與B均為浮點數,不過為達比較運算的目的,因為fp32格式與fp16格式的定義方式的關係,亦可以如同整數的方式來將它們扣除。
於比較邏輯方塊436中,AB記號電路820(圖8B)會接收路徑RP2上的信號並且產生正確的記號信號Sab。二元式測試邏輯822會如上述般地進行下面的選擇:對FMAX來說,倘若(A+~B)為負值的話(也就是,倘若B大於A的話),便選擇B,否則便選擇A;對FMIN來說,倘若(A+~B)為負值的話,便選擇A,否則便選擇B。應該注意的係,此處並未特別處理A=B的情況,因為不論係FMIN或FMAX,選擇任一運算元均會產生正確的結果。二元式測試邏輯822會產生一正確的CSEL信號,用來指示多工器824傳送R2a(運算元A)或R2b(運算元~B)中的正確者作為結果R3b。
於第4級中,小交換多工器904(圖9)會選擇結果R3b用以傳送給小運算元路徑908,而大交換多工器906則會選擇結果R3a,由於第3級中的運算的關係,其可能係A-B。Rshift計數電路428可用來產生SwapCtl信號的正確狀態,
用以響應該OPCTL信號以產生此結果,而與該等指數無關。於大運算元路徑910中,條件式零方塊914會運作用以將結果R4b變成零。於小運算元路徑908中會傳送結果R3b作為結果R4a。倘若在第3級處選擇的係運算元~B(其係在第0級處被反向)的話,那麼便可利用條件式反向電路918來再次反向結果R4a。為偵測此情況,條件式反向電路918可接收來自路徑827的CSEL信號(參見圖8B)。
於第5級中,加1加法器1002(圖10)會相加R4a(A或B)與R4b(零)。多工器1010會選擇Sum結果(也就是,被選定的運算元A或B)作為結果R5。
於第6級中,位移控制電路1110(圖11)會將LshAmt設為零以回應該OPCTL信號,致使結果R5可傳送通過變成結果R6,而並未經過修正。
於第7級中,格式化方塊1210(圖12)可提供未經過改變的結果R6作為結果Rdata。於A或B係特殊數值的情況中,最終結果選擇邏輯1214可操作多工器1212,用以使用一正確的特殊數值來取代結果Rdata。舉例來說,倘若A或B係NaN的話,FMAX或FMIN結果便可被強制成為NaN。
4. FSET運算
對二元式測試(FSET)運算來說,MMAD單元220會接收運算元A與B,並且可提供任何數值作為運算元C。和上述的FMIN運算與FMAX運算相同的係,運算元B會於第0級中被反向,而運算元A與~B則會繞過送至第3級,兩者
會利用IP加法器804(圖8A)進行相減,而MSB RP2則會被送至比較邏輯方塊436。
於第1級中,運算元A與~B雖然均會穿越,但是位元式邏輯方塊434卻會運作,利用多工器636(圖6C)來選擇XOR2單元634的結果當作結果R1進行傳送。
於第3級中,AB記號電路820(圖8B)會接收信號RP2並且產生記號信號Sab。二元式測試邏輯單元822會接收Sab信號、XOR2結果(R1)、特殊數值信號SPC、以及一用來指定要執行哪項二元式測試的OPCTL信號。二元式測試邏輯單元822會以上述的方式來執行其各項測試(參見第II.E章節)並且將布林結果BSEL傳送至路徑825之上。
布林結果BSEL會於路徑825上傳送至第7級。第4至6級中的各種電路方塊可對出現在正確信號路徑上的任何信號進行運算,或者亦可關閉該等電路。輸出控制方塊440則會略過第4至6級中所執行的任何運算的結果。
於第7級中,最終結果選擇邏輯1214會接收該布林結果BSEL並且操作最終選擇多工器1212,用以於布林真值(舉例來說,0x1)與偽值(舉例來說,0x0)之間作選擇。該結果BSEL會正確地反映出該等運算元究竟是否為特殊數值,而最終結果選擇邏輯1214則可於FSET運算中略過特殊數值信號SPC。
5. FCMP運算
對三元式條件式選擇運算(FCMP)來說,MMAD單元會
接收運算元A、B以及C。運算元A與B會穿越送至第3級分別作為結果R2a與R2b。運算元C則會穿越送至第3級作為結果R1。
於第3級中,二元式測試邏輯822(圖8B)會接收運算元C(R1)與特殊數值信號SPC。如上述(參見第II.E章節),二元式測試邏輯822利用該些信號來判斷是否滿足C≧0的條件。倘若C≧0的話,二元式測試邏輯822會指示多工器824選擇運算元A(R2a),否則便會選擇運算元B(R2b)。因為NaN並未大於等於零,所以當運算元C係NaN時便會選擇運算元B。
經選定的數值會當作結果R3b,被傳送至第7級,其方式和上述的FMIN運算及FMAX運算相同。(結果R3a可能係IP加法器804(圖8A)中運算元A與B的總合,或者亦可能會選擇運算元A作為結果R3a,不論係何者情況,結果R3a均不會影響到最終結果。)於第7級中,最終結果選擇邏輯1214係有利地偵測運算元C為NaN的情況,並且利用一NaN數值來取代所傳送的結果。
B.整數算術
整數運算元並不包含指數位元。於本文所述的格式中,有記號整數係利用二補數來代表,不過,熟習本技術的人士將會明白,亦可以其它代表符來表示。如下文所述者,除了指數邏輯不會被用到之外,整數算術運算通常與它們的浮點相對部類似。
1. IMAD
對整數MAD(IMAD)運算來說,MMAD單元220會使用假數路徑413來計算A*B+C。雖然部份整數格式可能係無記號整數,不過,MMAD單元220係有利地將所有格式均視為係有記號32位位元的二補數代表符。如此一來,不論實際格式為何,均可產生正確的結果。
於第0級中,必要時,可利用方塊504至506(圖5)(針對8位位元輸入格式)或是方塊508至510(針對16位位元輸入格式)將該等運算元A、B、以及C擴充成32位位元。
於第1級中,前置乘法器方塊416會計算3A以及運算元B的Booth3編碼。位元式邏輯方塊434會傳送運算元C作為結果R1。
於第2級中,乘法器方塊414會計算A*B,並且選擇該乘積中的總合欄位與進位欄位作為結果R2a與R2b。
於第3級中,後置乘法器方塊418會利用IP加法器804(圖8A)來相加該等總合欄位與進位欄位。整數多工器810會選擇上32位位元,且選擇多工器812會選此作為結果R3a。比較邏輯方塊436會傳送運算元C(R1)作為結果R3b。
於第4級中,對齊單元420會接收R3a(乘積A*B)與R3b(運算元C)。因為整數加法並不需要進行假數對齊,所以,Rshift計數電路428可針對所有IMAD運算以一致的狀態來產生該SwapCtl信號,俾使R3a(R3b)必定會被傳送至
小(大)運算元路徑908(910)之中(圖9),或反向為之。或者,倘若該等運算元中其中一者係負值的話,那麼該運算元便可被送進小運算元路徑908中並且經由條件式反向器918進行反向。殘餘位元邏輯914會運作,用以於路徑915之上產生殘餘位元SB4。
於第5級中,加1加法器1002(圖10)會相加R4a與R4b(其代表的係A*B與C)兩個數值,而捨入邏輯1008則會依據該等被收到的運算元的記號以及該等殘餘位元SB4於Sum、Sum+1、以及~Sum中選擇一正確者。結果R5會被傳送至路徑1011之上。
於第6級中,結果R5會穿越正規化方塊423而未經過修正。
於第7級中,格式化方塊1210會接收結果R6,並且於必要時對其進行格式化,以匹配輸入運算元格式。本發明的優點係,格式化方塊1210還會偵測任何的上限溢位,並且將結果數值Rdata鉗止至該輸入格式的最大允許值。最終結果選擇邏輯1214會選擇路徑Rdata上的數值作為最終結果OUT。
2.乘法(IMUL)與加法(IADD)
和上述的FMUL與FADD相同的係,整數乘法(IMUL)運算以及加法(IADD)運算均會用到MAD管線。對IMAD運算來說,MMAD單元220會接收運算元A作為被乘數,且接收運算元B作為乘數。有利的係,提供數值0(整數零)作
為運算元C。接著便會執行上述的IMAD運算來產生乘積A*B(+0),不過於第4級中,殘餘位元邏輯914(圖9)係有利地讓殘餘位元SB3穿越,允許對該乘積進行捨入處理。於部份實施例中,可利用第4級中的條件式零方塊920(圖9)來強制運算元C為零,俾使可提供任何數值作為運算元C。
對整數加法(IADD)來說,MMAD單元220會接收運算元A與C作為加數。於其中一實施例中,會將運算元B設為1用以計算(A*1)+C,以便執行IMAD運算。舉例來說,藉由提供整數1給MMAD單元220作為運算元B或是藉由操作前置乘法器選擇多工器616(圖6A)來從暫存器620或一不同的暫存器中選擇經過Booth3編碼的整數1,便可達到將運算元B設為1的目的。
於IADD的替代設計方式中,可將運算元B設為0(舉例來說,藉由提供整數零作為MMAD單元220的輸入運算元),並且讓運算元A與B繞過第3級,其中可於後置乘法器方塊418中利用IP加法器804(圖8A)來計算A+0的總合;或者於一不同實施例中,亦可讓運算元A繞過IP加法器804作為結果R3a。接續級則可運作用以執行IMAD運算來計算A+C。
3.絕對差相加:ISAD
對整數來說,本發明支援絕對差相加(ISAD)運算。此運算會計算|A-B|+C。於第0級中會接收運算元A、B以及C,且運算元B會被反向器519(圖5)反向以產生運算元~B。接
著,該等運算元便會通過第1與2級。
於第3級中,後置乘法器方塊418會藉由於IP加法器804(圖8A)中相加A與~B以計算A-B並且傳送結果R3a。於比較邏輯方塊436中(圖8B),AB記號電路820會偵測A-B的記號並且產生一對應的記號信號Sab,用以於路徑821上向前傳送至第4與5級。二元式測試邏輯822會控制選擇多工器824來傳送運算元C,作為結果R3b。
於第4級中會解出A-B的絕對值。明確地說,用於ISAD運算的SwapCtl信號會控制交換多工器904與906(圖9),俾使結果R3a(也就是,A-B)會被送入小運算元路徑908之中,而結果R3b(也就是,運算元C)則會被送入大運算元路徑910之中。小運算元路徑908上的條件式反向器918會從AB記號電路820中接收Sab信號並且於該記號為負值時將運算元(A-B)反向。因此,結果R4a會對應於一非負整數,而運算元C(其可能為正整數或負整數)則會被當作結果R4b來傳送。
於第5級中,加1加法器1002會相加來自路徑R4a與R4b中的兩個數值。捨入邏輯1008會依據Sab信號從Sum輸出與Sum+1輸出兩者中選擇其中一者,用於以二補數形式來提供正確的答案。明確地說,倘若A-B為非負數的話,那麼其結果便應該係(A-B)+C,選擇的便係Sum輸出;倘若A-B為負數的話,那麼其結果便係C-(A-B),以二補數來表示便係C+~(A-B)+1,由於第4級中條件式反向的關係,選擇的便係Sum+1輸出。
結果R5會傳送通過第6與7級,以供其它整數算術運算使用。於部份實施例中,第7級的格式化方塊1210(圖12)會偵測且處理上面所述的上限溢位。
4.比較運算:IMIN、IMAX、ISET
如上所述,執行浮點比較FMIN、FMAX、FSET時可將運算元視為整數。據此,整數比較IMIN、IMAX、ISET的施行方式便完全與上面第III.A.3與III.A.4章節中所述之浮點比較的施行方式相同。
5.條件式選擇運算:ICMP
整數的條件式選擇運算(ICMP)同樣和其浮點對應部份完全相同,而於MMAD單元220中處理此運算的方式亦完全等同於上面第III.A.5章節中所述之FCMP的施行方式。
C.位元式邏輯運算
除了整數與浮點算術功能之外,MMAD單元220還支援各種位元式邏輯運算(列在圖3中的306處),其可操控它們的運算元中的位元,而不必瞭解該等位元所代表的意義。該些運算包含位元式布林運算AND、OR、XOR、以及位元移動運算SHL(左移)與SHR(右移)。
1.布林運算:AND、OR、XOR
布林運算主要係利用第1級中的位元式邏輯方塊434
來處理。對該些運算來說,MMAD單元會接收32位位元運算元A與B(運算元C可被設為任何數值,因為其會被略過)以及一用於表示希望進行的布林運算的運算碼。該等運算元會傳送通過第0級。
於第1級中,位元式邏輯方塊434會接收運算元A與B,並且利用邏輯電路630、632、634(圖6C)同時對運算元A與B來執行位元式運算AND、OR、XOR。選擇多工器636會接收一用來表示要求進行何種布林運算的OPCTL信號,並且傳送對應的結果作為R1。運算元A與B可穿越第1級的前置乘法器方塊416與第2級的乘法器方塊414。
於第3級中,比較邏輯方塊436會傳送布林運算結果R1作為結果R3b。後置乘法器方塊418可能會相加A與B或者僅傳送A當作結果R3a,不論係何種情況,結果R3a均將被棄置。
於第4級中,交換多工器904與906(圖9)會將結果R3b送至小運算元路徑908之上且將結果R3a送至大運算元路徑910之上。於小運算元路徑908中,會傳送結果R3b(預期的結果),不作任何修正,作為結果R4a。於大運算元路徑910中,條件式零電路920會響應於一OPCTL信號將結果R4b變成零。
於第5級中,加1加法器1002(圖10)會將R4b(零)與R4a(布林運算結果)相加,而多工器1010則會選擇Sum結果作為結果R5。於第6級中不會對結果R6進行任何移動作業。於第7級中會傳送結果R6作為最終結果,而不作進
一步修正。對該些運算來說,不會發生上限溢位或是其它特殊情況。
2.位元移動運算:SHL、SHR
MMAD單元220還會實施位元移動運算,用以左移(SHL)或右移(SHR)一位元欄位。對兩種運算來說,要被移動的32位位元欄位會被送至MMAD單元220作為運算元A,而有利的係會藉由於運算元B的fp32指數位元位置中插入一八位位元整數值來提供位移量給MMAD單元220。因為大於31的位移量並不重要,所以,八位位元便足以攜載該位移量資料。對該些運算來說會略過運算元B的記號位元與分數位元,所以如同運算元C般可被設為任意值。
SHL運算會利用第6級中的左移電路1112(圖11)。如第II.J章節中所述般,運算元A會穿越抵達第5級的輸出R5。運算元B的指數部Eb(表示該位移量)會同時穿越指數路徑415成為路徑443上的結果EFE2。更明確地說,於第1級中,位移量Eb會藉由選擇多工器628(圖6B)的運作而繞過指數乘積方塊424。於第2級中,差值方塊714(圖7B)會響應該OPCTL信號來指示多工器716選擇輸入Eab(其為Eb)作為輸出EFE。指數增額方塊902會讓EFE信號通過抵達路徑443,而不作任何修正。
於第6級中,位移控制方塊1110(圖11)會接收位移量Eb作為路徑443之上的信號EFE2並且會產生一LshAmt信號以反映該位移量。於部份實施例中,倘若Eb太大的話,
位移控制方塊1110可鉗止該LshAmt信號,舉例來說,鉗止在31位位元處。左移電路1112會響應該LshAmt信號將運算元A(結果R5)向左移動正確的位元數,於必要時係有利地插入複數個尾部零。左移結果R6會被傳送至路徑425之上。於部份實施例中,指數減額方塊432會傳送該位移量信號EFE2作為最終指數E0,而不作任何修正。
於第7級中,係有利地提供結果R6作為最終輸出OUT,而不作任何修正。於部份實施例中,第7級還包含鉗止邏輯,用以在位移量超過31時將該結果鉗止在零的位置。此邏輯可被併入飽和邏輯1216之中,該飽和邏輯1216可接收該位移量作為最終指數E0。
SHR運算會利用第4級中的右移電路912(圖9)。該SHR運算可被設計成用來支援下面兩種模式:邏輯位移模式,於該模式中會將零插入每個新的MSB之中;以及算術位移模式,於該模式中會將記號位元延伸至該等新的MSB之中。該運算碼會有利地為每個SHR運算來選擇其中一種模式。
如上述,要被移動的運算元會被當作運算元A,而fp32運算元B的指數位元則會提供該位移量。如上面在第II.J章節中所述者,運算元A會通過第3級的輸出(作為結果R3a)。
同時,位移量Eb會被送至Rshift計數電路804。更明確地說,於第1級中,該位移量Eb會藉由選擇多工器628(圖6B)的運作而繞過指數乘積方塊424抵達路徑431。於第2
級中,差值方塊714(圖7B)會指示多工器716選擇Eab值作為差值Ediff。該EFE信號可被略過,並且可依需求選擇任何的候選數值。於部份實施例中,會提供Eab值作為EFE值。
於第3級中,Rshift計數電路428會相應於該Ediff信號(也就是,Eb)來產生一RshAmt信號。該RshAmt信號可被鉗止在31位位元處。於部份實施例中,Rshift計數電路428會依據其收到的OPCTL信號來判斷究竟要求的係邏輯位移或算術位移,而且於RshAmt信號中包含一對應的「位移類型」位元。
於第4級中,小交換多工器904(圖9)會將運算元A送至小運算元路徑908之上。於大運算元路徑910之上,條件式零電路920會將結果R4b變成零。於小運算元路徑908之上,右移電路912會接收該RshAmt信號並且將運算元A向右移動所指定的位元數。於部份實施例中,右移電路912會偵測該RshAmt信號中的位移類型位元(邏輯位移或算術位移),並且據此於右移該運算元時將零或一插入該等新的MSB之中。
於第5級中,加1加法器1002(圖10)會將結果R4a(右移之後的運算元A)與R4b(零)相加。於第6級中,結果R5會傳送通過正規化方塊423而不作進一步移動。於第7級中,會有利地利用結果R6作為最終結果OUT,而不作任何修正。於部份實施例中,第7級還包含鉗止邏輯,用以在位移量Eb超過31時將該結果鉗止在零的位置。此邏輯可
被併入飽和邏輯1216之中,該飽和邏輯1216可如同上面針對左移運算所述般地接收Eb。
D.格式轉換運算
MMAD單元220還支援各種整數格式與浮點格式之間的轉換。於部份實施例中,格式轉換並非與上述算術運算同時進行;不過,特定的其它實施例則可結合某一種格式轉換。舉例來說,各種轉換運算均可與下面運算作結合:針對整數N進行2N縮放及/或決定該運算元的絕對值或負值。下面章節將說明浮點格式之間的轉換以及整數格式之間的轉換。
1.浮點至浮點轉換(F2F)
受支援的浮點至浮點(F2F)轉換運算包含從fp16至fp32的直接轉換,以及從fp32至fp16的直接轉換。此等轉換可能還併入絕對值、負值、及/或2N縮放。此外,本運算還支援從fp16至fp16以及從fp32至fp32的整數捨入運算。於所有情況中,要被轉換的數值均會被送至MMAD單元220作為運算元A,而於欲進行2N縮放的地方,則會利用fp32運算元B的八位指數位元Eb來提供該縮放係數N。對fp16與fp32的格式來說,會提供一記號位元,而且可藉由操控該記號位元來施行絕對值與負值運算。此操控係本技術中所熟知者,詳細說明將予以省略。
從fp16至fp32的直接轉換會使用第0級中的向上轉換
器512(圖5)來產生運算元A的fp32代表符。向上轉換器512會調整指數偏移量來對應於fp32(舉例來說,藉由相加127-15=112)並且於該分數中加入13個尾部零。除非運算元A係一fp16的非正規數,否則本轉換必定正確。於第1級中,特殊數值偵測方塊414會判斷運算元A是否係一fp16的非正規數、INF、或是NaN,並且於路徑SPC上產生正確的信號。
運算元A的假數部份會通過抵達第5級的輸出處(結果R5),其方式如上面於第II.J章節中所述者。運算元A與B的指數部Ea、Eb會分別被傳送至第1級中的指數乘積方塊424。於此情況中,指數Eb係指數縮放係數N。指數Ea與Eb會在指數乘積方塊424中相加,從而達成2N縮放的目的,而結果Eab則會被傳送至路徑431之上。於第2級中,指數加總方塊426會傳送結果Eab,當作有效最終指數EFE。於第3級中,Rshift計數電路428會響應該OPCTL信號以產生零位移的信號,略過可能出現在路徑725之上的任何Ediff信號。於第4級中,指數增額方塊430會將指數EFE向前傳送至路徑433之上(作為EFE2),而不進行修正。
第6級會被用來處理fp16的非正規數,所有fp16非正規數均可以fp32的正規數來表示。如上所述,非正規數係被解釋成具有最小允許指數且於假數中不具有隱含整數1。於第6級中,居先編碼器1108(圖11)會決定運算元A之假數部份中前方1的位置。倘若該特殊數值信號SPC表示
運算元係一fp16的非正規數的話,那麼位移控制電路1110便會依據該前方1的位置來產生一LshAmt信號;否則位移控制電路1110便會產生一對應於一零位移的LshAmt信號。左移電路1112會將該指定位移套用至假數R5,從而產生一經正規化的假數R6。指數減額方塊432(圖4)會將該指數EFE2減去一對應數額。
第7級會被用來處理輸入為fp16 INF或NaN的情況。明確地說,倘若該特殊數值信號SPC表示此類數值的話,最終結果選擇邏輯1214(圖12)便會視情況來選擇一合宜的fp32 INF或NaN數值。此外,因為2N縮放可能會造成該指數飽和,所以,還會有利地利用飽和邏輯1216來偵測此飽和情況並且選擇一適當的特殊數值(舉例來說,INF)作為最終結果。
從fp32至fp16的直接轉換會將指數從八位位元縮減成五位位元,而有意義位元則會從23位位元縮減成10位位元。該有意義位元可視需要進行捨入或截尾。此捨入作業會利用第4級中的對齊單元420(圖9)以及第5級中的捨入邏輯1008(圖10)。運算元A的假數部份(較佳的係,含有一明確的前方1)會穿越抵達第3級的輸出處(結果R3a),其方式如上面第II.J章節中所述者。
於第1級中,運算元A的指數部Ea會通過指數乘積方塊424,並且會如上所述般地藉由相加運算元B的指數部Eb來使用2N縮放。其結果Eab會被傳送至路徑431之上。
於第2級中,指數加總方塊426會將該指數重新偏移
至fp16偏移量,舉例來說,利用差值電路714(圖7B)扣除112,並且提供其結果作為有效最終指數EFE。於其它實施例中,利用偏移量β以及指數乘積方塊424的加法器624(圖6B)亦可實施重新偏移作業。指數加總方塊426還會有利地偵測fp16指數上限溢位(INF或是NaN)以及下限溢位(非正規數)。對上限溢位來說,該指數會被鉗止在其最大數值處。對下限溢位來說,指數加總方塊426會設定差值Ediff用以表示下限溢位的數額(舉例來說,112-Eab)並且將該有效最終指數EFE設為零(最小指數)。對於下限溢位以外的情況來說,差值Ediff均可被設為零。
於第3級中,Rshift計數電路428會使用該Ediff信號來決定要使用的右移量並且會產生一合宜的RshAmt信號。對fp32至fp16轉換來說,內定位移量為位移13位位元(所以結果R4a的11位LSB係攜載fp16假數)。差值Ediff會被加入此內定數值中,俾使可將fp16非正規數右移高達24位位元。移動超過24位位元便會造成一fp16零;據此,Rshift計數電路804便可將此運算的位移量鉗止在24位位元處。
於第4級中,小交換多工器904(圖9)會將運算元A的假數送至小運算元路徑908之上。於大運算元路徑910之上,條件式零電路920會將結果R4b變成零。於小運算元路徑908之上,右移電路912會依照該RshAmt信號來右移該假數,而且殘餘位元邏輯914有利地會產生殘餘位元SB4。
於第5級中,加1加法器1002(圖10)會將結果R4a(運算元A的假數)與R4b(零)相加。捨入邏輯1008會接收該等殘餘位元SB4並且依照預期的捨入模式於Sum與Sum+1兩種輸出之間作選擇;不過,在其它運算中,則可能會選擇進行任何的IEEE捨入處理。捨入邏輯1008所選定的結果R5a會被傳送至路徑1011之上。
於第6級中,正規化方塊423會讓結果R5a通過而未對其進行修正。
於第7級中,格式化方塊1210(圖12)會利用該最終指數E0與假數R6來格式化該fp16結果。指數飽和邏輯1216會偵測fp16指數上限溢位,且最終結果選擇邏輯1214會響應此等上限溢位以利用一fp16 INF來取代該結果。此外,被第1級中的特殊數值偵測方塊438所偵測到的fp32 INF或是NaN則可導致輸出一fp16 INF或是NaN。
對於輸入格式與輸出格式相同的情況來說(fp32至fp32或是fp16至fp16),便會施行F2F整數捨入運算。整數捨入會移除該運算元所代表的數字的分數部,且可利用標準IEEE捨入模式中任一模式來進行捨入(最小上界(ceiling)捨入模式、最大下界(floor)捨入模式、截尾(truncation)捨入模式以及最近值(nearest)捨入模式)。如同fp32至fp16轉換,MMAD單元220亦會利用第4級的右移電路912以及第5級的捨入邏輯1008來支援整數捨入處理。2N縮放可與本運算作結合。
運算元A的假數會穿越抵達第3級的輸出處(結果
R3a),其方式如上面第II.J章節中所述者。為支援整數捨入作業,第1與2級中的指數邏輯會被用來決定該二元點的位置。於第1級中,除了使用任何2N縮放之外,指數乘積方塊424(參見圖6B)還會扣除一偏移量β(舉例來說,對fp32來說為127,對fp16來說為15)並且提供該結果作為Eab。倘若該結果Eab小於零的話,那麼該數便係純分數。於第2級中,指數加總方塊426會提供該結果Eab給路徑725(作為信號Ediff)以及723(作為信號EFE)。
於第3級中,Rshift計數電路428會依據該Ediff信號來決定右移量RshAmt。有利地選定該位移量之後,對該經過位移的假數來說,真實的二元點就在LSB的右邊。舉例來說,對一fp32輸入來說,Eab≦23時,該位移量為(23-Eab),而Eab>23時,該位移量則為零位元。Rshift計數電路428會計算此位移量並且提供一正確的RshAmt信號給對齊方塊420。
於第4級中,小交換多工器904(圖9)會將運算元A送至小運算元路徑908之上。於大運算元路徑910之上,條件式零電路920會將結果R4b變成零。於小運算元路徑908之中,右移電路912會依照該RshAmt信號來執行右移,而殘餘位元邏輯914則會產生殘餘位元SB4。
於第5級中,加1加法器1002(圖10)會將結果R4a(運算元A的假數)與R4b(零)相加,而捨入邏輯1008則會依據該捨入模式以及路徑504上的該等殘餘位元於Sum與Sum+1兩種輸出之間作選擇。
於第6級中,結果R5會被重新正規化至原來的輸入格式。居先編碼器1108(圖11)會偵測前方1的位置,而位移控制電路1110則會產生一LshAmt信號,用來指示左移電路1112會將該假數左移正確的位元數,插入尾部零。指數減額方塊432(圖4)有利地會被配置成用以略過該LshAmt信號並且提供該指數EFE2作為最終指數E0,而不作修正。
於第7級中,該結果會被格式化且傳送至輸出處。當2N縮放可能導致飽和時,指數飽和邏輯1216便會有利地運作。其會偵測特殊數值輸入(舉例來說,INF或NaN)並且回傳對應的特殊數值結果,其方式已於上面作過討論。
2.浮點至整數轉換(F2I)
於MMAD單元220中會以和上述的整數捨入F2F轉換相同的方式來設計浮點至整數(F2I)轉換。要被轉換的浮點數會以fp16或fp32的格式送至MMAD單元220作為運算元A。如上述,藉由於一fp32運算元B的指數位元中提供縮放參數N便可施行2N縮放。於其中一實施例中,目標整數格式可能係16或32位位元、有記號或無記號,該目標格式會透過該運算碼來指定。
於第0級中,倘若運算元A為fp16格式的話,那麼向上轉換器512(圖5)便會將其轉換成fp32格式,其方式說明如上。於此級中亦可使用絕對值與負值運算。對絕對值來說,該記號位元會被設為正值。對負值來說,該記號位元則會被翻轉。倘若經過可使用的負值運算之後,該記號位
元會係負值且會需要一有記號的整數代表符,假數部份會被條件式反向器518反向,且還會傳送一記號控制信號(圖4中未顯示)來要求一負值結果。
第1至4級的運作方式如同上面針對F2F整數捨入轉換所述般,第3級的Rshift控制電路428會產生一右移量RshAmt用以在該假數被右移之後將二元點放置在LSB的右邊,而第4級的右移電路912(圖9)則會用來執行該移動作業。殘餘位元邏輯914則可產生殘餘位元SB4。
於第5級中,加1加法器1002(圖10)會將結果R4a(運算元A的假數)與R4b(零)相加,從而產生Sum與Sum+1兩種輸出。捨入邏輯1008會依據可使用的捨入模式以及在有記號的整數格式中來自第0級的記號控制信號是否表示一負值結果在兩種輸出之間作選擇,俾使可獲得一正確的二補數代表符。
於第6級中會讓經過右移的假數R5通過,而不作修正。
於第7級中,指數飽和邏輯1216(圖12)會判斷該輸入浮點值是否超過該目標整數格式中的最大值。若是的話,那麼該結果便會被最終結果選擇邏輯1214鉗止在最大值處(舉例來說,所有位元均設為1)。倘若該輸入運算元係INF的話,那麼該輸出便可被鉗止在最大整數值處;同樣地,倘若該輸入運算元係NaN的話,那麼該輸出亦可被鉗止在預期的數值處,例如零。經過正確格式化之後的整數會被傳送作為最終結果OUT。對少於32位位元的整數格式來說,該等結果可於必要時在該32位位元欄位中向右對齊或
向左對齊。
3.整數至浮點轉換(I2F)
於其中一實施例中支援整數至浮點轉換(I2F)運算,用以將任何有記號或無記號整數格式轉換成fp32,並且將八位位元與十六位位元記號或無記號格式轉換成fp16。和其它轉換相同,必要時還可支援負值、絕對值以及2N縮放等運算。運算元A會以整數格式的方式被送至MMAD單元220,而縮放參數N則可提供在一浮點運算元B的指數位元中,其說明如上。
於第0級中,必要時,運算元A會被向上轉換器504、508(圖5)向上轉換成32位位元。該向上轉換可使用記號延伸或零延伸。倘若運算元A係負數的話,其便會被條件式反向器518反向,且會傳送一記號控制信號來表示A是否被反向。此信號可用來設定該浮點結果的該記號位元。(倘若要求的係絕對值的話,該記號位元必定會被設在其正數狀態中)
該浮點數的指數會被初始化,用以對應於231,接著便會依據該整數中的前方1的真實位置來進行向下調整。對假數來說,該整數的該等32位位元會向右移至可將該整數置入該浮點假數欄位之中為止(於fp32的情況中為向右移動24位位元,於fp16的情況中則為向右移動11位位元)。明確地說,於該整數的八位MSB中任一位為非零的情況中,在從32位位元整數轉換成fp32期間便會執行右移;且
於該整數的五位MSB中任一位為非零的情況中,在從16位位元整數轉換成fp16期間亦會執行右移。當發生右移時,便可利用任何IEEE捨入模式來對該浮點結果進行捨入處理。
更明確地說,於第1級中,I2F位元組電路444會依據輸入格式從運算元A中取出該等八位MSB。對32位位元的整數輸入來說,會取出該32位位元欄位中的八位MSB;對在該32位位元欄位中向右對齊的16位位元整數格式來說,則會先棄置該32位位元欄位中的前十六位位元,並且取出接續的八位MSB。對8位位元的整數來說,則可取出最末的八位位元;不過,吾人將可明白,該I2F位元組電路444的結果並非作為8位位元整數輸入。如上所述,I2F位元組電路444還包含一AND樹用來測試剩餘的位元是否全部為1,此測試的結果(信號And24)會被傳送至路徑437之上。同時,指數乘積方塊424會將信號Eab設為31加一適當的偏移量,對fp16來說,該偏移量為15,而對fp32來說,該偏移量則為127。當用到2N縮放時,指數乘積方塊424還會加入該縮放參數N,其方式如上所述。
於第2級中,指數加總方塊426(圖7B)中的居先編碼器718會在運算元A的該等MSB中決定前方1的位置。差值電路714會選擇該居先編碼器結果作為指數差值Ediff並且選擇指數Eab作為有效最終指數EFE。於部份實施例中,差值電路714會使用信號And24來判斷在該運算元中加1解出一個二補數是否會於該等八位MSB中產生一非零位元
並且據以調整該居先編碼器結果。於居先編碼器718中還可併入類似的邏輯。運算元A會被繞送至乘法器方塊414的輸出處(結果R2a),如上面在第II.J章節中所述者。
於第3級中,倘若運算元A於第0級中被反向的話(從上述的記號控制信號中便可作判斷),那麼便可利用多工器812(圖8A)將運算元B強制變成1並且利用IP加法器804將其加入運算元A之中,以完成一個二補數反向。否則,便可將運算元A繞送至路徑421之上。因此,對fp16或fp32格式的假數來說,便可依照需求來保證結果R3a為正數。
另外於第3級中,Rshift計數電路428還會使用信號Ediff來判斷該假數是否應該右移,若是應該右移的話,則可決定出該位移量。倘若用來代表該整數的必要位元數(不含前方的零在內)超過該浮點格式中有意義位元的數量的話便會有利地進行右移。舉例來說,於從32位位元整數格式至fp32的轉換中,倘若該前方1位在第1至第8個位元位置中任一位置處的話,該假數便應該右移;於從16位位元整數格式至fp16的轉換中,倘若該前方1位在第1至第5個位元位置中任一位置處的話,該假數便應該右移。如上所示,來自居先編碼器718的信號Ediff會反映此資訊,而Rshift計數電路428則會產生正確的RshAmt信號。
於第4級中,小交換多工器904(圖9)會將該假數(結果R3a)送至小運算元路徑908之上。右移電路912會依照該RshAmt信號來右移該假數,而殘餘位元邏輯914則會產生殘餘位元SB4。於大運算元路徑910之上,條件式零電路
920會將結果R4b變成零。
於第5級中,加1加法器1002(圖10)會將結果R4a(假數)與R4b(零)相加,而捨入邏輯1008則會依據該捨入模式以及該等殘餘位元SB4在Sum與Sum+1兩種輸出之間作選擇。
於第6級中,假數R5會被正規化成一浮點代表符。正規化方塊423會將該假數左移,用以將前方1置放該MSB位置中,而指數減額方塊432則會據以向下調整該指數E0。
於第7級中,假數R6與指數E0會被格式化方塊1210(圖12)格式化成fp32或fp16數值並且被送至最終選擇多工器1212。飽和邏輯1216可發揮作用,且於部份情況中可能會發生飽和情況,舉例來說,從u16轉換成fp16。當發生飽和時,便可選擇具有正確浮點格式的上限溢位數值(舉例來說,INF)。
應該注意的係,本實施例中並未支援從32位位元整數至fp16的I2F轉換,因為居先編碼器718(圖7B)係一個八位位元編碼器。熟習本技術的人士將會瞭解,該居先編碼器的大小係一項重要的設計選項,而藉由提供一較大的居先編碼器(舉例來說,21位位元)便可支援此轉換。
於另一實施例中,居先編碼器718可在該管線中移放在已經執行過二補數反向的位置點處(舉例來說,位在IP加法器804後面)。於此情況中,便不需要一AND樹來偵測一加1運算的效果。
4.整數至整數轉換(I2I)
此處支援整數至整數轉換(I2I)運算,用以將任何整數格式轉換成任何其它整數格式,其包含從有記號格式轉換成無記號格式以及從無記號格式轉換成有記號格式。此處亦支援負值(二補數)與絕對值選項。
於本實施例中,下面的規則係用來於I2I轉換中處理上限溢位。首先,對於從一有記號格式至一無記號格式的轉換來說,所有負值均會被鉗止在零處。其次,對於從一較大格式(舉例來說,具有較多位元的格式)至一較小格式(舉例來說,具有較少位元的格式)的轉換來說,上限溢位會被鉗止在該較小格式的最大允許數值處。再者,對於從一較小格式至一較大無記號格式的轉換來說,正值會進行零延伸;而對於從一較小格式至一較大有記號格式的轉換來說,則會用到記號延伸。
於第0級中,會收到運算元A。倘若該輸入格式小於32位位元的話,那麼運算元A便會利用記號延伸(對無記號輸入格式來說則會利用零延伸)向上轉換成32位位元(參見圖5)。接著,運算元A會穿越抵達第3級的輸出處(結果R3a),其方式如上面第II.J章節中所述者。於第4級中,小交換多工器904(圖9)會將運算元A送至小運算元路徑908之上。於大運算元路徑910之上,條件式零電路920會將結果R4b變成零。於小運算元路徑908之中,條件式反向器918會依據被要求的究竟係負值或絕對值來對運算元A進行或不進行反向;而於絕對值的情況中,則會依據運算
元A究竟係正值或負值來對運算元A進行或不進行反向。
於第5級中,加1加法器1002(圖10)會將R4a(運算元A)與R4b(零)相加。倘若運算元A於第4級中已經被反向的話,便會選擇Sum+1輸出,所以其結果便會係二補數的形式。結果R5會穿越第6級,不作修正。
於第7級中,該輸出會於格式化方塊1210(圖12)中被格式化。對於轉換至較大有記號格式來說,格式化方塊1210會有利地使用記號延伸。格式化方塊1210還會將該結果鉗止在某一特定格式的最大允許整數處;舉例來說,對正數來說,倘若於該目標格式的MSB位置的左邊有1的話,那麼該輸出便會被設為全部為1。
5.分數(FRC)運算
分數(FRC)運算會回傳一浮點(舉例來說,fp32)運算元A的分數部。於FRC運算中,MMAD單元220會使用運算元A的指數部來決定運算元A之假數內該二元點的位置並且會使用一遮罩,用以將該二元點左邊的所有位元(整數位元)設為零並且保留該二元點右邊的位元(分數位元)。
於第0級中,會收到一浮點(舉例來說,fp16或fp32)運算元A,並且可於必要時向上轉換成fp32。運算元C會輸入作為一全部為零的欄位(或是可強制其全部為零)。運算元A會穿越抵達第3級的輸出處(結果R3a),其方式如上面第II.J章節中所述者。
於第1級中,當運算元A通過時,位元式邏輯方塊434
中的條件式反向器635(圖6C)會將運算元C反向,用以獲得一全部為1的欄位,而選擇多工器636則會選擇此欄位作為結果R1。於其它實施例中,可利用選擇多工器636或另一電路從一適當的暫存器(圖中未顯示)中選擇一全部為1的欄位。該結果R1(全部為1的欄位)會穿越抵達第3級的輸出處(結果R3b),其方式如上面第II.J章節中所述者。
同樣於第1級中,指數乘積方塊424會從運算元A的指數部Ea中扣除該指數偏移量(舉例來說,對fp32而言,該偏移量為127),並且向前傳送此數值作為指數Eab。於第2級中,指數加總方塊426會提供Eab作為指數差值Ediff,且作為有效最終指數EFE。
於第3級中,Rshift計數電路428會依據A中未經過偏移的指數(Eab)以及正確的SwapCtl信號(用於將結果R3a與R3b分別送至大運算元路徑上與小運算元路徑上)來產生一RshAmt位移信號。
於第4級中,大交換多工器906(圖9)會將運算元A(結果R3a)送至大運算元路徑910之上,而小交換多工器904則會將全部為1的欄位(結果R3b)送至小運算元路徑908之上。右移電路912會藉由響應該RshAmt信號來右移該全部為1的欄位以形成一遮罩;會有利地使用到邏輯右移。該遮罩會通過條件式反向器918作為路徑909之上的結果R4a。應該注意的係,倘若運算元A中未經過偏移的指數為零或負數的話,那麼該RshAmt信號便會有利地對應於零位移。對正指數來說,以非零位移為宜,且可將該位移限制
在24位位元。
大運算元路徑910會讓運算元A通過而不加以修正,使其作為路徑911之上的結果R4b。同時,指數增額方塊430(圖4)會讓該有效最終指數EFE通過而不加以修正,使其作為EFE2。
於第5級中,AND2電路1004(圖10)會運作用以將遮罩R4a使用至運算元A(其會被接收變成R4b)。該遮罩會將運算元A的整數位元變成零且不會對分數位元造成任何影響。選擇多工器1010會選擇來自AND2電路1004的輸出,該輸出為A的分數位元。
於第6級中,正規化方塊423會居先編碼且正規化結果R5,而指數減額方塊432則會對該有效最終指數EFE2進行相應調整以獲得最終指數E0。
於第7級中,含有指數E0在內的結果R6會被格式化方塊1210(圖12)格式化成fp32(或fp16)數值並且被送至最終選擇多工器1212中進行選擇。在運算元A為INF或NaN的情況中,可於必要時利用特殊數值邏輯來取代被算出的結果。
E.區域映對(PRO)
在MMAD單元220中還設計了區域映對運算,又稱為引數縮減運算或範圍縮減運算(PRO)。該些運算支援於一分離的算術單元中計算各種超越函數,該算術單元可設計成圖2中該等其它功能單元222中其中一者。於其中一實施
例中,MMAD單元220會實施區域映對運算,用以將三角函數(舉例來說,sin(x)與cos(x))以及指數函數(2x)中的浮點引數x縮減至一有界範圍中。對PRO來說,MMAD單元220的輸入係一fp32數值x,當作運算元A。其輸出則會係特殊的32位位元格式,說明如下。
1.三角函數的PRO
計算sin(x)與cos(x)的功能單元通常會運用該些函數的週期性,要求先將引數x縮減至2 π k+x0,其中K為整數而0≦x0<2 π。接著,便可利用x0來計算該三角函數。於部份施行方式中,x0可以表示成分數xR=x0/2 π,其中0≦xR<1。
於本發明的其中一實施例中,MMAD單元220會利用該MAD管線的該等乘法級(圖4中的第1至3級)來執行和1/2 π相乘的浮點乘法,並且利用其它級來取出該結果的分數部,用以計算三角PRO的xR。由於該乘法的有限數值精確性的關係,雖然該結果會係一近似值,不過,對於通常不會發生超大數值x的應用(舉例來說,圖形)來說,該近似值已經非常足夠。
該三角PRO的輸出會以一特殊32位位元固定點的格式來提供,其包含一記號位元、一個一位位元的特殊數值旗標、五位保留位元、以及25位分數位元。於該邏輯數值旗標被設為邏輯真的情況中,該結果會係一特殊數值;而該等保留位元或分數位元中其中一部份或全部則可用來表示
其為哪個特殊數值(舉例來說,INF或NaN)。
於第0級中,會以fp32格式來提供引數x作為運算元A0,而且運算元A0會穿越第0級成為運算元A。
於第1級中,指數乘積方塊424會讓運算元A的指數部Ea通過成為指數Eab。於前置乘法器電路416中,多工器616(圖6A)會從暫存器618中選擇所儲存的1/2 π的Booth3編碼代表符作為路徑BB上的乘數。
於第2級中,指數加總方塊426會選擇指數Ea作為有效最終指數EFE與差值Ediff。乘法器方塊414會計算A*(1/2 π)並且提供該乘積的總合欄位與進位欄位,作為結果R2a與R2b。
於第3級中,Rshift計數電路428會從Ediff信號中來判斷是否應該執行右移,用以正確地對齊該浮點結果的二元點。舉例來說,倘若該指數為負值的話便可能需要進行右移。倘若需要進行右移的話,Rshift計數電路428便會提供正確的位移量信號RshAmt。另外,於第3級中,IP加法器804(圖8A)還會相加該等總合欄位與進位欄位(R2a、R2b),用以產生該乘積。多工器814會選擇上32位位元作為結果R3a。殘餘位元邏輯808則可產生殘餘位元SB3以供稍後用於捨入處理中。
於第4級中,指數增額方塊430可於必要時調整該指數,用以反映IP加法器804中的進位,如同在上述FMUL運算與FMAD運算中所進行者。於對齊單元420中,小交換多工器904(圖9)會將乘積R3a送至小運算元路徑908之
上,其中右移電路912會使用Rshift計數電路428所決定的任何右移量。結果R4a會被傳送至路徑909之上。倘若使用右移的話,殘餘位元邏輯914便可能會產生新的殘餘位元SB4;否則,殘餘位元邏輯914便可向前傳送殘餘位元SB3作為殘餘位元SB4。於大運算元路徑910中,條件式零單元920會將結果R4b變成零。
於第5級中,加1加法器1002(圖10)會將結果R4a(該乘積)與R4b(零)相加。於部份實施例中,不會用到捨入邏輯1008;於其它實施例中,捨入邏輯1008則可對來自路徑SB4的該等殘餘位元進行運算。(因為PRO係近似值,所以捨入處理未必會改良該結果的精確度)
於第6級中,必要時,正規化方塊423會使用左移,用以正確地找到該二元點(舉例來說,倘若該指數為正數時)。位移控制電路1110會利用路徑EFE2上的有效最終指數來決定該左移量,並且由左移電路1112來執行左移。經過左移之後的結果R6會被送至路徑425之上。指數減額方塊432可視需要來相應遞減該最終指數E0,不過,於第7級中將會略過該指數。
於第7級中,格式化方塊1210(圖12)會利用來自路徑R6上之結果中的記號位元與25位位元以上數個格式來產生最終的32位位元結果Rdata。會有利地響應於來自第1級中特殊數值偵測方塊439的特殊數值信號SPC來設定該結果Rdata中的特殊數值旗標。當偵測到一特殊數值時,便可利用該等分數位元或保留位元中其中一部份來表示其為
哪個特殊數值。
2.指數函數EX2的PRO
如本技術中所熟知者,藉由分解x=M+f,然後計算2M*2f,便可於算術功能單元中來施行以2為基底的指數函數(EX2(x)=2x),其中M為整數,而f則落在[0.0、1.0]區間之間。計算2M非常容易(位元移動或是指數相加),而計算2f則可利用查值表來完成。
於其中一實施例中,MMAD單元220會藉由取出引數x的分數部來執行EX2的PRO。此PRO略同於上述在F2F轉換背景中的整數捨入運算,不過於此情況中,該二元點右邊的位元均會被保留。
該指數PRO的輸出係一特殊32位位元的格式,其具有一記號位元、一個一位位元的特殊數值旗標、七位整數位元、以及23位分數位元。於該邏輯數值旗標被設為邏輯真的情況中,該結果會係一特殊數值;而該等整數位元或分數位元中其中一部份或全部則可用來表示其為哪個特殊數值。
於第0級中,會以fp32格式來提供引數x給MMAD單元220作為運算元A0,而且運算元A0會穿越第0級成為運算元A。
於第1級中,指數乘積方塊424會從指數Ea中扣除127(fp32的偏移量),從而產生結果Eab。如上所述,在後級中會利用結果Eab來對齊該二元點,俾使其右邊有23位
位元,而其左邊則有7位位元。於前置乘法器電路416(參見6A)中,多工器616會從暫存器620中選擇1.0的Booth3編碼代表符。
於第2級中,指數加總方塊426會讓Eab通過成為有效最終指數EFE與差值Ediff。乘法器方塊414會將運算元A乘以1.0並且提供該乘積的總合欄位與進位欄位,作為結果R2a與R2b。
於第3級中,Rshift計數電路428會從差值信號Ediff中來判斷是否應該執行右移用以正確地對齊該二元點,舉例來說,可依據Ediff係負值或正值來判斷。倘若需要進行右移的話,Rshift計數電路428便會產生信號RshAmt來反映該位移量,該位移量可從Ediff的大小中來決定。另外,於第3級中,IP加法器804(圖8A)還會相加該等總合欄位R2a與進位欄位R2b,用以產生該乘積。而多工器814則會選擇上32位位元作為結果R3a。殘餘位元邏輯808則可產生殘餘位元SB3。
於第4級中,指數增額方塊430可調整該指數,用以反映IP加法器804中的任何進位。於對齊單元420中,小交換多工器904(圖9)會將乘積結果R3a送至小運算元路徑908之上,其中右移電路912會使用Rshift計數電路428所決定的任何右移量,從而產生結果R4a。倘若使用右移的話,殘餘位元邏輯914便可能會依據該右移量來產生新的殘餘位元SB4;否則,便可傳送殘餘位元SB3作為殘餘位元SB4。於大運算元路徑910中,條件式零單元920會將結
果R4b變成零。
於第5級中,加1加法器1002(圖10)會將結果R4a(該乘積A*1)與R4b(零)相加。於部份實施例中,捨入邏輯1008會選擇Sum輸出作為結果R5;於其它實施例中,捨入邏輯1008則可能會利用殘餘位元SB4在Sum與Sum+1兩個輸出之間作選擇。
於第6級中,必要時,正規化方塊423會使用左移,用以正確地對齊該二元點(舉例來說,倘若該指數為正數時)。位移控制電路1110會利用有效最終指數EFE2來決定該左移量,並且由左移電路1112來執行左移。經過左移之後的結果R6會被送至路徑425之上。指數減額方塊432可視需要來相應遞減該指數。
於第7級中,格式化方塊1210(圖12)會將該結果R6轉換成一具有七位整數位元與23位分數位元的固定點代表符。指數飽和邏輯1216則可用來偵測飽和情況,於此情況中,可選擇INF(上述的特殊輸出格式)作為結果。
IV.進一步實施例
雖然本文已經針對特定實施例說明過本發明,不過,熟習本技術的人士將會瞭解,仍可對本發明進行各種修正。舉例來說,MMAD單元可被設計成用來支援更多、較少、或是其它不同的功能組合,並且可支援具有任何格式或格式組合的運算元與結果。
本文中所述的各條旁通路徑及穿越路徑亦可加以改
變。一般而言,於提及繞過任何電路方塊的旁通路徑的地方,均可利用該方塊中一均等運算(也就是,對其運算元不會產生任何效果的運算,例如添加零)來置換該條路徑,反之亦然。於一特定運算中被繞過的電路方塊可被置入閒置狀態(舉例來說,低功率狀態)中;或者,其亦可正常運作,不過,下游方塊則會略過其結果,舉例來說,藉由選擇多工器或其它電路的運作。
該MMAD管線可被任意分割成複數級。該管線可能包含任意級數,且亦可視需要來改變每一級之中的組件組合方式。本文某些特殊方塊所造成的功能亦可分散於複數管線級之中,舉例來說,一乘法器樹便可能會佔據多重級。
各方塊的功能亦可進行修正。舉例來說,於部份實施例中,可能會利用到不同的加法器或乘法器電路,且進行相乘時亦可能不需要用到Booth3編碼(或是任何其它編碼)。
此外,為幫助瞭解本發明,本文中以電路方塊的方式來說明該MMAD單元;不過,熟習本技術的人士便會瞭解,該等方塊可利用各種電路組件與佈置來設計且本文中所述的該等方塊並不受限於特殊的組件集或實體佈置。該等方塊可視需要進行實體組合或分離。
一處理器可能會於一執行核心之中包含一或多個MMAD單元。舉例來說,在需要送出超純數指令的地方(也就是,每個循環送出一個以上的指令),便可設計多個MMAD單元,且不同的MMAD單元可支援不同的功能組合。一處理器可能還會包含多個執行核心,且每個核心均可具有自
己的MMAD單元。
另外,雖然本文已經針對圖形處理器來說明本發明,不過,熟習本技術的人士將會瞭解,本發明亦可運用在其它處理器中,如數學協同處理器、、向量處理器、或是一般用途的處理器。
因此,雖然本文僅針對特定的實施例來說明本發明,不過,吾人將會發現,本發明涵蓋落在申請專利範圍之範疇內的所有修正與均等物。
100‧‧‧電腦系統
102‧‧‧中央處理單元
104‧‧‧系統記憶體
106‧‧‧系統匯流排
108‧‧‧使用者輸入裝置
110‧‧‧顯示裝置
112‧‧‧圖形處理子系統
114‧‧‧圖形處理單元
116‧‧‧圖形記憶體
120‧‧‧描圖模組
122‧‧‧記憶體介面模組
124‧‧‧掃描輸出模組
126‧‧‧像素緩衝器
128‧‧‧系統碟
129‧‧‧抽取式儲存裝置
200‧‧‧執行核心
202‧‧‧擷取與分派單元
204‧‧‧發送單元
220‧‧‧多用途之乘加法功能單元
222‧‧‧其它功能單元
224‧‧‧暫存器檔
226‧‧‧資料傳輸路徑
302‧‧‧浮點算術運算
304‧‧‧整數算術運算
306‧‧‧位元運算
308‧‧‧格式轉換運算
310‧‧‧fp32引數還原運算
400‧‧‧格式化方塊
402‧‧‧運算元輸入路徑
404‧‧‧運算元輸入路徑
406‧‧‧運算元輸入路徑
408‧‧‧運算碼路徑
410‧‧‧信號路徑
412‧‧‧信號路徑
413‧‧‧假數路徑
414‧‧‧乘法器方塊
415‧‧‧指數路徑
416‧‧‧前置乘法器方塊
417‧‧‧測試路徑
418‧‧‧後置乘法器方塊
419‧‧‧路徑
420‧‧‧對齊方塊
421‧‧‧路徑
422‧‧‧分數加總方塊
423‧‧‧正規化方塊
424‧‧‧指數乘積方塊
425‧‧‧路徑
426‧‧‧指數加總方塊
427‧‧‧路徑
428‧‧‧Rshift計數方塊
429‧‧‧路徑
430‧‧‧指數增額方塊
431‧‧‧路徑
432‧‧‧指數減額方塊
433‧‧‧路徑
434‧‧‧位元式邏輯方塊
435‧‧‧路徑
436‧‧‧比較邏輯方塊
437‧‧‧路徑
438‧‧‧特殊數值偵測電路
439‧‧‧路徑
440‧‧‧輸出控制方塊
441‧‧‧路徑
442‧‧‧控制方塊
443‧‧‧路徑
444‧‧‧I2F位元組電路
504‧‧‧八位位元向上轉換器
505‧‧‧八位位元向上轉換器
506‧‧‧八位位元向上轉換器
508‧‧‧16位位元向上轉換器
509‧‧‧16位位元向上轉換器
510‧‧‧16位位元向上轉換器
512‧‧‧fp16向上轉換器
514‧‧‧選擇多工器
515‧‧‧選擇多工器
516‧‧‧選擇多工器
518‧‧‧條件式反向器電路
519‧‧‧條件式反向器電路
520‧‧‧條件式反向器電路
612‧‧‧3X加法器
614‧‧‧Booth3編碼器
616‧‧‧選擇多工器
618‧‧‧暫存器
620‧‧‧暫存器
622‧‧‧第一加法器電路
624‧‧‧第二加法器電路
626‧‧‧偏移量暫存器
628‧‧‧選擇多工器
630‧‧‧AND2電路
632‧‧‧OR2電路
634‧‧‧XOR2電路
635‧‧‧條件式反向器
636‧‧‧選擇多工器
700‧‧‧乘法器樹
704‧‧‧Booth多工器
706‧‧‧(3:2)進位-保留加法器
708‧‧‧(3:2)進位-保留加法器
710‧‧‧(4:2)進位-保留加法器
711‧‧‧選擇多工器
713‧‧‧選擇多工器
714‧‧‧差值電路
715‧‧‧路徑
716‧‧‧選擇多工器
717‧‧‧路徑
718‧‧‧居先編碼器
721‧‧‧路徑
723‧‧‧路徑
725‧‧‧路徑
804‧‧‧中間乘積加法器
805‧‧‧路徑
808‧‧‧殘餘位元邏輯
810‧‧‧整數多工器
812‧‧‧輸入選擇多工器
814‧‧‧輸出選擇多工器
816‧‧‧暫存器
817‧‧‧旁通路徑
820‧‧‧AB記號電路
821‧‧‧路徑
822‧‧‧二元式測試邏輯單元
824‧‧‧選擇多工器
825‧‧‧路徑
827‧‧‧路徑
904‧‧‧小交換多工器
906‧‧‧大交換多工器
908‧‧‧小運算元路徑
909‧‧‧大運算元路徑
910‧‧‧路徑
911‧‧‧路徑
912‧‧‧右移電路
914‧‧‧殘餘位元邏輯
915‧‧‧路徑
916‧‧‧位移多工器
918‧‧‧條件式反向器
920‧‧‧條件式零電路
922‧‧‧位移多工器
1002‧‧‧加1加法器
1004‧‧‧AND2電路
1006‧‧‧反向器
1008‧‧‧捨入邏輯單元
1010‧‧‧選擇多工器
1011‧‧‧路徑
1108‧‧‧居先編碼器
1110‧‧‧位移控制電路
1112‧‧‧左移電路
1210‧‧‧格式化方塊
1212‧‧‧選擇多工器
1214‧‧‧最終結果選擇邏輯
1216‧‧‧指數飽和邏輯
1218‧‧‧條件碼電路
圖1所示的係一根據本發明一實施例之電腦系統的方塊圖;圖2所示的係一根據本發明一實施例之執行核心一部份的方塊圖;圖3所示的係一份運算清單,可在根據本發明一實施例的多用途之乘加法(MMAD)單元中來執行;圖4所示的係一根據本發明一實施例之多用途之乘加法(MMAD)單元的方塊圖;圖5所示的係圖4之多用途之乘加法(MMAD)單元的運算元格式化方塊的方塊圖;圖6A所示的係圖4之多用途之乘加法(MMAD)單元的前置乘法器方塊的方塊圖;圖6B所示的係圖4之多用途之乘加法(MMAD)單元的指數乘積方塊的方塊圖;
圖6C所示的係圖4之多用途之乘加法(MMAD)單元的位元式邏輯方塊的方塊圖;圖7A所示的係圖4之多用途之乘加法(MMAD)單元的乘法器方塊的方塊圖;圖7B所示的係圖4之多用途之乘加法(MMAD)單元的指數加總方塊的方塊圖;圖8A所示的係圖4之多用途之乘加法(MMAD)單元的後置乘法器方塊的方塊圖;圖8B所示的係圖4之多用途之乘加法(MMAD)單元的比較邏輯方塊的方塊圖;圖9所示的係圖4之多用途之乘加法(MMAD)單元的對齊方塊的方塊圖;圖10所示的係圖4之多用途之乘加法(MMAD)單元的分數加總方塊的方塊圖;圖11所示的係圖4之多用途之乘加法(MMAD)單元的正規化方塊的方塊圖;以及圖12所示的係圖4之多用途之乘加法(MMAD)單元的輸出控制方塊的方塊圖。
220‧‧‧多用途之乘加法功能單元
400‧‧‧格式化方塊
402‧‧‧運算元輸入路徑
404‧‧‧運算元輸入路徑
406‧‧‧運算元輸入路徑
408‧‧‧運算碼路徑
410‧‧‧信號路徑
412‧‧‧信號路徑
413‧‧‧假數路徑
414‧‧‧乘法器方塊
415‧‧‧指數路徑
416‧‧‧前置乘法器方塊
417‧‧‧測試路徑
418‧‧‧後置乘法器方塊
419‧‧‧路徑
420‧‧‧對齊方塊
421‧‧‧路徑
422‧‧‧分數加總方塊
423‧‧‧正規化方塊
424‧‧‧指數乘積方塊
425‧‧‧路徑
426‧‧‧指數加總方塊
427‧‧‧路徑
428‧‧‧Rshift計數方塊
429‧‧‧路徑
430‧‧‧指數增額方塊
431‧‧‧路徑
432‧‧‧指數減額方塊
433‧‧‧路徑
434‧‧‧位元式邏輯方塊
435‧‧‧路徑
436‧‧‧比較邏輯方塊
437‧‧‧路徑
438‧‧‧特殊數值偵測電路
439‧‧‧路徑
440‧‧‧輸出控制方塊
441‧‧‧路徑
442‧‧‧控制方塊
443‧‧‧路徑
444‧‧‧I2F位元組電路
715‧‧‧路徑
717‧‧‧路徑
723‧‧‧路徑
725‧‧‧路徑
821‧‧‧路徑
825‧‧‧路徑
827‧‧‧路徑
909‧‧‧大運算元路徑
911‧‧‧路徑
915‧‧‧路徑
1011‧‧‧路徑
Claims (19)
- 一種用於一處理器的多用途之功能單元,其包括:一輸入部,其被配置成用以接收第一運算元、第二運算元、以及第三運算元,並且接收一運算碼,指定欲實施的複數種受支援的運算中其中一種,而且該輸入部還會被進一步配置成用以響應該運算碼來產生複數個控制信號;一乘法管線,其被耦接至該輸入部並且響應該等控制信號可被配置成用以計算該等第一與第二運算元的乘積,並且選擇所算出的乘積作為第一中間結果;一測試管線,其被耦接至該輸入部並且響應該等控制信號可被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行比較運算,並且選擇該比較結果作為第二中間結果;一加法管線,其被耦接至該乘法部與該測試管線並且響應該等控制信號可被配置成用以計算該等第一與第二中間結果的總合,並且選擇該經算出的總合作為運算結果;一指數管線,其被耦接至該輸入部並且響應該等控制信號可被配置成用以對該等第一運算元、第二運算元、以及第三運算元中其中一或多者進行指數計算,並且選擇該指數計算的結果作為指數結果;以及一輸出部,其被耦接用以接收該運算結果與該指數結果,並且響應該等控制信號被配置成用以為該運算碼所指定的該等受支援的運算中其中一者產生一最終結果,其中,該等複數個受支援的運算包含:浮點乘加法 (FMAD)運算、整數乘加法(IMAD)運算、以及至少一種比較測試運算。
- 如申請專利範圍第1項之多用途之功能單元,其中該加法管線響應該等控制信號可進一步被配置,俾使在該運算碼指定比較測試運算時於相加該等第一與第二中間結果之前先利用零值來取代該第一中間結果。
- 如申請專利範圍第1項之多用途之功能單元,其中該至少一種比較測試運算包含選自由下面所組成之群中其中一或多種運算:最大值(MAX)運算、最小值(MIN)運算、以及三元式比較(CMP)運算。
- 如申請專利範圍第3項之多用途之功能單元,其中該至少一種比較測試運算包含該最大值(MAX)運算、該最小值(MIN)運算、以及該比較(CMP)運算,且其中該測試管線響應該等控制信號可進一步被配置,俾使:當該運算碼指定的係該最大值(MAX)運算時,該第二中間結果對應的便係該等第一運算元與第二運算元中較大者;當該運算碼指定的係該最小值(MIN)運算時,該第二中間結果對應的便係該等第一運算元與第二運算元中較小者;以及當該運算碼指定的係該比較(CMP)運算時,當該第三運算元小於零時,該第二中間結果對應的便係該第二運算元,否則對應的便係該第一運算元。
- 如申請專利範圍第1項之多用途之功能單元,其中該 至少一種比較測試運算包含選自由下面所組成之群中其中一或多種二元式測試(SET)運算:大於運算、小於運算、等於運算、以及無序運算,其中該等一或多種二元式測試運算中每一者均會產生一布林結果。
- 如申請專利範圍第5項之多用途之功能單元,其進一步包括:一附屬結果路徑,被耦接在該測試管線與該輸出部之間,且會被配置成用以將一布林附屬結果從該測試管線傳送至該輸出部,其中,該輸出部則響應該等控制信號可進一步被配置成當該運算碼指定的係該等測試(SET)運算中其中一者時用以依據該布林附屬結果以產生最終的結果。
- 如申請專利範圍第1項之多用途之功能單元,其中該等複數個受支援的運算進一步包括位元式布林邏輯運算。
- 如申請專利範圍第7項之多用途之功能單元,其中該位元式布林邏輯運算係選自由下面所組成的群之中:AND運算、OR運算、以及XOR運算,且其中該測試管線包含:一AND電路,其被配置成用以產生該等第一運算元與第二運算元的位元式邏輯AND作為第一輸出;一OR電路,其被配置成用以產生該等第一運算元與第二運算元的位元式邏輯OR作為第二輸出;一XOR電路,其被配置成用以產生該等第一運算元與第二運算元的位元式邏輯XOR作為第三輸出;以及一選擇電路,其響應該等控制信號可被配置,俾使當 該運算碼指定的係該等AND運算、OR運算、以及XOR運算中其中一者時,該第二中間結果便係前述第一輸出、第二輸出、以及第三輸出中相對應的其中一者。
- 如申請專利範圍第1項之多用途之功能單元,其中該等複數個受支援的運算進一步包括浮點加法(FADD)運算以及整數加法(IADD)運算,其中該加法管線響應該等控制信號可進一步被配置成用以實施該FADD運算與該IADD運算。
- 如申請專利範圍第9項之多用途之功能單元,其中該乘法管線響應該等控制信號可進一步被配置,俾使當該運算碼指定的係該FADD運算或IADD運算時,該第一運算元便會被選為該第一中間結果。
- 如申請專利範圍第1項之多用途之功能單元,其中該等複數個受支援的運算進一步包括浮點乘法(FMUL)運算以及整數乘法(IMUL)運算,其中該乘法管線響應該等控制信號可進一步被配置成用以實施該FMUL運算與該IMUL運算。
- 如申請專利範圍第11項之多用途之功能單元,其中該加法管線響應該等控制信號可進一步被配置,俾使當該運算碼指定的係該FMUL運算或IMUL運算時,會在相加該等第一中間結果與第二中間結果之前先利用零值來取代該第二中間結果。
- 如申請專利範圍第1項之多用途之功能單元,其中該等複數個受支援的運算進一步包括格式轉換運算,將第 一運算元從輸入格式轉換成目標格式。
- 如申請專利範圍第1項之多用途之功能單元,其中該等複數個受支援的運算進一步包括區域映對(PRO)運算。
- 如申請專利範圍第14項之多用途之功能單元,其中該PRO運算會縮減於計算三角函數中使用的第一運算元。
- 如申請專利範圍第14項之多用途之功能單元,其中該PRO運算會縮減於計算指數函數中使用的第一運算元。
- 如申請專利範圍第1項之多用途之功能單元,其中該等複數個受支援的運算進一步包括分數(FRC)運算,其傳回該第一運算元的分數部。
- 如申請專利範圍第1項之多用途之功能單元,其中該加法管線包括:一對齊電路,其響應該等控制信號可被配置成用以在該運算碼指定的係該FMAD運算時,依據來自該指數管線的對齊信號來右移該等第一中間結果與第二中間結果中其中一者;以及一正規化電路,其響應該等控制信號可被配置成用以在該運算碼指定的係該FMAD運算時,來左移該等第一中間結果與第二中間結果的總合。
- 如申請專利範圍第18項之多用途之功能單元,其中該等複數個受支援的運算進一步包括左移運算(SHL)與右移運算(SHR),分別用來左移與右移該第一運算元,且其中:當該運算碼指定的係該SHL運算時,該正規化電路應用左移;以及 當該運算碼指定的係該SHR運算時,該對齊電路應用右移。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/985,695 US7240184B2 (en) | 2004-11-10 | 2004-11-10 | Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations |
US10/986,531 US20060101244A1 (en) | 2004-11-10 | 2004-11-10 | Multipurpose functional unit with combined integer and floating-point multiply-add pipeline |
US10/985,674 US7428566B2 (en) | 2004-11-10 | 2004-11-10 | Multipurpose functional unit with multiply-add and format conversion pipeline |
US10/985,291 US7225323B2 (en) | 2004-11-10 | 2004-11-10 | Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines |
Publications (1)
Publication Number | Publication Date |
---|---|
TWI389028B true TWI389028B (zh) | 2013-03-11 |
Family
ID=36337229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW094139409A TWI389028B (zh) | 2004-11-10 | 2005-11-10 | 多用途之乘加法功能單元 |
Country Status (4)
Country | Link |
---|---|
JP (1) | JP4891252B2 (zh) |
KR (1) | KR100911786B1 (zh) |
TW (1) | TWI389028B (zh) |
WO (1) | WO2006053173A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI755936B (zh) * | 2020-01-14 | 2022-02-21 | 新唐科技股份有限公司 | 安全積體電路及其方法 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8106914B2 (en) * | 2007-12-07 | 2012-01-31 | Nvidia Corporation | Fused multiply-add functional unit |
JP5367552B2 (ja) | 2009-12-15 | 2013-12-11 | 株式会社東芝 | 画像処理装置および画像処理プログラム |
US8667042B2 (en) * | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
GB2484654B (en) | 2010-10-12 | 2013-10-09 | Advanced Risc Mach Ltd | Conditional selection of data elements |
KR101735677B1 (ko) | 2010-11-17 | 2017-05-16 | 삼성전자주식회사 | 부동 소수점의 복합 연산장치 및 그 연산방법 |
DE102013212840B4 (de) * | 2013-07-02 | 2022-07-07 | Robert Bosch Gmbh | Modellberechnungseinheit und Steuergerät zur Berechnung eines datenbasierten Funktionsmodells mit Daten in verschiedenen Zahlenformaten |
DE102013224694A1 (de) * | 2013-12-03 | 2015-06-03 | Robert Bosch Gmbh | Verfahren und Vorrichtung zum Ermitteln eines Gradienten eines datenbasierten Funktionsmodells |
US9875084B2 (en) * | 2016-04-28 | 2018-01-23 | Vivante Corporation | Calculating trigonometric functions using a four input dot product circuit |
CN114968175B (zh) * | 2022-06-06 | 2023-03-07 | 湖南毂梁微电子有限公司 | 一种用于智能计算加速的可配置移位加法融合单元 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0480867A (ja) * | 1990-07-23 | 1992-03-13 | Mitsubishi Electric Corp | 演算回路 |
JP3790307B2 (ja) * | 1996-10-16 | 2006-06-28 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
JPH10207863A (ja) * | 1997-01-21 | 1998-08-07 | Toshiba Corp | 演算処理装置 |
JPH1173409A (ja) * | 1997-08-29 | 1999-03-16 | Matsushita Electric Ind Co Ltd | 積和演算装置および積和演算方法 |
JP3600026B2 (ja) * | 1998-08-12 | 2004-12-08 | 株式会社東芝 | 浮動小数点演算器 |
US6480872B1 (en) * | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
-
2005
- 2005-11-09 WO PCT/US2005/040852 patent/WO2006053173A2/en active Application Filing
- 2005-11-09 JP JP2007541334A patent/JP4891252B2/ja active Active
- 2005-11-09 KR KR1020077012628A patent/KR100911786B1/ko active IP Right Grant
- 2005-11-10 TW TW094139409A patent/TWI389028B/zh active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI755936B (zh) * | 2020-01-14 | 2022-02-21 | 新唐科技股份有限公司 | 安全積體電路及其方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2006053173A2 (en) | 2006-05-18 |
WO2006053173A3 (en) | 2007-05-10 |
KR20070085755A (ko) | 2007-08-27 |
JP4891252B2 (ja) | 2012-03-07 |
KR100911786B1 (ko) | 2009-08-12 |
JP2008520048A (ja) | 2008-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI389028B (zh) | 多用途之乘加法功能單元 | |
TWI402766B (zh) | 繪圖處理器 | |
US7225323B2 (en) | Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines | |
US7428566B2 (en) | Multipurpose functional unit with multiply-add and format conversion pipeline | |
KR102447636B1 (ko) | 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법 | |
US8037119B1 (en) | Multipurpose functional unit with single-precision and double-precision operations | |
US7216138B2 (en) | Method and apparatus for floating point operations and format conversion operations | |
US7395298B2 (en) | Method and apparatus for performing multiply-add operations on packed data | |
US6263426B1 (en) | Conversion from packed floating point data to packed 8-bit integer data in different architectural registers | |
US6266769B1 (en) | Conversion between packed floating point data and packed 32-bit integer data in different architectural registers | |
US8051123B1 (en) | Multipurpose functional unit with double-precision and filtering operations | |
US20040073589A1 (en) | Method and apparatus for performing multiply-add operations on packed byte data | |
US20110072066A1 (en) | Apparatus and method for performing fused multiply add floating point operation | |
US6292815B1 (en) | Data conversion between floating point packed format and integer scalar format | |
JP2006107463A (ja) | パック・データの乗加算演算を実行する装置 | |
US7640285B1 (en) | Multipurpose arithmetic functional unit | |
US6675286B1 (en) | Multimedia instruction set for wide data paths | |
US8463837B2 (en) | Method and apparatus for efficient bi-linear interpolation and motion compensation | |
US20050228844A1 (en) | Fast operand formatting for a high performance multiply-add floating point-unit | |
US8190669B1 (en) | Multipurpose arithmetic functional unit | |
GB2265741A (en) | Computation of sticky-bit in parallel with multiplication | |
GB2549153B (en) | Apparatus and method for supporting a conversion instruction | |
US7240184B2 (en) | Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations | |
KR101073343B1 (ko) | 개선된 감소 트리 회로를 갖는 부스 곱셈기 | |
CN107315710B (zh) | 全精度及部分精度数值的计算方法及装置 |