Koen_Be3840 wrote
the first c=0/1 can be used to store the lower 16-bit array of the result or the high 16-bit array
 
To get the upper 16 bits will require a full 16x16 multiplier generating a 32-bit product.
For unsigned multiplication, this has the obvious structure
        AAAA
        BBBB
    --------
        NNNN
       NNNN
      NNNN
     NNNN
    --------
    XXXXXXXX
This structure is a bit more complicated for 2's compliment multiplication. Note that 's' is a sign extension bit—a copy of the partial product's sign bit. Also note that the final partial product is subtracted.
        AAAA
        BBBB
    --------
    ssssNNNN
  + sssNNNN
  + ssNNNN
  -(sNNNN   )
    --------
    XXXXXXXX
With some not so obvious manipulation, most of the extra adders can be eliminated. 'Ñ' is ~N.
        AAAA
        BBBB
    --------
       1ÑNNN
       ÑNNN
      ÑNNN
    1NÑÑÑ   
    --------
    XXXXXXXX
--Mark