Complex Multiplier (complex_multiplier)
Multiplies together two complex values.
Design
The mathematical representation of the implementation is given in (150).
In (150):
\(x[n]\) and \(y[n]\) are the input values.
\(z[n]\) is the output values.
A block diagram representation of the implementation is given in Figure 473:.
Figure 473: Complex multiplier implementation.
Implementation
The complex multiplication is done as four multiplications, as show in (151).
This primitive is fully pipelined with two + input_shift_length_g cycles of latency.
The output can be optionally right shifted by setting the bit_drop_g generic. This is useful when it is desired that the inputs and outputs are the same width.
Interface
Generics
input_a_size_g(integer): A input bit width of the complex multiplier.
input_b_size_g(integer): B input bit width of the complex multiplier.
output_size_g(integer): Output bit width of the complex multiplier.
bit_drop_g(integer): Number of places to right shift the result of the multiplier by before connecting it to the output port.
input_shift_length_g(integer): Sets the number of registers in the input path. Usually absorbed by the DSP slices for timing optimisations.
Ports
clk(std_logic), in: Clock. Inputs and outputs registered on rising edge.
rst(std_logic), in: Reset. Active high, synchronous with rising edge of clock.
enable(std_logic), in: Enable. Primitive enabled when high.
a_real(signed,input_a_size_gbits), in: \(\operatorname{Re}(a)\) input.
a_imag(signed,input_a_size_gbits), in: \(\operatorname{Im}(a)\) input.
b_real(signed,input_b_size_gbits), in: \(\operatorname{Re}(b)\) input.
b_imag(signed,input_b_size_gbits), in: \(\operatorname{Im}(b)\) input.
p_real(signed,output_size_gbits), out: \(\operatorname{Re}(y)\) output.
p_imag(signed,output_size_gbits), out: \(\operatorname{Im}(y)\) output.
Dependencies
The dependencies to other elements in OpenCPI are:
None.
There is also a dependency on:
ieee.std_logic_1164
ieee.numeric_std
Limitations
Limitations of complex_multiplier are:
None.