new version:
partition: p p p p (4 bits)
- carry-in : c c c c (4 bits)
- C = c & P: C C C c (4 bits)
+ carry-in : c c c c c (5 bits)
+ C = c & P: C C C C c (5 bits)
+ I = P=>c : I I I I c (5 bits)
a : AAAA AAAA AAAA AAAA AAAA (32 bits)
b : BBBB BBBB BBBB BBBB BBBB (32 bits)
- exp-a : 0AAAApAAAACAAAACAAAACAAAAc (32+4 bits, P=1 if no partition)
- exp-b : 0BBBB0BBBBCBBBBCBBBBCBBBBc (32 bits plus 4 zeros)
- exp-o : o....oN...oN...oN...oN...x (32+4 bits - x to be discarded)
+ exp-a : 0AAAACAAAACAAAACAAAACAAAAc (32+4+2 bits, P=1 if no partition)
+ exp-b : 0BBBBIBBBBIBBBBIBBBBIBBBBc (32+2 bits plus 4 zeros)
+ exp-o : o....oN...oN...oN...oN...x (32+4+2 bits - x to be discarded)
o : .... N... N... N... N... (32 bits - x ignored, N is carry-over)
- carry-out: o o o o (4 bits)
+ carry-out: o o o o o (5 bits)
the new version
* o (carry-out) must be "cascaded" down to the relevant partition
start-point. this can be done with a Mux-cascade.
+carry-out-cascade example:
+
+ partition: 1 0 0 1 (4 bits)
+ actual : <--->|<------------>|<---> actual numbers
+ carryotmp: o4 o3 o2 o1 o0 (5 bits)
+ cascade : | | x x | o2 and o1 ignored
+ carry-out: o4 \-> --> o3 o0 (5 bits)
+
+because the partitions subdivide the 5-wide input into 8-24-8, o4 is already
+in "both" the MSB-and-LSB position for the top 8-bit result; o3 is the
+carry-out for the 24-bit result and must be cascaded down to the *beginning*
+of the 24-bit partitioned result (the LSB), and o0, like o4, is already in
+position because the partition is only 1 wide.
+