Conversion from Signed to Unsigned 16 bit multiplication
Notation
A is 16 bit data.
A (1111 1111 1111 1111) ------> 0A' (0111 1111 1111 1111)
Z (0000 0000 0000 0000) ------> 1Z' (1000 0000 0000 0000)
Case study
(1) A[15] = 0 B[15] = 0
signed : A * B = 0A' * 0B'
unsigned : A * B = 0A' * 0B'
unsigned = signed
(2) A[15] = 1 B[15] = 1
signed : A * B = ( -215 + 0A') * ( -215 + 0B')
= 0A' * 0B' + 230 - 215 * 0A' - 215 * 0B'
unsigned : A * B = ( 215 + 0A') * ( 215 + 0B')
= 0A' * 0B' + 230 + 2 15* 0A' + 215 * 0B'
unsigned = signed + 0A' 0000 0000 0000 0000 + 0B' 0000 0000 0000 0000
(3) A[15] = 0 B[15] = 1
signed : A * B = 0A' * ( -215 + 0B')
= 0A' * 0B' - 215 * 0A'
unsigned : A * B = 0A' * ( 215 + 0B')
= 0A' * 0B' + 215 * 0A'
unsigned = signed + 0A' 0000 0000 0000 0000
(4) A[15] = 1 B[15] = 0
signed : A * B = ( -215 + 0A') * 0B'
= 0A' * 0B' - 215 * 0B'
unsigned : A * B = ( 215 + 0A') * 0B'
= 0A' * 0B' + 215 * 0B'
unsigned = signed + 0B' 0000 0000 0000 0000
Summary
A * B = Signed 16 bit multiplication result
Unsigned 16 bit multiplication result
= A * B + A[15] * 0A'Z + B[15] * 0B'Z