Convolution (triggered, loadable kernel)
Triggered full linear convolution with a kernel loadable at run time through the COEF_ADDR / COEF_DATA / COEF_LOAD pins (typically driven by a register bank filled from the SDK). Same engine as the fixed-kernel variant: capture K samples on START, then stream all 2K-1 convolution points with DV / FIRST / LAST. One MAC, II=1.
Introduction
Identical to Convolution (triggered, fixed kernel) except the kernel coefficients live in a RAM inside the IP:
- drive
COEF_ADDRwith the tap index (0 .. K-1), - drive
COEF_DATAwith the signed coefficient, - pulse
COEF_LOADfor one clock to latch it.
Coefficient writes are honoured on every clock, in any state; avoid
rewriting coefficients while BUSY = 1 if you need a coherent kernel
for the acquisition in progress.
$$ y[p] = \sum_{m} x[m] \cdot h[p-m], \quad p = 0 \ldots 2K-2 $$
Pin Description
Properties
Bit width of the signed input samples.
Bit width of the signed input samples: 16, 24 or 32.Default: 16
Options: 16 24 32
Bit width of each kernel coefficient (signed). Width of the COEF_DATA input.
Bit width of each kernel coefficient (signed), 8..32. Width of COEF_DATA.Default: 16
Options: 8 10 12 14 16 18 20 24 28 32
Number of kernel coefficients K (coefficient RAM depth). The IP captures K samples after START.
Number of kernel coefficients K (2..4096) = coefficient RAM depth.Default: 64
Range: 2 – 4096
Number of parallel MAC units P (1 .. KernelLen, clamped to KernelLen at compile time). Each convolution point takes ceil(K/P) clocks, the whole graph ~ (2K-1)*ceil(K/P) clocks plus the 2K-1 clock output burst. Cost: P multipliers and P memory banks.
Number of parallel MAC units P (1..K, clamped to KernelLen at compile time). Each convolution point takes $\lceil K/P \rceil$ clocks, so the full graph costs about $(2K-1)\cdot\lceil K/P \rceil$ clocks plus the $2K-1$ clock output burst. Cost: P multipliers (DSP), P input-buffer banks and P private copies of the coefficient RAM (each COEF_LOAD write goes to all copies), so memory grows with P as well.Default: 1
Range: 1 – 4096
Loading the kernel
text
for k in 0 .. K-1:
COEF_ADDR <= k
COEF_DATA <= h[k]
COEF_LOAD <= 1 for one clock
Coefficients not written default to 0 after configuration.
Operation and timing
Same as the fixed variant: COLLECT (K clocks) then COMPUTE (~K*(2K-1) clocks with one MAC), each finished point streamed with DV=1, FIRST at p=0, LAST at p=2K-2, BUSY high outside IDLE.
Output width
$$ \text{OUT_BITS} = \text{InputSize} + \text{CoefSize} + \lceil \log_2 K \rceil $$