(no commit message)
[libreriscv.git] / 3d_gpu / architecture / dynamic_simd / add.mdwn
index 6b091ad183f4b996c4c6e26d5c22e004c4329f20..5ed776a302783f0a830a6a35629344b9381a5009 100644 (file)
@@ -23,15 +23,16 @@ and take up large resources.
 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
 
@@ -44,3 +45,17 @@ 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.
+