Conversion from Unsigned to Signed 16/32/64 bit multiplication
Notation
A is 32 bit data.
A (1111 1111 1111 1111 1111 1111 1111 1111)
0A' (0111 1111 1111 1111 1111 1111 1111 1111)
1/A' (1000 0000 0000 0000 0000 0000 0000 0000)
Z (0000 0000 0000 0000)
Z' ( 000 0000 0000 0000)
Case study
(1) A[31] = 0 B[31] = 0
A * B = 0A' * 0B'
(2) A[31] = 1 B[31] = 1
A * B = ( -231 + 0A') * ( -231 + 0B')
= 0A' * 0B' + 262 - 231 * 0A' - 231 * 0B'
= 0A' * 0B' + 262 - 00A'Z'Z - 00B'Z'Z
= 0A' * 0B' + 262 + 11/A'Z'Z + 1Z'Z + 11/B'Z'Z + 1Z'Z
= 0A' * 0B' + 11/A'Z'Z
+ 11/B'Z'Z + 0100 0000 0000 0000 0000 0000 0000 0001 ZZ
= 0A' * 0B' + 00/A'Z'Z + 00/B'Z'Z + 1100 0000 0000 0000 0000 0000 0000 0001 ZZ
(3) A[31] = 0 B[31] = 1
A * B = 0A' * ( -231 + 0B')
= 0A' * 0B' - 231 * 0A'
= 0A' * 0B' - 00A'Z'Z
= 0A' * 0B' + 11/A'Z'Z + 1Z'Z
= 0A' * 0B' + 00/A'Z'Z + 1100 0000 0000 0000 0000 0000 0000 0000 1Z'Z
(4) A[31] = 1 B[31] = 0
A * B = ( -231 + 0A') * 0B'
= 0A' * 0B' - 231 * 0B'
= 0A' * 0B' - 00B'Z'Z
= 0A' * 0B' + 11/B'Z'Z + 1Z'Z
= 0A' * 0B' + 00/B'Z'Z + 1100 0000 0000 0000 0000 0000 0000 0000 1Z'Z
Summary
Signed 16 bit multiplication result
= 0A' * 0B' + 00/A'Z' * B[15] + 00/B'Z' * A[15] + <11*(A[15]||B[15])>00
0000 0000 000Z'
Signed 32 bit multiplication result
= 0A' * 0B' + 00/A'Z'Z * B[31] + 00/B'Z'Z * A[31] + <11*(A[31]||B[31])>00
0000 Z 0000 000Z'Z
Signed 64 bit multiplication result
= 0A' * 0B' + 00/A'Z'ZZZ * B[63] + 00/B'Z'ZZZ * A[63] + <11*(A[63]||B[63])>00
0000 ZZZ 0000 000Z'ZZZ