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