Unsigned rows zero-extend to the product width. Signed rows must sign-extend instead, or a negative multiplicand reads as a large positive value.
The multiplier sign bit adds a second rule. Its row carries negative weight, so it is subtracted rather than added.
Extend each row to the full product width using the multiplicand sign. Negate the rows selected by the multiplier sign bit.
Multiplicand | Multiplier bit | Row treatment |
|---|---|---|
Unsigned | Any bit | Zero-extend the AND row to the product width. |
Signed | Non-sign bit | Sign-extend the AND row to the product width. |
Signed | Sign bit | Sign-extend, then negate: the row subtracts. |
Signed Booth row | Any digit | Already signed: sign-extend the multiple, no extra row. |
Take a = -3 (1101) and b = -1 (1111) at 8-bit product width. Three rows add and the sign row subtracts, giving 3.
a = -3 = 1101, b = -1 = 1111, product width 8
row 0 (b0 = 1): 11111101 = -3
row 1 (b1 = 1): 11111010 = -6
row 2 (b2 = 1): 11110100 = -12
row 3 (b3 = 1, sign bit): negate 11101000 (-24) -> +24
total = -3 + -6 + -12 + 24 = 3 = -3 x -1
zero-extended rows would sum 13 + 26 + 52 + 104 = 195 (reads -61 as signed 8-bit)Bit 3 of the multiplier is its sign bit, so that row carries negative weight. Negating -24 gives +24.
Each row reads as a positive value: 13, 26, 52 and 104. Their sum 195 is the wrong product, reading -61 as signed 8-bit.