TWI696947B - 乘積累加裝置及其方法 - Google Patents
乘積累加裝置及其方法 Download PDFInfo
- Publication number
- TWI696947B TWI696947B TW108134852A TW108134852A TWI696947B TW I696947 B TWI696947 B TW I696947B TW 108134852 A TW108134852 A TW 108134852A TW 108134852 A TW108134852 A TW 108134852A TW I696947 B TWI696947 B TW I696947B
- Authority
- TW
- Taiwan
- Prior art keywords
- result
- row
- product
- value
- height
- Prior art date
Links
Images
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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- 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/544—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 for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- 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/50—Adding; Subtracting
- G06F7/501—Half or full adders, i.e. basic adder cells for one denomination
- G06F7/502—Half adders; Full adders consisting of two cascaded half adders
-
- 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/3001—Arithmetic instructions
-
- 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/30098—Register arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
一種乘積累加裝置及其方法。乘積累加裝置包括乘積產生器、多個寄存器、乘積化簡器以及加法器。乘積產生器對被乘數與乘數進行乘積運算,以產生2N-1行的乘積結果。乘積化簡器用以將多個寄存器中的部分寄存器的資料附加於乘積結果中的各行,以產生2N-1行的附加結果。乘積化簡器並依據附加結果中各行的行高,來對附加結果進行化簡運算,以得到化簡後結果。以及,乘積化簡器依據化簡後結果來更新該些寄存器中的資料。加法器依據累加信號以對多個寄存器中的資料進行累加運算,以產生乘法累加運算結果。
Description
本發明是有關於一種乘積累加裝置及其方法,且特別是有關於一種經簡化的乘積累加裝置及其方法。
乘積累加運算(Multiply Accumulate,MAC)在多種數位訊號處理的應用中,扮演著非常重要的角色。舉例來說,在影音處理、影片處理、圖像處理以及深度學習(deep learning)個各種應用中,都需要大量的乘法累加運算。乘積累加裝置用以執行乘積累加運算。現有的乘積累加裝置的乘法器與累加器是兩個分別的硬體區塊。乘積累加裝置透過將乘積結果和累加器的值相加後,再將相加結果存入累加器,以產生乘積累加結果。並且,增加乘積累加裝置的運算速度並減少整體電路的功耗一直是本發明所屬技術領域之人員所追求的目標。
本發明提供一種乘積累加裝置及其方法,可以在乘積化
簡的過程中一併進行累加運算,以增加乘積累加裝置的運算速度並減少整體電路的功耗。
本發明的乘積累加裝置包括乘積產生器、多個寄存器、乘積化簡器以及加法器。乘積產生器用以接收N個位元的被乘數與N個位元的乘數,並對被乘數與乘數進行乘積運算,以產生2N-1行的乘積結果。其中N為正整數。乘積化簡器耦接乘積產生器以及多個寄存器。乘積化簡器用以將多個寄存器中的部分寄存器的資料附加於乘積結果的各行,以產生2N-1行的附加結果。乘積化簡器並依據附加結果中各行的行高,來對附加結果進行化簡運算,以得到化簡後結果。以及,乘積化簡器依據化簡後結果來更新多個寄存器中的資料。加法器用以依據累加信號以對多個寄存器中的資料進行累加運算,以產生乘法累加運算結果。
本發明的乘積累加方法包括:接收N個位元的被乘數與N個位元的乘數,並對被乘數與乘數進行乘積運算,以產生2N-1行的乘積結果;將多個資料中的部分資料附加於乘積結果的各行,以產生2N-1行的附加結果;依據附加結果中各行的行高,來對附加結果進行化簡運算,以得到化簡後結果;依據化簡後結果來更新前述多個資料;以及依據累加信號以對前述多個資料進行累加運算,以產生乘法累加運算結果。其中N為正整數。
基於上述,本發明透過將多個寄存器中的資料與乘積結果一起進行化簡,使裝置可以在進行化簡階段同時進行乘積運算與累加運算,因而可以降低累加運算中對於加法運算的需求,並提
高整體電路的效能。因此,本發明可以減少運算時間,達到快速且低功耗的效果。
為讓本發明的上述特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明如下。
100:乘積累加裝置
110:乘積產生器
111、112、120~124、160:寄存器
130:乘積化簡器
140、150:加法器
400、500、600、800、800’:乘積結果
501~504:子乘積結果
510、610、901、907:附加結果
520、620、902、908:第一次化簡結果
530、630、903、909:第二次化簡結果
540、640、904、910:第三次化簡結果
550、650、906、912:化簡後相加結果
905、911:第四化簡結果
c1~c7:行
dh:期望高度值
e1:延伸結果
e2、e4:資料
I1:被乘數
I2:乘數
O:輸出
R、R1~R15、R’:區域
r1~r4:列
S:累加信號
S210~S250、S301~S316:步驟
圖1繪示為本發明的乘積累加裝置的示意圖。
圖2繪示為本發明的乘積累加方法的步驟流程圖。
圖3繪示為本發明的化簡運算的步驟流程圖。
圖4是本發明針對無號數的乘積運算的示意圖。
圖5A至圖5L是13*13的乘積運算以及化簡運算的示意圖。
圖6是12*15的乘積運算以及化簡運算的示意圖。
圖7繪示出13*13與12*15的相加過程示意圖。
圖8A與圖8B是針對有號數的乘積運算的示意圖。
圖9是7*7+7*(-1)的乘積運算以及化簡運算的示意圖。
圖1繪示為本發明的乘積累加裝置的示意圖。請參照圖1,乘積累加裝置100包括乘積產生器110、多個寄存器120、乘積化簡器130以及加法器140。
N位元的被乘數I1與N位元乘數I2分別儲存在寄存器
111與112中。乘積產生器110可以對被乘數I1與乘數I2進行乘積運算,以產生2N-1行的乘積結果。其中N為正整數。在本實施例中,N為4。也就是說,乘積產生器110可以做4*4的運算,以產生7行的乘積結果,並且乘積結果中各行的行高不一。
在本實施例中,多個寄存器120的數量可以為4,分別為寄存器121~124。寄存器121~124用以分別儲存2N-1個位元、K個位元、1個位元以及α個位元的資料(位元值預設為0),其中K與α可分別為3與2。在其他實施例中,多個寄存器120可以包含其他數量或是不同資料大小的寄存器,本發明並不限制寄存器的數量及其所包含的資料的大小。
乘積化簡器130耦接乘積產生器110、寄存器121~124以及加法器150。乘積化簡器130用以將寄存器121~123的資料附加於乘積結果的各行,以產生2N-1行的附加結果。具體來說,寄存器121~124可分別儲存2N-1個位元、k個位元、1個位元以及2個位元的資料,並且資料的預設值為0。乘積化簡器130並依據附加結果中各行的行高,來對附加結果進行化簡運算,以得到化簡後結果。乘積化簡器130並依據化簡後結果來更新寄存器121~124中的資料。最後,加法器140受累加信號S控制以對寄存器121~124中的資料進行累加運算,以產生乘法累加運算結果並將其儲存於寄存器160以做為輸出O。其中寄存器160可以儲存2N+α-1個位元的資料。
本實施例可以使用閘控制技術(gating technique)以使累
加信號S可以在最後的累加階段改變邏輯電位(例如從低邏輯電位改變為高邏輯電位),以計算乘積累加運算結果。具體來說,閘控制技術可以訊號閘控制技術(signal gating technique)、時鐘閘控制技術(clock gating technique)或電源閘控制技術(power gating technique)來實現。例如,可以使用及閘(AND)來進行閘控制。閘控制技術為本領域中具有通常知識者所熟知,故在此不贅述。
圖2繪示為本發明的乘積累加方法的步驟流程圖。本發明的乘積產生器110是使用Baugh-Wooley演算法來計算乘積結果。請同時參照圖1與圖2,在步驟S210中,乘積產生器110可以對N個位元的被乘數與N個位元的乘數進行乘積運算,以產生2N-1行的乘積結果。其中N為正整數。在步驟S220中,將多個寄存器121~123中的資料附加於乘積結果的各行,以產生2N-1行的附加結果。在步驟S230中,依據附加結果中各行的行高,來對附加結果進行化簡運算,以得到化簡後結果。在步驟S240中,依據化簡後結果來更新寄存器121~124中的資料。最後,在步驟S250中,依據累加信號S以對寄存器121~124中的資料進行累加運算,以產生一乘法累加運算結果。下面以較為具體的方式來進一步說明步驟S230的化簡運算細節。
圖3繪示為本發明的化簡運算的步驟流程圖。本實施例以Dadda Tree化簡演算法來計算化簡結果。請參照圖1與圖3,步驟S310表示化簡運算開始。在步驟S310之前,乘積化簡器130已依據乘積結果產生附加結果。乘積化簡器130依據公式(1)與公
式(2)算得最大高度序列(maximum-height sequence),最大高度序列包含多個最大高度d1~dj,其中j為整數。其中d1的值預設為2。在公式(1)與公式(2)中,「floor」表示取整函數,「min」表示最小數,n1與n2分別表示被乘數I1與乘數I2的位元數量。
d j+1=floor(1.5d j ) 公式(1)
d j ≦min(n 1 ,n 2 ) 公式(2)
在步驟S302中,乘積化簡器130從對大高度序列中選擇dj做為期望高度值。在步驟S303中,判斷附加結果中第i行的行高h是否小於或等於期望高度值dj,其中i為正整數並預設為1。當步驟S303的判斷結果為是時,進行步驟S304。在步驟S304中,乘積化簡器130將附加結果中第i行的所有位元值做為化簡結果的第i行的位元值。也就是說,乘積化簡器130不對第i行進行任何化簡。當第i行不是附加結果中的最高行時(步驟S312),即i不是最大值時,以i+1取代i(步驟S315),並回到步驟S303以繼續化簡運算。當第i行是附加結果中的最高行但是j不為1時(步驟S312),以j-1取代j,並回到步驟S303以繼續化簡運算。當第i行已是附加結果中的最高行時(步驟S312),並且j為1時(步驟S313),結束化簡運算。
當步驟S303的判斷結果為否時,進入步驟S305。在步驟S305中,進一步判斷行高h是否等於期望高度值dj+1。若判斷結果為否(表示行高h大於期望高度值dj+1),則進到步驟S306。在步驟S306中,對第一至第三位元進行全加運算。以及,將運算
結果中的累加位元放至化簡結果的第i行,並將進位元放至化簡結果的第i+1行(步驟S307)。在步驟S308中,以行高h減2的值來取代行高,並回到步驟S305以重複步驟S304~S308,直到行高h等於期望高度值dj加1的值時,進到步驟S309。
在步驟309中,對第一與第二位元進行半加運算。以及,將運算結果中的累加位元放至化簡結果的第i行,並將進位元放至化簡結果的第i+1行(步驟S310)。在步驟S311中,將第i行中未化簡的位元放至化簡結果的第i行。類似地,當第i行不是附加結果中的最高行時(步驟S312),以i+1取代i(步驟S315),並回到步驟S303以繼續化簡運算。當第i行是附加結果中的最高行但是j不為1時(步驟S312),以j-1取代j,並回到步驟S303以繼續化簡運算。當第i行已是附加結果中的最高行時(步驟S312),並且j為1時(步驟S313),結束化簡運算。簡單來說,乘積化簡器130可以對附加結果進行至少一次化簡運算,以使最後一次化簡運算的化簡結果的各行的行高為小於或等於2。下面以(13*13)+(12*15)為例來說明乘積累加運算的運算過程。
在一實施例中,對無號數(unsigned)進行乘積累加運算。首先需進行乘積運算。圖4是本發明針對無號數的乘積運算的示意圖。請同時參照圖1與圖4,乘積產生器110可以對被乘數I1中的多個子被乘數a0~a3以及乘數I2中的多個子乘數b0~b3進行乘積運算,以產生乘積結果400,其中乘積結果400包含行c1~c7。
圖5是13*13的乘積運算以及化簡運算的示意圖。在本
實施例中,乘積產生器110可以透過多個及閘(圖未示)對被乘數I1中的多個子被乘數a0~a3以及乘數I2中的多個子乘數b0~b3進行乘積運算,以產生多個運算結果a0b0~a3b3。其中,13以二進制(binary)表示為1101。
請同時參照圖1與圖5A,首先,寄存器111與112可以分別接收4位元的被乘數I1與乘數I2,其中被乘數I1與乘數I2都是1101。乘積產生器110可以對寄存器111與112中的資料進行乘積運算,即1101*1101,以產生乘積結果500。乘積結果500包含4組的子乘積結果501~504,其中子乘積結果501對應圖2的a0b0~a3b0,子乘積結果502對應a0b1~a3b1,子乘積結果503對應a0b2~a3b2,子乘積結果504對應a0b3~a3b3。
為了方便說明後續的計算過程,在此將4組子乘積結果501~504依序錯開,以使乘積結果500於各行c1~c7的行高不一致。並且,將乘積結果500中各組子乘積結果502~504向上遞補至列r1(如圖5B所示)。需說明的是,這僅僅是為了方便說明後續的計算過程而改變乘積結果500的呈現方式,並不代表乘積產生器110會對乘積結果500進行實際的錯開以及遞補的動作。以硬體的角度來看,乘積產生器110可以只是單純地將乘積結果500儲存在多個特定的寄存器中。
乘積化簡器130的功用在於化簡乘積結果500。首先,乘積化簡器130可以將寄存器121~123中的資料附加在乘積結果500中的各行,以產生附加結果510。請見圖5C,粗體的部分代表寄
存器121~123中的資料值。寄存器121~123分別儲存2N-1個位元、K個位元以及1個位元的資料,其中K為正整數。在本實施例中,本實施例中,K為3,並且寄存器121~123中的資料值預設為0。
在本實施例中,乘積化簡器130可以依據公式(1)可以得到多個最大高度d1~dj,分別為1、3、4、6、9、...。乘積化簡器130可以依據公式(2)可以得到多個最大高度d1~d4,分別為1、3以及4。乘積化簡器130可以從多個最大高度d1~d4之中選出一個做為化簡運算中的期望高度值(desired high),並使經化簡後的附加結果510中各行的行高符合前述期望高度值。
具體來說,在第一次的化簡運算中,乘積化簡器130選擇最大高度d4(值為4)做為期望高度值dh。乘積化簡器130對於附加結果510中行高小於或等於期望高度值dh的行,不做任何化簡。附加結果510中各行的行高會有三種狀況:(1)行高小於或等於期望高度值dh,(2)行高等於期望高度值dh加1,以及(3)行高大於期望高度值dh加1。乘積化簡器130對於附加結果510中行高小於或等於期望高度值dh的行,不做任何化簡。乘積化簡器130對於附加結果510中行高等於期望高度值dh加1的行,以半加運算進行化簡。乘積化簡器130對於附加結果510中行高大於期望高度值dh加1的行,以全加運算進行化簡。在圖5中,以圓圈圈住兩個相鄰位元代表乘積化簡器130對上述兩個相鄰位元進行半加運算,以圓圈圈住三個相鄰位元代表乘積化簡器130對上
述三個相鄰位元進行全加運算。表(一)與表(二)分別為半加運算以及全加運算的真值表。
請同時參照圖5C與圖5D,附加結果510的行c1~c3的行高都小於或等於期望高度,因此乘積化簡器130直接延用附加結果510的行c1~c3做為第一次化簡結果520的行c1~c3(如圖5D所示)。附加結果510的行c4的行高為5,也就是行高等於期望高度值dh加1。因此,乘積化簡器130對附加結果510的行c4
的第一位元(1)與第二位元(0)進行半加運算,算得「01」。其中,「01」中的0被稱為進位元(carry bit),1被稱為累加位元(sum bit)。乘積化簡器130以累加位元(1)做為第一次化簡結果520的行c4的第一位元(如圖5D所示)。乘積化簡器130並將進位元(0)放置於第一次化簡結果520的行c5做為第一位元(如圖5D所示)。此時,由於附加結果510的行c4中的第一位元以及第二位元已被化簡並記做高度1,因此附加結果510的行c4的行高減為4。所以,乘積化簡器130直接延用附加結果510的行c4中未經化簡的位元分別做為第一次化簡結果520的行c4的第二位元、第三位元以及第四位元。
請同時參照圖5C與圖5E,附加結果510的行c5的行高由於計入進位元而增為7,也就是行高大於期望高度值dh加1。因此,乘積化簡器130對附加結果510的行c5的第一位元(0)、第二位元(1)以及第三位元(0)進行全加運算,算得「01」。乘積化簡器130以「01」中的累加位元(1)做為第一次化簡結果520的行c5的第二位元(如圖5E所示)。乘積化簡器130並將「01」中的進位元(0)放置於第一次化簡結果520的行c6做為第一位元(如圖5E所示)。此時,由於附加結果510的行c5中的第一位元、第二位元以及第三位元已被化簡並記做高度1,因此附加結果510的行c5的行高減為5,也就是行高等於期望高度值dh加1。因此,乘積化簡器130還需要繼續化簡附加結果510的行c5。
乘積化簡器130對附加結果510的行c5的第四位元(0)
與第五位元(0)進行半加運算,算得「00」。乘積化簡器130以累加位元(0)做為第一次化簡結果520的行c5的第三位元(如圖5F所示)。乘積化簡器130並將進位元(0)放置於第一次化簡結果520的行c6做為第二位元(如圖5F所示)。此時,由於附加結果510的行c5中的第四位元以及第五位元已被化簡(高度視為1),因此附加結果510的行c5的行高減為4。故乘積化簡器130直接延用附加結果510的行c5中未經化簡的位元做為第一次化簡結果520的行c5的第四位元(如圖5F所示)。
請同時參照圖5C與圖5G,附加結果510的行c6的行高由於兩個進位元的加入而增為6,也就是行高大於期望高度值dh加1。因此,乘積化簡器130對附加結果510的行c6的第一位元(1)、第二位元(1)以及第三位元(0)進行全加運算,算得「10」。乘積化簡器130以累加位元(0)做為第一次化簡結果520的行c6的第三位元(如圖5G所示)。乘積化簡器130並將進位元(1)放置於第一次化簡結果520的行c7做為第一位元(如圖5G所示)。此時,由於附加結果510的行c6中的第一位元、第二位元以及第三位元已被化簡並記做高度1,因此附加結果510的行c6的行高減為4,也就是行高等於期望高度值dh。因此,乘積化簡器130直接延用附加結果510的行c6中未經化簡的位元做為第一次化簡結果520的行c6的第四位元(如圖5G所示)。
請同時參照圖5C與圖5H,附加結果510的行c7的行高由於進位元的加入而增為4,也就是行高等於期望高度值dh。因
此,乘積化簡器130直接延用附加結果510的行c7中未經化簡的位元做為第一次化簡結果520的行c7的第二位元至第四位元(如圖5H所示)。至此,乘積化簡器130完成第一次化簡,並且第一次化簡結果520中各行的行高為小於或等於期望高度值dh(4)。由於後續的化簡運算的規則與第一次化簡運算相同,故下面將以較為簡潔的方式來說明後續的化簡運算。
接下來,乘積化簡器130以最大高度d2的值(3)做為期望高度值dh,並依據此期望高度值dh來對第一次化簡結果520進行第二次化簡。圖5I與圖5J分別繪示出第一次化簡結果520與第二次化簡結果530。
最後,乘積化簡器130以最大高度d1的值(2)做為期望高度值dh,並依據此期望高度值dh來對第二次化簡結果530進行第三次化簡,以得到各行行高為小於或等於2的第三次化簡結果540(請見圖5K)。圖5K繪示出第三次化簡結果540。其中,第三次化簡結果540中各行的行高皆等於2。需特別說明的是,為了避免產生不必要的進位,在本實施例的加法器150中,以互斥或閘(XOR)來處理乘積化簡結果中的最高位元的運算。然而在圖5K中,由於第三次化簡結果540的行c8在計入進位元後的行高等於2,因此乘積化簡器130不需要再對第三次化簡結果540的行c8進行化簡。
另外,本發明會再對第三次化簡結果540中部分的行進行加法運算,以減少需存取的位元的數量。請見圖5K,乘積化簡
器130將第三次化簡結果540中對應行c1~c4(即區域R)的列r1的位元值(1001)與區域R的列r2的位元值(0000)進行4位元的相加運算,以產生相加結果(01001)(請見圖5L)。其中,相加結果中的1001被稱為累加位元,相加結果中的0被稱為進位元。乘積化簡器130以此相加結果中的累加位元取代第三次化簡結果540的行c1~c4中第1個位元與第三次化簡結果540的行c1~c4中第2個位元,並將此相加結果中的進位元放置於行c5,以產生化簡後相加結果550(如圖5L所示)。其中,化簡後相加結果550中行c1~c4的行高皆為1,行c5的行高由於進位元的加入而增為3,行c6~c8的行高為2。
請見圖5L,乘積化簡器130分別以化簡後相加結果550中區域R1~R3的位元值來分別更新寄存器121~123的資料。其中,寄存器121存入0101001,寄存器122存入000,寄存器123存入0,寄存器124存入01。並且,乘積化簡器130依據化簡後相加結果550中區域R4的位元值產生對應值,並將前述對應值與寄存器124中的資料(初始值為00)所表示的十進位值(0)以加法器150進行相加,也就是0加1並以相加結果(1)的二進制值(01)來更新寄存器124中的資料。
具體來說,當區域R4的位元值為「00」時,對應值為0。當區域R4的位元值為「01」或「10」時,對應值為1。當區域R4的位元值為「11」時,對應值為2。在本實施例中,區域R4的位元值為「01」(對應值為1),因此相加結果為「1」。乘積化簡器130
可以將「1」轉換為2進制(01)並以此更新寄存器124中的資料。
乘積產生器110接著計算12*15,並產生乘積結果600(如圖6所示)。其中,12以二進制表示為1100,15以二進制表示為1111。圖6是12*15的乘積運算以及化簡運算的示意圖。請見圖6,乘積產生器110將更新後的寄存器121~123中的資料附加到12*15的乘積結果600的各行。圖6並繪示出附加結果610、第一次化簡結果620、第一次化簡結果630、第三次化簡結果640以及化簡後相加結果650。乘積結果600、附加結果610、第一次化簡結果620、第一次化簡結果630、第三次化簡結果640以及化簡後相加結果650的產生過程可以參考圖5中乘積結果500、附加結果510、第一次化簡結果520、第一次化簡結果530、第三次化簡結果540以及化簡後相加結果550的產生方式,故不再贅述。並且,乘積化簡器120以化簡後相加結果650中相應於區域R1~R3(如圖5L所示)的位元值更新寄存器121~123中的資料。
乘積化簡器130依據化簡後相加結果650中相應於區域R4(如圖5L所示)的位元值(01)產生對應值(1)。加法器150將前述對應值與寄存器124中的資料(已被更新為01)所表示的十進位值(1)相加,也就是1加1,並以相加結果(2)的二進制值(10)來更新寄存器124中的資料。加法器140受控於累加信號以將寄存器121~124中的資料進行相加,並產生13*13+12*15的運算的乘積累加結果(101011101)。
圖7繪示出13*13與12*15的相加過程示意圖。請同時
參照圖1與圖7,方框R’中的值相當於寄存器124中的位元值。加法器140可以對列r1~r3進行相加,並產生乘法累加運算結果(101011101,相當於10進制的349)。加法器140將此乘法累加運算結果儲存至寄存器160,此乘法累加運算結果從寄存器160中被提取以做為輸出O。
本發明的乘積累加裝置及其方法也可以對有號數(signed)進行乘積累加運算。有號數的乘法累加運算規則與無號數相似,兩者的差異僅在於乘積運算以及寄存器124中的資料的產生方式。以下將僅針對差異處進行詳細的說明。在本實施例中,有號數的正負號可以由二補數(2’s compliment)運算來產生。二補數是一種用二進位表示有號數的方法。其中正整數和0的二補數就是該數字本身。負數的二補數則是將其對應正整數按位元取反再加1。在本實施例中,-1對應的正整數是0001,取反後為1110,1110加1等於1111。因此,-1可表示為1111。
圖8是針對有號數的乘積運算的示意圖。一般來說,有號數的乘積運算可以以Baugh-Wooley演算法或是其他演算法來進行計算。相較於其他演算法,Baugh-Wooley演算法較規律且具有較短的關鍵路徑(critical path),因此本發明以Baugh-Wooley演算法來計算有號數的乘積運算,並可達到低功耗的效果。其中,圖8A表示以Baugh-Wooley演算法來計算有號數的乘積運算結果,圖8B則表示本發明的有號數的乘積運算結果,兩者略有差異。請參照圖8A,被乘數I1中的多個子被乘數a0~a3與乘數I2中的多個子乘數
b0~b3進行乘積運算,以產生乘積結果。與無號數的乘積運算不同的是,有號數的乘積運算需在乘積結果的行c5與c8補上1,以分別形成行c5的第一位元以及行c8的第一位元。並且,將乘積結果中的列c4的第一位元、行c4的第四位元、行c5的第二位元、行c5的第四位元、行c6的第一位元以及行c6的第二位元的位元值進行取反,以得到乘積結果800。
需特別說明的是,本發明的有號數運算並不完全相同於圖8A所示的運算方式。在此僅針對兩者的差異處進行說明。請同時參照圖1與圖8B,乘積產生器110不在乘積結果的行c5的第一位元補1,而是在行c5的第四位元補1(請見圖9的區域R5處),以得到乘積結果800’。因此行c5的第一位元至第四位元分別為a3b1的反向、a2b2、a1b3的反向以及1。並且,乘積產生器110不會對行c8補1。為了彌補這個原先應該有的補值動作(對行c8補1),乘積化簡器130在產生寄存器124中的資料的過程中進行反向運算,然而現在先不對乘積化簡器130的動作進行說明。
類似地,為了方便說明後續的計算過程,在此將乘積結果800’進行錯開以及遞補的動作。需說明的是,這僅僅是為了方便說明後續的計算過程而改變乘積結果300的呈現方式,並不代表乘積產生器110實際上會對乘積結果800’進行錯開以及遞補的動作。以硬體的角度來看,乘積產生器110可以只是單純地將乘積結果800’儲存在多個特定的寄存器(圖未示)。下面將以7*7+7*(-1)為例來說明乘積累加運算過程。
圖9是7*7+7*(-1)的乘積運算以及化簡運算的示意圖,其中粗體的部分代表寄存器121~123中的資料。在步驟1中,乘積產生器110產生7*7的運算結果。乘積化簡器130將寄存器121~123中的資料分別附加至前述運算結果的各行,以產生附加結果901。乘積化簡器130可以對附加結果901進行四次化簡,以分別產生第一化簡結果902、第二化簡結果903、第三化簡結果904以及第四化簡結果905。其中第四化簡結果905中各行的行高為2。乘積化簡器130並將第四化簡結果905的部分位元相加,以產生化簡後相加結果906。乘積化簡器130依據化簡後相加結果906中區域R6~R8中的位元值來分別更新寄存器121~123中的資料。
在加法器150中,以互斥或閘(XOR)來處理乘積化簡結果中的最高位元的運算。因此,在圖9中,步驟1的第三次以及第四次化簡結果904及905的行c8在計入進位元後的行高等於3,因此只需以互斥或閘(XOR)來對其中兩位元進行計算,使行c8的行高減少至2(如圖9所示)。
有號數的計算與無號數的計算的另一個差異點在於寄存器124中的資料的產生方式。在有號數的實施例中,乘積化簡器130對區域R9中的兩個位元值(1與0)進行相加後反向其和值(sum),以產生一位元數值(0)。乘積化簡器130對此一位元數值(0)進行有號數延伸(亦即將該數值最高位元視為正負號位元並進行正負號延伸),以產生延伸結果e1。詳細來說,區域R9中的兩個位元值進行相加後的和值可能為一個位元或兩個位元;當和
值為一個位元時,對此一個位元進行補數運算,當和值為兩個位元時,則對此兩個位元進行補數運算(其他實施例)。乘積化簡器130再將延伸結果e1與寄存器124中的資料e2(預設為00)進行相加,以依據相加結果(00)來更新寄存器124中的資料。
在步驟2中,乘積產生器110產生7*(-1)的運算結果。乘積化簡器130將寄存器121~123中的資料分別附加至前述運算結果的各行,以產生附加結果907。乘積化簡器130可以對附加結果907進行四次化簡,以分別產生第一化簡結果908、第二化簡結果909、第三化簡結果910以及第四化簡結果911。其中第四化簡結果911中各行的行高為2。乘積化簡器130並將第四化簡結果911的部分位元相加,以產生化簡後相加結果912。乘積化簡器130依據化簡後相加結果912中區域R6~R8中的位元值來分別更新寄存器121~123中的資料(分別對應區域R12~R14)。乘積化簡器130對區域R15中的兩個位元值(0與0)進行相加後反向其和值(sum),以產生一位元數值(1)。乘積化簡器130對此一位元數值(1)進行有號數延伸(亦即將該數值最高位元視為正負號位元並進行正負號延伸),以產生延伸結果e3。詳細來說,區域R14中的兩個位元值進行相加後的和值可能為一個位元或兩個位元;當和值為一個位元時,對此一個位元進行補數運算,當和值為兩個位元時,則對此兩個位元進行補數運算(其他實施例)。乘積化簡器130再將延伸結果e3與寄存器124中的資料e4(00)進行相加,以依據相加結果(11)來更新寄存器124中的資料(對應區域R15)。
在步驟3中,加法器140受控於累加信號以將寄存器121~124中的資料進行相加,並產生7*7+7*(-1)的運算的乘積累加結果(000101010,相當於10進制的42)。
由於本發明的乘積累加裝置及其方法可以將前一次的乘積化簡結果一併納入下次的乘積化簡運算中,並以N+a-1位元的加法器來進行最終的累加運算。因此,本發明可以減少乘積化簡運算以及最終的累加運算對於加法器的需求。現有的乘積累加裝置在乘積化簡運算中需要2N-1個位元的加法器,相較之下,本發明的乘積累加裝置在乘積化簡運算中僅需要N個位元的加法器。現有的乘積累加裝置在累加運算中需要2N+a-1個位元的加法器,相較之下,本發明的乘積累加裝置在累加運算中僅需要N+a-1個位元的加法器。其中N與a為正整數,並且a可由計算lgm來得到,而m表示乘積累加裝置需進行乘積運算的次數。下面將以實驗數據來佐證本發明可以減少運算時間以及減少功耗的功效。
本實驗使用C語言撰寫程式自動化生成Verilog檔。其中,Verilog是一種硬體描述語言(Hardware Description Language,HDL)。實驗用的乘積累加裝置的輸入位元數為8位元(即N=8),累加位元數α為8位元,而運算的循環(Cycle)數m為256(相當於28)次,累加運算僅在最後一次運算才進行。本實驗使用Cadence的NC-Verilog進行模擬驗證,以及使用Synopsys的Design Complier進行邏輯合成。本實驗的時鐘頻率(clock rate)設定為1GHz,而實驗所使用的製程為TSMC 40nm製程。
本實驗的目的在於將本發明的乘積累加裝置與現有的Synopsys DesignWare library所提供的乘積累加器進行比較。本實驗的結果如表(三)至表(七)所示。其中,表(三)表示不同的無號數乘積累加運算(16位元)的比較結果。表(四)表示不同的有號數乘積累加運算(16位元)的比較結果。表(五)表示不同的無號數乘積累加運算(8位元)的比較結果。表(六)表示不同的有號數乘積累加運算(8位元)的比較結果。表(七)表示無號數乘積累加運算的不同的PPR方法的比較結果。
其中,DM代表使用Dadda Tree的方法進行乘積化簡運算。CPA代表使用進位傳遞加法器(Carry Propagation Adder)進行累加運算。CLA代表使用進位預看加法器(Carry Lookahead Adder)進行累加。CSkA代表使用進位跳躍加法器(Carry Skip Adder)進行累加。CSelA代表使用進位選擇加法器(Carry Select Adder)進行累加。ours_16_17代表本發明的16位元乘積累加裝置是,並且寄存器122為17位元。ours_16_16、ours_16_15、...可以依此類推。
從表(三)至表(七)可以看出,相較於現有的乘積累加器,本發明的成績累加裝置的架構具有較小的電路面積(Area),並且可以降低乘積累加裝置的關鍵路徑(Critical Path)延遲以及功率消耗(Power)。
綜上所述,本發明透過將多個寄存器中的資料與乘積結果一起進行化簡,使裝置可以在進行化簡階段同時進行乘積運算與累加運算,因而可以降低累加運算中加法運算的需求,並提高整體電路的效能。因此,本發明可以減少運算時間,達到快速且低功耗的效果。另外,本發明的乘積累加裝置及其方法可適用於無號數以及有號數的乘積累加運算。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
100:乘積累加裝置
110:乘積產生器
111、112、120~124、160:寄存器
130:乘積化簡器
140、150:加法器
I1:被乘數
I2:乘數
O:輸出
S:累加信號
Claims (10)
- 一種乘積累加裝置,包括:一乘積產生器,用以接收N個位元的一被乘數與N個位元的一乘數,並對該被乘數與該乘數進行一乘積運算,以產生2N-1行的一乘積結果,其中N為正整數;多個寄存器;一乘積化簡器,耦接該乘積產生器以及該些寄存器,該乘積化簡器用以:將該些寄存器中的部分寄存器的資料附加於該乘積結果的各行,以產生2N-1行的一附加結果;依據該附加結果中各行的行高,來對該附加結果進行一化簡運算,其中該化簡運算用以對該附加結果中的行高進行化簡,以使該附加結果中各行的行高皆不大於一期望高度值,藉此得到一化簡後結果;以及依據該化簡後結果來更新該些寄存器中的資料;以及一第一加法器,依據一累加信號以對該些寄存器中的資料化簡進行一累加運算,以產生一乘積累加運算結果,其中該化簡運算還包括:當該附加結果中各行的行高皆不大於該期望高度值時,對該附加結果的第1行至第M行中第1列的位元值以及第2列的位元值進行一第一加法運算,並將該第一加法運算的結果中的進位元放至該附加結果的第M+1行,以產生該化簡後結果,其中M為小 於2N-1的正整數,其中該化簡後結果中第1行至第M行的行高皆為1,第M+1行的行高為3,並且其餘行的行高為2。
- 如申請專利範圍第1項所述的乘積累加裝置,其中該化簡運算包括:針對該附加結果中行高等於一臨界值的行中的相鄰的兩個位元進行一半加運算,並以該半加運算的運算結果取代該相鄰的兩個位元;針對該附加結果中行高大於該臨界值的行中的相鄰的三個位元進行一全加運算,並以該全加運算的運算結果取代該相鄰的三個位元;以及依序遞減該臨界值,並重複該化簡運算,直至該附加結果中各行的行高皆不大於該期望高度值。
- 如申請專利範圍第1項所述的乘積累加裝置,更包括一第二加法器,其中:該乘積化簡器依據該化簡後結果的最高位元來產生一對應值,該第二加法器用以計算該些寄存器中的一第一寄存器的資料與該對應值的和值,並以該和值更新該第一寄存器的資料。
- 如申請專利範圍第1項所述的乘積累加裝置,更包括一第二加法器,其中:該乘積化簡器對該化簡後結果的最高位元進行一第二加法運算,以產生至少一位元數值; 該乘積化簡器對該至少一位元數值進行一正負號延伸,來得到一延伸結果,其中該正負號延伸包括對該至少一位元數值進行一補數運算;以及該第二加法器計算該第一寄存器的資料與該延伸結果的和值,並以該和值更新該第一寄存器的資料。
- 如申請專利範圍第1項至第4項中任一項所述的乘積累加裝置,其中該期望高度值為2。
- 一種乘積累加方法,包括:接收N個位元的一被乘數與N個位元的一乘數,並對該被乘數與該乘數進行一乘積運算,以產生2N-1行的一乘積結果,其中N為正整數;將多個寄存器中的部分的寄存器的資料附加於該乘積結果的各行,以產生2N-1行的一附加結果;依據該附加結果中各行的行高,來對該附加結果進行一化簡運算,其中該化簡運算用以對該附加結果中的行高進行化簡,以使該附加結果中各行的行高皆不大於一期望高度值,藉此得到一化簡後結果;依據該化簡後結果來更新該些寄存器中的資料;以及依據一累加信號以對該些寄存器中的資料進行一累加運算,以產生一乘法累加運算結果,其中該化簡運算還包括: 當該附加結果中各行的行高皆不大於該期望高度值時,對該附加結果的第1行至第M行中第1列的位元值以及第2列的位元值進行一第一加法運算,並將該第一加法運算的結果中的進位元放至該附加結果的第M+1行,以產生該化簡後結果,其中M為小於2N-1的正整數,其中該化簡後結果中第1行至第M行的行高皆為1,第M+1行的行高為3,並且其餘行的行高為2。
- 如申請專利範圍第6項所述的乘積累加方法,其中對該附加結果進行該化簡運算的步驟還包括:針對該附加結果中行高等於一臨界值的行中的相鄰的兩個位元進行一半加運算,並以該半加運算的運算結果取代該相鄰的兩個位元;針對該附加結果中行高大於該臨界值的行中的相鄰的三個位元進行一全加運算,並以該全加運算的運算結果取代該相鄰的三個位元;以及依序遞減該臨界值,並重複該化簡運算,直至該附加結果中各行的行高皆不大於該期望高度值。
- 如申請專利範圍第6項所述的乘積累加方法,其中對該附加結果進行該化簡運算的步驟還包括:依據該化簡後結果的最高位元來產生一對應值,並計算該些寄存器中的一第一寄存器的資料與該對應值的和值;以及以該和值更新該些寄存器中的該第一寄存器的資料。
- 如申請專利範圍第6項所述的乘積累加方法,還包括:對該化簡後結果的最高位元進行一第二加法運算,以產生至少一位元數值;對該至少一位元數值進行一正負號延伸,來得到一延伸結果,其中該正負號延伸包括對該至少一位元數值進行一補數運算;以及計算該第一寄存器的資料與該延伸結果的和值,並以該和值更新該第一寄存器的資料。
- 如申請專利範圍第6項至第9項中任一項所述的乘積累加方法,其中該期望高度值為2。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW108134852A TWI696947B (zh) | 2019-09-26 | 2019-09-26 | 乘積累加裝置及其方法 |
US16/861,234 US11294632B2 (en) | 2019-09-26 | 2020-04-29 | Multiplication accumulating device and method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW108134852A TWI696947B (zh) | 2019-09-26 | 2019-09-26 | 乘積累加裝置及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI696947B true TWI696947B (zh) | 2020-06-21 |
TW202113584A TW202113584A (zh) | 2021-04-01 |
Family
ID=72176472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108134852A TWI696947B (zh) | 2019-09-26 | 2019-09-26 | 乘積累加裝置及其方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11294632B2 (zh) |
TW (1) | TWI696947B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11561795B2 (en) * | 2020-03-30 | 2023-01-24 | Arm Limited | Accumulating data values and storing in first and second storage devices |
US12056460B2 (en) * | 2021-05-10 | 2024-08-06 | International Business Machines Corporation | Dadda architecture that scales with increasing operand size |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030046323A1 (en) * | 2001-03-31 | 2003-03-06 | Orchard John T. | Architecture and related methods for efficiently performing complex arithmetic |
US6535901B1 (en) * | 2000-04-26 | 2003-03-18 | Sigmatel, Inc. | Method and apparatus for generating a fast multiply accumulator |
US6571268B1 (en) * | 1998-10-06 | 2003-05-27 | Texas Instruments Incorporated | Multiplier accumulator circuits |
US20050021585A1 (en) * | 2000-08-04 | 2005-01-27 | Dmitriy Rumynin | Parallel counter and a logic circuit for performing multiplication |
US20070192399A1 (en) * | 2006-02-15 | 2007-08-16 | Shankar Krithivasan | Power-efficient sign extension for booth multiplication methods and systems |
US20160246571A1 (en) * | 2013-10-02 | 2016-08-25 | The Penn State Research Foundation | Techniques and devices for performing arithmetic |
CN106897046A (zh) * | 2017-01-24 | 2017-06-27 | 青岛朗思信息科技有限公司 | 一种定点乘累加器 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490608B1 (en) * | 1999-12-09 | 2002-12-03 | Synopsys, Inc. | Fast parallel multiplier implemented with improved tree reduction schemes |
WO2006088085A1 (ja) * | 2005-02-17 | 2006-08-24 | Matsushita Electric Industrial Co., Ltd. | 加算器、およびその合成装置、合成方法、合成プログラム、合成プログラム記録媒体 |
KR20210027878A (ko) * | 2019-09-03 | 2021-03-11 | 삼성전자주식회사 | 연산 회로, 이를 포함하는 뉴럴 프로세싱 유닛 및 전자 기기 |
-
2019
- 2019-09-26 TW TW108134852A patent/TWI696947B/zh active
-
2020
- 2020-04-29 US US16/861,234 patent/US11294632B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6571268B1 (en) * | 1998-10-06 | 2003-05-27 | Texas Instruments Incorporated | Multiplier accumulator circuits |
US6535901B1 (en) * | 2000-04-26 | 2003-03-18 | Sigmatel, Inc. | Method and apparatus for generating a fast multiply accumulator |
US20050021585A1 (en) * | 2000-08-04 | 2005-01-27 | Dmitriy Rumynin | Parallel counter and a logic circuit for performing multiplication |
US20030046323A1 (en) * | 2001-03-31 | 2003-03-06 | Orchard John T. | Architecture and related methods for efficiently performing complex arithmetic |
US20070192399A1 (en) * | 2006-02-15 | 2007-08-16 | Shankar Krithivasan | Power-efficient sign extension for booth multiplication methods and systems |
US20160246571A1 (en) * | 2013-10-02 | 2016-08-25 | The Penn State Research Foundation | Techniques and devices for performing arithmetic |
CN106897046A (zh) * | 2017-01-24 | 2017-06-27 | 青岛朗思信息科技有限公司 | 一种定点乘累加器 |
Also Published As
Publication number | Publication date |
---|---|
TW202113584A (zh) | 2021-04-01 |
US11294632B2 (en) | 2022-04-05 |
US20210096818A1 (en) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI696947B (zh) | 乘積累加裝置及其方法 | |
CN101295237B (zh) | 求商和余数的高速除法器 | |
Nam et al. | High-speed and energy efficient carry select adder (CSLA) dominated by carry generation logic | |
Mukherjee et al. | Counter based low power, low latency Wallace tree multiplier using GDI technique for on-chip digital filter applications | |
Azarderakhsh et al. | Systolic Gaussian normal basis multiplier architectures suitable for high-performance applications | |
US7958180B2 (en) | Multiplier engine | |
Haritha et al. | Design of an enhanced array based approximate arithmetic computing model for multipliers and squarers | |
GB2262638A (en) | Digital system multiplication. | |
Kumawat et al. | Design and comparison of 8× 8 Wallace Tree Multiplier using CMOS and GDI technology | |
TWI679577B (zh) | 多位元加法器設備與用於執行算術運算之設備及方法 | |
US20220365755A1 (en) | Performing constant modulo arithmetic | |
Mohan et al. | Evaluation of Mixed-Radix Digit Computation Techniques for the Three Moduli RNS {2 n− 1, 2 n, 2 n+ 1− 1} | |
US20070203961A1 (en) | Multiplicand shifting in a linear systolic array modular multiplier | |
Kulkarni et al. | MAC unit optimization for area power and timing constraints | |
Wimer et al. | Energy efficient hybrid adder architecture | |
US7051062B2 (en) | Apparatus and method for adding multiple-bit binary-strings | |
Jaberipur et al. | Posibits, negabits, and their mixed use in efficient realization of arithmetic algorithms | |
Shaheen | Area and Power Efficient Multipliers Using Approximate Compressors and Full Adders for DSP Applications | |
Reddy et al. | A high speed, high Radix 32-bit Redundant parallel multiplier | |
Chen et al. | Low-Power Small-Area $3\times 3$ Convolution Hardware Design | |
Jayasanthi | Implementation of Power Efficient Multiply Accumulate Unit for DSP Applications | |
Veeramachaneni | Design of efficient VLSI arithmetic circuits | |
Krishna et al. | Convolution Using Delay Efficient Improved Hybrid Multiplier | |
Wang et al. | A high-speed pipeline architecture of squarer-accumulator (SQAC) | |
Stine et al. | A recursive-divide architecture for multiplication and division |