High Throughput Complex Multiply
- Updated2025-01-28
- 8 minute(s) read
Computes the product of two complex numbers.
The High Throughput Complex Multiply function multiplies two complex numbers x = xr + jxi and y = yr + jyi, to produce a product p, as shown in the equation below.
p = x*y = pr + jpi
where pr = xryr – xiyi and pi = xryi + xiyr
This function supports only scalar values of the fixed-point data type.

Dialog Box Options
Option | Description |
---|---|
Fixed-Point Configuration |
Specifies the encodings, word lengths, and integer word lengths of the input and output terminals of this function. The configurations you specify determine the value range of the terminals.
|
Execution Mode |
Specifies how this function executes.
|
Pipelining Options |
Specifies options for pipelining this function internally. These options affect the maximum clock rate at which this function can compile. Refer to the Improving Function Performance by Pipelining section of this topic for information about this relationship.
|
Registers |
Specifies whether to add internal registers for function inputs and/or outputs. These registers will be placed outside of any embedded resources, such as block multipliers or DSP48E slices. This section is available only if you select Inside single-cycle Timed Loop. Note Adding registers can reduce the length of the combinatorial path, which can prevent compilation errors that result from a long combinatorial path. However, adding registers also increases the latency of this function, which means this function takes additional clock cycles to return a valid result.
|
Optional Terminal |
Specifies a setting for displaying an optional block diagram terminal.
|
Configuration Feedback |
Displays information about how this function executes. This information is based on the configuration options you specify. |
Inputs/Outputs
![]() Specifies the real part of the x multiplicand. ![]() Specifies the imaginary part of the x multiplicand. ![]() Specifies the real part of the y multiplicand. ![]() Specifies the imaginary part of the y multiplicand. Specifies whether the next data point has arrived for processing. Wire the output valid output of an upstream node to this input to transfer data from the upstream node to this node. To display this handshaking terminal, select Inside single-cycle Timed Loop option and perform either of the following actions:
These options are located in the configuration dialog box. Specifies whether downstream nodes are ready for this node to return a new value. The default is TRUE. Use a Feedback Node to wire ready for input output of a downstream node to this input of the current node. Note If this terminal is FALSE during a given cycle, the output valid terminal returns FALSE during that cycle.
To display this terminal, select the Inside single-cycle Timed Loop option and perform either of the following actions:
These options are located in the configuration dialog box. ![]() Returns the real part of the product. ![]() Returns the imaginary part of the product. Returns TRUE if the theoretical computed value exceeds the valid range of the output data type. If operation overflow returns TRUE, the Overflow mode option determines the value this function returns. LabVIEW displays the operation overflow terminal only if you place a checkmark in the Operation overflow checkbox. This checkbox is located in the Optional Terminal section of the configuration dialog box. Returns TRUE if this node has computed a result that downstream nodes can use. Wire this output to the input valid input of a downstream node to transfer data from the node to the downstream node. To display this terminal, select the Inside single-cycle Timed Loop option and perform either of the following actions:
These options are located in the configuration dialog box. Returns TRUE if this node is ready to accept new input data. Use a Feedback Node to wire this output to the ready for output input of an upstream node. Note If this terminal returns FALSE during a given cycle, LabVIEW discards any data that other nodes send to this node during the following cycle. LabVIEW discards this data even if the input valid terminal is TRUE during the following cycle.
To display this terminal, select the Inside single-cycle Timed Loop option and perform either of the following actions:
These options are located in the configuration dialog box. |
During the cycles before output valid returns TRUE for the first time, this function might return different results on an FPGA target than on a host computer. The results become identical after the first time output valid returns TRUE.
Improving Function Performance by Pipelining
You can improve the timing performance of this function on an FPGA target by adjusting the Number of pipelining stages. The functionality of a pipelined multiplier is equivalent to a non-pipelined multiplier cascaded by a certain number of registers. The number of registers is equal to the number of pipelining stages.
In general, increasing the Number of pipelining stages also increases the maximum clock rate at which this function can compile. However, the actual clock rate depends on many factors, including the following:
- The FPGA target you use
- The size of the multiplier
- The rounding and overflow modes you select
- The Implementation resource you select
- Other FPGA logic besides the multiplier