I am implementing and laying out a Radix-4 modified Booth signed multiplier. Its based on the one found in figure 10.79 of Weste and Harris CMOS VLSI Design.
Anyways it seems to work except when there is a 1 in the MSB of the number not booth encoded (Y).
For example if
Y= 1 0000
X= 0 0000
Then all the partial products will be 00 0000 (the extra bit of space is for possible shifting). And the Mi of every partial product is 0. So Figure 10.79 has you combine partial products as follows:
000<ebar0> <e0> <e0> <pp0> == line 1
01<ebar1> <pp1> 0 <M0> == line 2
<ebar2> <pp2> 0 <M1> 00 == line 3
where ei = (MSB of Y) XOR (Mi); and ebari = NOT(ei);
so if you use the example above you should end up getting a result of all zeroes but if you follow those rules you add the following:
000 1100 0000 == line 1
010 0000 0000 == line 2
000 0000 0000 == line 3
which gives:
010 1100 0000
What am I missing? I know e and ebar are suppose to be doing sign extension but they don't seem to work in this example. Like I said mine works with zero in the MSB (the one I'm doing is 9 bit instead of 5 as well).
Anyways it seems to work except when there is a 1 in the MSB of the number not booth encoded (Y).
For example if
Y= 1 0000
X= 0 0000
Then all the partial products will be 00 0000 (the extra bit of space is for possible shifting). And the Mi of every partial product is 0. So Figure 10.79 has you combine partial products as follows:
000<ebar0> <e0> <e0> <pp0> == line 1
01<ebar1> <pp1> 0 <M0> == line 2
<ebar2> <pp2> 0 <M1> 00 == line 3
where ei = (MSB of Y) XOR (Mi); and ebari = NOT(ei);
so if you use the example above you should end up getting a result of all zeroes but if you follow those rules you add the following:
000 1100 0000 == line 1
010 0000 0000 == line 2
000 0000 0000 == line 3
which gives:
010 1100 0000
What am I missing? I know e and ebar are suppose to be doing sign extension but they don't seem to work in this example. Like I said mine works with zero in the MSB (the one I'm doing is 9 bit instead of 5 as well).