- FPOPMODE[1:0] selects between the product M, PCIN, the internal input D or 0
to feed the adder input P0. When D carries binary16 data for the multiplier, it
cannot be used for the binary32 adder.
- FPOPMODE[4:2] selects between P, PCIN, C, or 0 to feed the adder input
P1.
- P is the adder output. When looped back to P1, the P register is the
accumulator. Alternatively, P can be looped back to C with programmable
logic (PL) resources to form an accumulator chain that is up to four
registers long, enabling up to four independent threads to be
time-interleaved. For instance, one input element from A can be
processed by four linear filters with coefficients at the B input. The
results from the four filters are shifted in the four-accumulator loop.
While the four filters context switches in a round-robin fashion at
input B every cycle, the input element on A changes only once every four
cycles and reduces power.
- PCIN is the P output of the downstream DSP58 in a cascade.
- C is an external input to the adder. Together with
FPOPMODE[1:0], the adder can be used independently from the multiplier
to compute P = C + D.
- The input 0 is used to pass P0 directly to P. It is
used, for instance, to initialize the accumulator to the first product
in a sum of products (vector dot-product) calculation. FPOPMODE[4] is a
single pin to initialize the accumulator.

The following tables outline the selection of P1 and P0.

Table 1. Selecting P1 with FPOPMODE[4:2]
FPOPMODE[4] |
FPOPMODE[3] |
FPOPMODE[2] |
P1 |

1 |
0 |
X |
P |

1 |
1 |
0 |
C |

1 |
1 |
1 |
PCIN |

0 |
X |
X |
0 |

Table 2. Selecting P0 with FPOPMODE[1:0]
FPOPMODE[1] |
FPOPMODE[0] |
P0 |

0 |
0 |
0 |

0 |
1 |
M |

1 |
0 |
PCIN |

1 |
1 |
D |