TM DSP - ADDER
Time-multiplexed pipelined adder optimized for DSP slices. Performs parallel addition across multiple TM phases with configurable fixed-point formats, optional saturation, and support for scalar broadcast. Features 1-8 stage pipeline with per-phase arithmetic.
Introduction
The block performs time-multiplexed addition across multiple data streams. On every
rising edge of CLK, when A_DV = 1 and B_DV = 1, the adder computes
$$ \mathrm{OUT}_i(n) = \mathrm{A}_i(n) + \mathrm{B}_i(n), \quad i = 0, \ldots, \text{TM}-1, $$
where each subscript $i$ represents a different TM phase, and TM is the time-multiplexing factor (4, 8, 16, or 32).
Input A is always time-multiplexed. Input B can be either time-multiplexed (performing
phase-by-phase addition) or scalar (broadcasting a single value to all phases).
The component leverages DSP48 slices for efficient hardware implementation with configurable pipeline stages (1-8) for optimal timing closure at high clock frequencies.
Pin Description
Properties
Number of integer bits for input A
Number of integer bits for input A. Range: 1-64. Determines the integer range of input A values.Default: 16
Options: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Number of fractional bits for input A
Number of fractional bits for input A. Range: 0-64. Determines the fractional precision of input A. Value interpretation: actual_value = integer_value / 2^(A_BitsFract)Default: 0
Options: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Select if input A is signed or unsigned
Arithmetic type for input A:
- UNSIGNED → Range: [0, 2^(total_bits) - 1]
- SIGNED → Range: [-2^(total_bits-1), 2^(total_bits-1) - 1]
Default: SIGNED
Options: UNSIGNED SIGNED
Number of integer bits for input B
Number of integer bits for input B. Range: 1-64. Determines the integer range of input B values.Default: 16
Options: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Number of fractional bits for input B
Number of fractional bits for input B. Range: 0-64. Determines the fractional precision of input B.Default: 0
Options: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Select if input B is signed or unsigned
Arithmetic type for input B:
- UNSIGNED → Non-negative values only
- SIGNED → Two’s complement representation
Default: SIGNED
Options: UNSIGNED SIGNED
Select if input B is Time Multiplexed or scalar
Determines if input B is time-multiplexed:
- NO → B is scalar, broadcast to all TM phases
- YES → B is TM, phase-by-phase addition with A
Default: NO
Options: NO YES
Number of integer bits for output
Number of integer bits for output. Range: 1-64. Should be ≥ max(A_BitsInt, B_BitsInt) + 1 for full range without overflow.Default: 16
Options: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Number of fractional bits for output
Number of fractional bits for output. Range: 0-64. Typically set to max(A_BitsFract, B_BitsFract) to preserve precision.Default: 0
Options: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Select if output is signed or unsigned
Arithmetic type for output:
- UNSIGNED → Output range [0, 2^N - 1]
- SIGNED → Output range [-2^(N-1), 2^(N-1) - 1]
Default: SIGNED
Options: UNSIGNED SIGNED
Time Multiplexing factor
Time multiplexing factor (number of parallel phases). Values: 4, 8, 16, 32. Determines how many independent data streams are processed through the same hardware operator.Default: 4
Options: 4 8 16 32
Number of pipeline stages (1-8)
Number of pipeline stages in the adder datapath. Range: 1-8. Higher values increase Fmax at the cost of latency. Total latency = PipelineLength × TM clock cycles.Default: 3
Options: 1 2 3 4 5 6 7 8
Enable output saturation (otherwise overflow)
Controls overflow behavior:
- YES → Saturate at maximum/minimum representable value
- NO → Wrap-around (modulo 2^N arithmetic)
Saturation is recommended for signal processing to avoid large errors.
Default: YES
Options: NO YES
Functional description
The component implements a time-multiplexed adder supporting independent fixed-point formats for each input:
$$ \text{OUT}[i] = A[i] + B \quad \text{or} \quad \text{OUT}[i] = A[i] + B[i], $$
where:
A[i]→ input A, phase $i$ (always TM)BorB[i]→ input B, scalar or TM phase $i$OUT[i]→ output, phase $i$ (always TM)
Each input has independently configurable:
- Integer bits (1-64)
- Fractional bits (0-64)
- Sign mode (SIGNED/UNSIGNED)
The output format is also independently configurable, allowing for headroom to prevent overflow or precision adjustment.
Time Multiplexing
Time multiplexing allows processing multiple data streams through a single hardware operator by cycling through different phases on consecutive clock cycles:
| Clock cycle | Processing phase |
|---|---|
| 0 | Phase 0 → OUT[0] = A[0] + B[0] |
| 1 | Phase 1 → OUT[1] = A[1] + B[1] |
| … | … |
| TM-1 | Phase TM-1 → OUT[TM-1] = A[TM-1] + B[TM-1] |
| TM | Phase 0 (next cycle) |
Scalar Broadcast Mode
When B is TM = NO, input B is broadcast to all TM phases:
OUT[0] = A[0] + B
OUT[1] = A[1] + B
...
OUT[TM-1] = A[TM-1] + B
This is useful for adding a constant offset or bias to all channels.
Overflow Handling
The Enable Saturation property controls overflow behavior:
- YES → Output saturates at maximum/minimum representable value
- NO → Output wraps around (modulo arithmetic)
Mathematical background
In fixed-point arithmetic with $N_{\text{int}}$ integer bits and $N_{\text{frac}}$ fractional bits, values represent:
$$ \text{value} = \frac{\text{integer representation}}{2^{N_{\text{frac}}}} $$
For addition, the integer representations are summed and the result is scaled to the output format.
Pipeline and Timing
The Pipeline Length property (1-8 stages) controls latency versus maximum clock frequency:
| Pipeline Length | Latency (clock cycles) | Typical Fmax improvement |
|---|---|---|
| 1 | TM × 1 | Baseline |
| 2 | TM × 2 | +20% |
| 3 | TM × 3 | +35% |
| 4 | TM × 4 | +45% |
| 8 | TM × 8 | +60% |
Total latency = Pipeline Length × TM factor
DSP Slice Utilization
The component targets Xilinx DSP48 slices for efficient implementation. Each DSP slice can perform one addition per clock cycle, making it ideal for high-throughput TM designs.
Typical use cases
- Multi-channel signal processing (audio, video, communications)
- Parallel filter banks with multiple channels
- MIMO systems requiring simultaneous processing of multiple streams
- Resource-efficient high-throughput arithmetic where multiple operations share hardware
- Bias addition in neural network accelerators
Waveform example
Example with TM=4, Pipeline=3, B is scalar: