IntMul. Design

整数の乗算演算


アルゴリズム

2 bit Booth 法とは、A × B を計算するのに、B を 2 bit + 重複 1 bit = 3 bit 毎に分割して、部分積を形成する方法である。 区切った 3 bit と、対応する部分積の値は以下の通りである。

code B部分積
0000
001+A
010+A
011+2A
100-2A
101-A
110-A
1110

2 Booth は、実質は 2 bit 毎にエンコードしているため、筆算のやり方に比 べて、部分積の数が半分になる上、部分積が単純な ±A,±2A のみになるとい う利点がある。
32 bit × 32 bit を 2 Booth でエンコードすると、エンコードの結果は、入 力に対して 2 倍 の値まで持つことになり、更に、2 の補数表現というのも考 慮して、34 bit の部分積を生成する。そしてその生成される 34 bit の部分 積の数は、図のように 16 個である。

   |--10987654321098765432109876543210-
00 |------------------------------- FG0
01 |   |         |         |      DEF|
02 |   |         |         |    BCD  |       
03 |   |         |         |  zAB    |     
04 |   |         |         |xyz      |   
05 |--------------------- vwx -------| 
06 |   |         |      tuv|         |
07 |   |         |    rst  |         |
08 |   |         |  pqr    |         |
09 |   |         |nop      |         |
10 |----------- lmn -----------------|
11 |   |      jkl|         |         |
12 |   |    hij  |         |         |
13 |   |  fgh    |         |         |
14 |   |def      |         |         |
15 |- bcd ---------------------------|         
   |--10987654321098765432109876543210-

しかも上記の b の部分をちゃんと符号拡張しておけば、2 の補数に対しても きっちり対応してくれるすぐれもの。今回は、32 ビットオペランドで、b で 丁度終了するから、符号拡張の必要すらない。

しかし 整数には符号無しの乗算も必要なので、結局もう 1 つ、部分積が必要 となり、計 17 個の部分積となる。

3 - 2 圧縮器を用いて、3 オペランドを 2 オペランドに圧縮する。圧縮に必 要な時間は最後に示すが、どのステージでもおよそ 1 ns 程度。

まず、エンコードされた 16 個の 34 ビットオペランドを下位から順に 3 つ づつに分け、圧縮器に投入する。すると、下図のように、最下位 2 ビットは スルーして、残り 36 ビットについて実際の圧縮が行われる。下図は、イメー ジのためあえて載せていないが、符号拡張を忘れずに行う必要がある。

以下、入力のビット数を上から a,b,c 、和とスルーの連結出力を s 、キャリー の出力を t としたとき、(a,b,c,s,t) 加算器と表記し、この加算器をモジュー ルの 1 単位として設計する。
なお、残った 2 つの部分積は、何も手を加えない。( スルー )

1.

(34,34,34,36,2) adder x 5

output:
 38b , 36b , 38b , 36b , 38b , 36b , 38b , 36b , 38b , 36b , 38b , 36b ,
 34b ( through ) , 34(32)b ( through )


                                        0000000000000000000000000000000000         
                                      1111111111111111111111111111111111         
                                    2222222222222222222222222222222222         
                                    ------------------------------------
                                    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                                   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                                   012345678901234567890123456789012345
                                   0         1         2         3


                                  3333333333333333333333333333333333         
                                4444444444444444444444444444444444         
                              5555555555555555555555555555555555         
                              ------------------------------------
                              xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                             yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy


                            6666666666666666666666666666666666         
                          7777777777777777777777777777777777         
                        8888888888888888888888888888888888         
                        ------------------------------------
                        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                       yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy


                      9999999999999999999999999999999999         
                    0000000000000000000000000000000000         
                  1111111111111111111111111111111111         
                  ------------------------------------ 
                  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy


                2222222222222222222222222222222222         
              3333333333333333333333333333333333         
            4444444444444444444444444444444444         
            ------------------------------------
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
           yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy


          5555555555555555555555555555555555         
        DD66666666666666666666666666666666         

-----------------------------------------------------------------------------------
          5555555555555555555555555555555555         
                                        0000000000000000000000000000000000         
          0123456789012345678901234567890123456789012345678901234567890123
          0         1         2         3         4         5         6

前のステージの結果を更に圧縮する。以下、同様に 2 つに減るまで作業を続ける。

stage 2.

(36,38,36,41,3) adder x 2
(38,36,38,39,3) adder x 1 

(36,34,32,34,3} x 1  , 1bit dummy


output:
 44b , 41b , 42b , 39b , 44b , 41b , 38b , 34(33)b 


                                    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                                   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                              xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                              -----------------------------------------
                              xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
                             yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                             01234567890123456789012345678901234567890
                             0         1         2         3         4



                             yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                       yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                       ---------------------------------------
                       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
                      yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                      012345678901234567890123456789012345678
                      0         1         2         3        



                  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
                 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzz
            -----------------------------------------
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
           yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
     


           yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          5555555555555555555555555555555555         
        DD66666666666666666666666666666666
          ----------------------------------
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
         0123456789012345678901234567890123
         0         1         2         3


stage 3.

(44,41,42,47,4) x 1
(39,44,41,45,5) x 1

output:
 51b , 47b , 50b , 45b , 38b ( through ) , 34(33)b ( through )


                              xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
                             yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
                       -----------------------------------------------
                       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzz
                      yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
                      01234567890123456789012345678901234567890123456
                      0         1         2         3         4 


                      yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
           yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
           ---------------------------------------------
           xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzz
          yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          012345678901234567890123456789012345678901234
          0         1         2         3         4 


          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy



stage 4.

(51,47,50,58,5) adder x 1
(45,37,33,37,8) adder x 1  msb dummy


output:
 63b , 58b , 45b , 37(36)b


                       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzz
                      yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
           xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzz
           ----------------------------------------------------------
           xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzz
          yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          0123456789012345678901234567890123456789012345678901234567
          0         1         2         3         4         5 


          yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          -------------------------------------
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
         0123456789012345678901234567890123456
         0         1         2         3     


stage 5.

(63,58,45,58,6) x 1 msb dummy

output:
 64b , 58b , 37(36)b ( through )


           xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzz
          yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzz
          ----------------------------------------------------------
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
         0123456789012345678901234567890123456789012345678901234567
         0         1         2         3         4         5 



         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
         0123456789012345678901234567890123456
         0         1         2         3     


stage 6.

(64,57,36,57,7) x 1 msb dummy

output:
 64b , 57(56)b

          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          ---------------------------------------------------------
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
         012345678901234567890123456789012345678901234567890123456
         0         1         2         3         4         5 


stage cla.

          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzz
         Yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
          --------------------------------------------------------
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzz
          0123456789012345678901234567890123456789012345678901234567890123
          0         1         2         3         4         5         6 



モジュール名cost prim.時間 (ns)必要数 小計 prim.
boothencode 501 4.982168016
comp1_0 282 1.2045 1410
comp2_0 310 1.2442 620
comp2_1 307 1.1811 307
comp2_2 266 0.8861 266
comp3_0 349 1.2741 349
comp3_1 352 1.2801 352
comp4_0 422 1.4951 422
comp4_1 284 0.8351 284
comp5_0 425 0.8641 425
comp6_0 393 0.8351 393
cla 671 8.5591 671
no clock, opt area -high, opt timing -high にて合成
[ primitive cost × 必要数 ] で、
必要な primitive cost が計算できる。


一歩前へ
僕のホームへ[Home]
研究室のページへ[Amano Lab.]
Takahiro Kawaguchi kawaguti@aa.cs.keio.ac.jp
Last modified: Oct. 29 , 1997