Method and apparatus for generating sign-digit format of sum of two numbers

Information

  • Patent Grant
  • 7159003
  • Patent Number
    7,159,003
  • Date Filed
    Friday, February 21, 2003
    21 years ago
  • Date Issued
    Tuesday, January 2, 2007
    17 years ago
Abstract
A system and method for converting two binary digits into redundant sign-digit format. The system comprises a first adder for adding the binary digits together to generate a first result. A second adder adds an input carry from a previous digit to the first result and subtracts a value equal to the radix of the of the binary digits form the first result if the first result is greater than an initial threshold in order to generate an intermediate result. The system further includes a third adder for adding a second input carry from the previous digit to the intermediate result and subtracting the value of the radix from the intermediate result if the intermediate result is greater than a prescribed value such that the addition of the two binary digits are in redundant sign-digit format.
Description
FIELD OF THE INVENTION

The present invention generally relates to the computation of binary numbers, and more particularly to the efficient conversion of binary numbers into sign-digit redundant form.


DESCRIPTION OF THE RELATED ART

In order to build compact binary multipliers, the sign-digit representation of a binary number is used in the hardware design. If a digit of the binary number is made wider, then the total number of digits is reduced. Accordingly, certain radix digits are chosen for the desired numbering system. The most popular system uses sign-digit numbers with radix 4. Accordingly, each two bits of a number are substituted by a digit which has a value from the set of {−2, −1, 0, 1, 2}. An advantage of this radix system is that a partial product generated by multiplying the digit by a second argument involves only simple logic operations to produce. For instance, the partial product may be generated by masking, shifting by one and inversion. Accordingly, instead of generating n partial products for a n-bit binary number, only n/2+2 partial products are generated.


After all the partial products have been generated during multiplication, then the partial products are added together using the well-known Wallace Tree. The Wallace Tree reduces the number of partial products at each stage without full carry propagation. The Wallace Tree functions as a “carry-save” adder (CSA) and does not make use of full carry propagation. The output of the CSA is a carry save-number which contains the partial sum of the number and all of the carries. In order to compute the final value, a carry propagation adder (CPA) is used to add the carries. Typically, the CPA has a larger delay by comparison to the CSA.


Referring to FIG. 1, the delays with the addition and multiplication of three values A, B, and C is shown. The desired result is (A+B)·C wherein A, B, and C are binary numbers. Both the values A and B are inputted into adder CPA 10 that is a carry propagation adder which has a large delay associated therewith. Once the values A and B have been added by the CPA 10, the sum of A+B is fed into a multiplier Wallace Tree 14. The value C is fed into a booth encoder 12 which can encode the value C for multiplication using the well-known Booth's algorithm. The encoded value of C from the booth encoder 12 is then fed into the multiplier 14 which computes the value (A+B)·C with a final CPA 11. As previously mentioned, the delay of the CPA 10 and the final CPA 11 is significantly large compared to the multiplier Wallace Tree 14 such that the arrangement of FIG. 1 has a large latency caused by using two CPAs with appropriate delays.



FIG. 2 shows the same operation as FIG. 1, but carried out in a different manner. Specifically, the values of A and B are fed into respective multiplier Wallace Trees 14a and 14b. The value C is also fed into each of the multipliers 14a and 14b after being booth encoded in encoder 12. In this respect, multiplier 14a computes the value of A-C and multiplier 14b computes the value of B·C. The outputs of the multipliers 14a and 14b are fed into adder 16 which adds the values together to achieve the final result A·C+B·C (i.e., (A+B)·C). As is evident from FIG. 2, this method of computation reduces the delay from the CPA 10, but increases the complexity and gate count of the circuit by including two multipliers 14a and 14b.


The present invention addresses the above-mentioned deficiencies in computation of binary numbers by providing a system and method that reduces circuit complexity and latency in the computation. Specifically, the present invention provides a method whereby the gate count for the computational circuit is reduced compared to the circuit of FIG. 2, yet the speed of the computation is not decreased by providing an efficient conversion of the binary numbers into sign-redundant form. Accordingly, the present invention provides a good balance between complexity and latency in order to achieve a small, and simple device.


BRIEF SUMMARY OF THE INVENTION

In accordance with the present invention, there is provided a method for partial adding and converting two numbers having binary digits into a redundant sign-digit format. The method uses partial propagation of the carry of the sum regarding the desired radix of the Booth encoder. The radix is used as a bias for interim results. The binary digits of each number are added together with a first adder in order to generate a first result with a first carry. A second adder adds the first result to a first input carry of a previous digit. A value equal to the radix of the binary digits is subtracted from the first result with the second addition block if the first result is greater than an initial threshold such that an intermediate result and a second carry is generated. A third adder adds the intermediate result to a second input carry of the previous digit. With the third adder, the value of the radix is subtracted from the intermediate result if the intermediate result is greater than a prescribed value in order to generate a final output in redundant sign-digit format. The method is continued for all sets of binary digits.


In accordance with the present invention, there is also provided a system for multiplying the sum of a first number A and a second number B by a third number C. The system has a first adder configured to add the binary digits of A and B together and generate a first result with a first carry. The system also includes a second adder block configured to add the first result to the first input carry of a previous digit. Furthermore, the second adder is configured to subtract the value of the radix from the first result if the first result is greater than an initial threshold in order to generate an intermediate result with a second carry. The system includes a third adder configured to add the intermediate result to a second input carry of a previous digit and subtract the value of the radix from the intermediate result if the intermediate result is greater than a prescribed value. In this regard, the first, second, and third adders are configured to add and convert the numbers A and B into sign-digit redundant format. The system further includes a multiplier configured to multiply the redundant sign-digit format of the addition of A and B from the third adder by the value of C in order to generate the final result.


In addition to the foregoing, there is provided a method for multiplying the sum of a first number A having binary digits and a second number B having binary digits by a third number C. The binary digits of A and B are added together in order to generate the first result with the first carry. The first result is added to the first input carry of the previous digit. Then, the value of the radix is subtracted from the first result if the first result is greater than an initial threshold in order to generate the intermediate result with the second carry. The intermediate result is added to the second input carry of the previous digit and the radix is subtracted from the intermediate result if the intermediate result is greater than a prescribed value. This result is the sum of A and B expressed in sign-digit redundant format. Then, the sign-digit redundant format of the sum of A and B is multiplied with C in order to generate the final result.





BRIEF DESCRIPTION OF THE DRAWINGS

These, as well as other features of the present invention, will become more apparent upon reference to the drawings wherein:



FIGS. 1 and 2 are prior art computational circuits;



FIG. 3 is a conversion circuit constructed in accordance with the present invention; and



FIG. 4 is a basic conversion circuit for radix 4 sign-digits.





DETAILED DESCRIPTION OF THE INVENTION

Referring now to the drawings wherein the showings are for purposes of illustrating a preferred embodiment of the present invention only, and not for purposes of limiting the same, FIG. 3 illustrates a computational circuit 20 constructed in accordance with the preferred embodiment of the present invention and used to compute the value (A+B)·C. The circuit 20 has a CSA to Booth encoder 22 which encodes the value of A+B, as will be further explained below. The value of A+B is fed into a multiplier 24 which also receives the value of C. The multiplier 24 multiplies A+B by C to output the final result of: (A+B)·C.


The CSA to booth encoder 22 provides a novel manner to convert the sum of A and B into sign-digit redundant form for multiplication by C in multiplier 24. FIG. 4 illustrates the structure of each coder unit 28 replicated for each digit position shown in FIG. 3. Specifically, A and B are 2 digit binary CSA numbers such that a first result Di is generated with an adder 40 by:

Di=a1i·2+a0i+b1i·2+b0icustom characterDiε{0 . . . 6}  (1)


wherein a1i, a0i, and b1i, b0i are the respective two bit binary digit representations for A and B on the digit position i.


Next, a threshold value nt is declared to be:

nt: ntε{2 . . . 5}  (2)


Accordingly, then the output carry signal C1out is determined with comparator 42 to be:










C

1

out


=

{




0
,


D
i

<

n
t








1
,


D
i



n
t











(
3
)







After adding the input carry from the previous digit C1in with adder 44, the value of an intermediate result D1i is:

D1i=Di+C1in−C1out·rcustom character  (4)
D1iε{min(nt−4,0) . . . (nt, 2)}  (5)


Wherein the bias r=4 is the radix of the binary system used.


At this stage the output carry C2out can be declared to be with comparator 46:










C

2

out


=

{




0
,


D

1

i


<

r
2








1
,


D

1

i




r
2











(
6
)







The value of the final digits converted into redundant sign-digit format D2i after adding the input carry from the previous digit C2in with adder 48 becomes:

D2i=D1i+C2in−C2out·rcustom characterD2iε{−2,−1,0,1,2}  (7)


wherein the bias r=4 is the radix of the binary system used.


As will be recognized, D2i is in sign digit format because it is an element of the set {−2, −1, 0, 1, 2}. This is the digit representation that reduces multiplication steps in the multiplier 24.


Referring back to FIG. 3, each coder 28 computes the equations (1)–(7) described above and shown in FIG. 4 for calculating the final result. Each coder 28 generates a respective D2i. As previously mentioned, the final results are in sign-redundant form that facilitate multiplication with the value C.
















TABLE 1









a =
10
10
00
10
   162



b =
10
10
10
11
+1 71








= 333



Do
4
4
2
5



C1out/in
1
1
0
1



D1 1
1
0
3
1



C2out/in 0
0
0
1
0



D2 1
1
1
−1
1
= 333










Referring to Table 1, an example showing the conversion of two binary numbers into sign-digit redundant format is shown. In this example, the threshold value n, is selected to be nt=4. Table 1 shows the resultant values of D and C using the method of the present invention. As can be seen, the method converts the two binary numbers into sign-digit redundant form while adding their values together to achieve the result: D2=111−11=333. As previously discussed, the resultant values can then be multiplied by multiplier 24 with the value of C to achieve the final result.


More specifically, Table 1 describes the situation wherein:

a=162=(10100010)2  (8)
b=171=(10101011)2  (9)
a+b=162+171=(10100010)2+(10101011)2=333  (10)















For





a

=
162





(
11
)






=


(
1010010




)

2





(
12
)






=


(

10





10





00





10

)

2





(
13
)






=




(
10
)

2

·

4
3


+



(
10
)

2

·

4
2


+



(
00
)

2

·

4
1


+



(
10
)

2

·

4
0







(
14
)











j
=
0

3



Aj
·

4
j







(
15
)








wherein, A3=(10)2, A2=(00)2, A1=(10)2 and A0=(10)2  (16)


Further define Aj:

Aj=(a1j·21+a0j·20)=(a1j·2+a0j)  (17)


Because A3=(10)2, then a13=1 and a03=0.


Similarly:

a12=1, a02=0  (18)
a11=0, a01=0  (19)
a10=1, a00=0  (20)







For





b

=

171




=



(
10101011
)

2





=



(

10





10





10





11

)

2





=





(
10
)

2

·

4
3


+



(
10
)

2

·

4
2


+



(
10
)

2

·

4
1


+



(
11
)

2

·

4
0












j
=
0

3




B
j

·

4
j












wherein, B3=(10)2, B2=(10)2, B1=(10)2, B0=(11)2,


Further define Bj:

Bj=(b1j·21+b0j·20)=(b1j·2+b0j)  (27)


Accordingly:

b13=1, b03=0  (28)
b12=1, b02=0  (29)
b11=1, b01=0  (30)
b10=1, b00=1  (31)


And thus:










a
+
b

=





j
=
0

3




A
j

·

4
j



+




j
=
0

3




B
j

·

4
j








(
32
)






=




j
=
0

3




(


A
j

+

B
j


)

·

4
j







(
33
)






=




(



a

1

j


·
2

+

a

0

j


+



b

1

j


·
2



b

0

j




)

·

4
j







(
34
)







According to Eq. (1):

D0i=(a1i·2+a0i)+(b1i·2+b0i)  (35)
custom characterD0i=(Aj+Bj); and  (36)
custom characterD03=(1·2+0)+(1·2+0)=4  (37)
custom characterD02=(1·2+0)+(1·2+0)=4  (38)
custom characterD01=(0·2+0)+(1·2+0)=2  (39)
custom characterD00=(1·2+0)+(1·2+1)=5  (40)


As stated previously, in equation (3), C1i=1 if D0i≧nt, otherwise C1i=0 if D0i<nt where ntε{2 . . . 5}. In this example, nt=4. Accordingly:

custom character=C13=1  (41)
custom characterC12=1  (42)
custom characterC11=0  (43)
custom characterC10=1  (44)


Therefore:










D

1

i


=


(



a

1

i


·
2

+

a

0

i



)

+

(



b

1

i


·
2

+

b

0

i



)

+

C


1

i

-
1


-


C

1

i


·
r











(
45
)







=



D

0

i


+

C


1

i

-
1


-


C

1

i


·
r


=


C

0

i


+

(


C


1

i

-
1


-


C

1

i


·
r


)







(

4





6

)







Accordingly:

custom characterD14=D04+(C13−C14·4)=0+1−0·4=1  (47)
custom characterD13=D03+(C12−C13·4)=4+1−1·4=1  (48)
custom characterD12=D02+(C11−C12·4)=4+0−1·4=0  (49)
custom characterD11=D01+(C10−C11·4)=2+1−0·4=3  (50)
custom characterD10=D00+(0−C10·4)=5+0−1·4=1  (51)


As previously described, C21=1 if D1i≧2, otherwise C2i=0 such that:

custom characterC24=0  (52)
custom characterC23=0  (53)
custom characterC22=0  (54)
custom characterC21=1  (55)
custom characterC20=0  (56)


Therefore:

D2i=Dli+C2i-1−C2i·r  (57)


Accordingly:

custom characterD24=D14+(C23−C24·4)=1+0−0·4=1  (58)
custom characterD23=D13+(C22−C23·4)=1+0−0·4=1  (59)
custom characterD22=D12+(C2i−C22·4)=0+1−0·4=1  (60)
custom characterD21=D11+(C20−C21·4)=3+0−1·4=−1  (61)
custom characterD20=D10+(0−C20·4)=1+0−0·4=1  (62)


Therefore, arranging this information into Table 2:















TABLE 2





Base: r = 4








(i.e., bias).
i = 4
i = 3
i = 2
i = 1
i = 0







Ai = a1ia0i

a13a03 = 10
a12a02 = 10
a11a01 = 00
a10a00 = 10
(162)10


Bi = b1ia0i

b13b03 = 10
b12b02 = 10
b11b01 = 10
b10b00 = 11
(171)10


A + B





= (333)10


D0i = (a1i · 2 + a0i) +

D03 = 4
D02 = 4
D01 = 2
D00 = 5


(b1i · 2 + b0i)


C1i = 1 if D0i ≧ nt

C13 = 1
C12 = 1
C11 = 0
C10 = 1


Else, C1i = 0


D1i = D0i + C1i−1
D14 = 1
D13 = 1
D12 = 0
D11 = 3
D10 = 1


C1i · r


C2i = 1 if D1i ≧ 2
C24 = 0
C23 = 0
C22 = 0
C21 = 1
C20 = 0


Else, C2i = 0


D2i = D1i + C2i−1
D24 = 1
D23 = 1
D22 = 1
D21 = −1
D20 = 1
= (333)10


C2i · r









The previous example show the multiplication of binary numbers in radix 4, however it is possible to compute numbers in other radixes such as radix 8 and 16, etc. . . . . Additionally, the bias r for D1i and D2i depends on the radix chosen. Specifically, in the examples for equations (4) and (7) the bias r is chosen as 4 as the radix of the number system used. However, r would be 8 or 16 for number systems with radixes 8 or 16 respectively. Furthermore, in order to further optimize the system, the value of nt may be varied. By changing the value threshold value of propagation nt at the first stage of propagation, it is possible to optimize the hardware of the system.


The following equations illustrate the general case for computing the output result D2i. If there is an N-bit digit of a binary CSA number such as N>1, then:










D
i

=






j
=
0


N
-
1





2
j



(


a

j
i


+

b
ji


)





D
i




{


0












2

N
+
1



-
2

}






(
63
)







For this N-bit digit the radix r is 2N. A threshold value nt is declared to be:










n
t

:


n
t



{



1
2


r












3
2


r

-
1

}






(
64
)







Then the output carry signal is:










C

1

i


=

{




0
,


D
i

<

n
t








1
,


D
i



n
t











(
65
)







After reading the input carry from the previous digit C1i-1, the value of D1i is:

D1i=Dis+Ci−C1i·r
D1iε{nlow . . . nhigh}


Where:










n
low

=


min


(



n
t

-
r

,
0

)




{


-

1
2



r











0

}






(
68
)







n
high

=


max






(



1
2


r

,

n
t


)




{



1
2


r












3
2


r

-
1

}






(
69
)







Accordingly, the lower boundary nlow cannot exceed the desired range even considering any possible carry. The upper boundary nhigh is chosen to fit the digit into the desired range after the second carry. The threshold value range nt is actually determined by both boundaries such that:












m



{



1
2


r












3
2


r

-
1

}


c



0











1








(
70
)







m
-
r
+
c



{


-

1
2



r












1
2


r

}





(
71
)







The output carry at this second stage is declared to be:










C

2

i


=

{




0
,


D

1

i


<


1
2


r








1
,


D

1

i





1
2


r











(
72
)







After adding the input carry from the previous digit C2i-1, the value of the output D2i becomes:










D

2

i


=




D

1

i


+

C


2

i

-
1


-


C

2

i


·
r








D

2

i





{


-

1
2



r












1
2


r

}






(
73
)







which is in the sign-digit representation for radix 2N.


Additional modifications and improvements of the present invention may also be apparent to those of ordinary skill in the art. Thus, the particular combination of parts described and illustrated herein is intended to represent only a certain embodiment of the present invention, and is not intended to serve as a limitation of alternative devices within the spirit and scope of the invention.

Claims
  • 1. A method for adding respective digits of two numbers, each digit having a plurality of bits, so that the sum has a redundant sign-digit format, the method comprising: determining an initial threshold;adding with a first adder the bits of each digit to generate a first result;comparing the first result with the initial threshold to determine whether or not the first result has a first carry;adding with a second adder the first result to an input first carry of a previous digit and subtracting with the second adder a value equal to the radix of the digit from the first result if the first result has a first carry in order to generate an intermediate result;comparing the intermediate result with a prescribed value to determine whether or not the intermediate result has a second carry; andadding with a third adder the intermediate result to an input second carry of a previous digit and subtracting with the third adder the value equal to the radix of the digit from the intermediate result if the intermediate result has a second carry.
  • 2. The method of claim 1, wherein each digit has two bits.
  • 3. The method of claim 1, wherein the initial threshold is chosen between the values of 2 and 5; andwherein the prescribed value is 2.
  • 4. The method of claim 1 further comprising repeating each step for each digit of the two numbers.
  • 5. The method of claim 1wherein each digit of the two numbers has N bits; andwherein adding with a first adder includes adding with the first adder each of the respective N bits from each digit together to generate an (N+1) bit result;wherein adding with the second adder includes adding with the second adder each of the (N+1) bit result to a carry in of a previous digit and subtracting with the second adder the value of the radix of the digit from the N+1-bit result if the N+1 bit result is greater than an initial threshold in order to generate an intermediate N+1 bit result; andwherein adding with the third adder includes adding with the third adder each of the N+1 bit intermediate result to a carry in from the previous digit and subtracting with the third adder the value of the radix of the digit from each of the N+1 bit intermediate result if the N+1 bit intermediate result is greater than the prescribed value.
  • 6. A system for adding respective digits of two numbers, each digit having a plurality of bits, so that the sum has a redundant sign-digit format, the system comprising: a first adder configured to add the bits of each digit to generate a first result;a first comparator operative to compare the first result with an initial threshold to determine whether or not the first result has a first carry;a second adder configured to add the first result to an input first carry of a previous digit and to subtract a value equal to the radix of the digits from the first result if the first result has a first carry in order to generate an intermediate result; anda second comparator operative to compare the intermediate result with a prescribed value to determine whether or not the intermediate result has a second carry; anda third adder configured to add the intermediate result to an input second carry of a previous digit and subtract the value equal to the radix of the digits from the intermediate result if the intermediate result has a second carry.
  • 7. The system of claim 6, wherein each digit of each number has two bits.
  • 8. The system of claim 3, wherein the initial threshold is chosen between the values of 2 and 5; andwherein the prescribed value is 2.
  • 9. The system of claim 6, wherein the first, second, and third adders are configured to operate on each set of binary digits of the two numbers.
  • 10. A system for adding two numbers, having a plurality of digits, so that the sum has a redundant sign-digit format, the system comprising a plurality of coder blocks, each coder block being a system according to claim 6, said plurality of blocks arranged in series to form a chain, wherein first and second carry inputs are connected to first and second carry outputs of a previous block, wherein each coder block receives one of the digits of the plurality of digits and converts each received digit into redundant sign-digit format.
  • 11. A system for adding a first digit A having bits a1i, a0i, and a second digit B having bits b1i, b0i, so that the sum has a redundant sign-digit format, the system comprising: first adder means for calculating a first result Di having the value a1i*2+a0i+b1i*2+b0i; first comparator means for comparing the first result Di with the initial threshold nt to determine whether or not the first result has a first carry C1out;second adder means for calculating an intermediate result D1i having the value Di+C1in−C1out·r, where r is a value equal to the radix of the digits and C1in is a first input carry from a previous digit and C1out is the carry from the first result;second comparator means for comparing the intermediate result D1i with a prescribed value to determine whether or not the intermediate result has a second carry C2out; andthird adder means for calculating a final result D2i having a value D1i+C2in−C2out·r, where C2in is a second input carry from a previous digit and C2out is a second carry out from the intermediate result.
  • 12. The system of claim 11, wherein C1out is greater than zero if Di is greater than or equal to the initial threshold; andwherein C2out is greater than zero if D1i is greater than or equal to the prescribed value.
  • 13. A system for multiplying the sum of a first number A having bits a1i, a0i and a second number B having bits b1i, b0i, by a third number C, the system comprising: first adder means for calculating a first result Di having the value a1i*2+a0i+B1i*2+b0i; first comparator means for comparing the first result with a initial threshold to determine whether or not the first result has a first carry out;second adder means for calculating an intermediate result D1i having the value Di+Cin−C1out·r, where r is a value equal to the radix of the digits and C1in is a first input carry from a previous digit and C1out is the first carry out from the first result;second comparator means for comparing the intermediate result to a prescribed value to determine whether or not the intermediate result has a second carry;third adder means for calculating a final result D2i having a value D1i+C2in−C2out·r where C2in is second input carry from a previous digit and C2out is the second carry out from the intermediate result and D2i is the sum of A and B in redundant sign-digit format; andmultiplier means for multiplying D2i by C to obtain a final result.
  • 14. The system of claim 13, wherein C1out is greater than zero if Di is greater than or equal to the initial threshold; andwherein C2out is greater than zero if D1i is greater than or equal to the prescribed value.
  • 15. A system for multiplying the sum of a first number A having bits and a second number B having bits by a third number C, the system comprising: a first adder configured to add the bits of A and B together to generate a first result;a first comparator for comparing the first result with an initial threshold to determine whether or not the first result has a first carry;a second adder configured to add the first result to an input first carry of a previous digit and to subtract a value equal to the radix of the digits from the first result if the first result has a first carry in order to generate an intermediate result;a second comparator for comparing the intermediate result with a prescribed value to determine whether or not the intermediate result has a carry; anda third adder configured to add the intermediate result to an input second carry of a previous digit and subtract the value equal to the radix of the digits from the intermediate result if the intermediate result has a carry so that the sum of the two numbers has redundant sign-digit format; anda multiplier configured to multiply the redundant sign-digit format of the sum of A and B by the value of C to obtain the final result.
  • 16. The system of claim 15, wherein each digit of each number has two bits.
  • 17. The system of claim 15, wherein the initial threshold is chosen between the values of 2 and 5; andwherein the prescribed value is 2.
  • 18. A method for multiplying the sum of a first number A having binary digits and a second number B having binary digits by a third number C, the method comprising: determining an initial threshold for the conversion;adding with a first adder the digits of A and B together to generate a first result;comparing the first result with the initial threshold to determine whether or not the first result has a first carry;adding with a second adder the first result to an input first carry of a previous digit and subtracting with the second adder a value equal to the radix of the digits from the first result if the first result has a first carry in order to generate an intermediate result;comparing the intermediate result with a prescribed value to determine whether or not the intermediate result has a second carry;adding with the third adder the intermediate result to an input second carry of the previous digit and subtracting with the third adder the value equal to the radix of the digits from the intermediate result if the intermediate result has a second carry so that the sum of A and B has redundant sign-digit format; andmultiplying the redundant sign-digit format of the sum of A and B by the value of C with a multiplier in order to generate a final result.
  • 19. The method of claim 18, wherein each digit has two bits.
US Referenced Citations (3)
Number Name Date Kind
5113363 Orsino et al. May 1992 A
6754689 Bhushan et al. Jun 2004 B1
20010016865 Goto Aug 2001 A1