Skip to content

olo_fix_mix_c2r

Back to Entity List

Status Information

VHDL Source: olo_fix_mix_c2r
Bit-true Model: olo_fix_mix_c2r

Description

This entity implements a complex-to-real mixer. It multiplies a complex input signal (In_SigI, In_SigQ) with a complex local oscillator (In_MixI, In_MixQ) to produce a real output signal (Out_SigReal).

The downconversion convention is used, which corresponds to multiplying by the conjugate of the local oscillator:

Out_SigReal = +In_SigI x In_MixI + In_SigQ x In_MixQ

Two I/Q handling modes are supported, selected by the IqHandling_g generic:

  • Parallel -- I and Q channels of both signal and mixer are presented simultaneously on separate ports. Two multiply-accumulate operations run in parallel.
  • TDM -- I sample is followed immediately by Q sample on shared ports (In_SigIQ, In_MixIQ). One multiplier is time-shared between the I and Q products; one real output sample is produced per I/Q pair.

The In_Last port is used in TDM mode to re-synchronise the I/Q phase: after In_Last is asserted the first sample received is treated as I. In Parallel mode In_Last is ignored.

For details about the fixed-point number format used in Open Logic, refer to the fixed point principles.

Generics

Name Type Default Description
InFmt_g string - Input signal format
String representation of an en_cl_fix Format_t (e.g. "(1,1,15)")
MixFmt_g string - Local oscillator format
String representation of an en_cl_fix Format_t (e.g. "(1,0,15)")
OutFmt_g string - Output format
String representation of an en_cl_fix Format_t (e.g. "(1,1,15)")
Round_g string "Trunc_s" Rounding mode
String representation of an en_cl_fix FixRound_t.
Saturate_g string "Warn_s" Saturation mode
String representation of an en_cl_fix FixSaturate_t.
MultRegs_g natural 1 Number of pipeline stages for the multiplication
IqHandling_g string "Parallel" I/Q handling mode: "Parallel" or "TDM"

Interfaces

Control

Name In/Out Length Default Description
Clk in 1 - Clock
Rst in 1 - Reset input (high-active, synchronous to Clk)

Input Data

Name In/Out Length Default Description
In_Valid in 1 '1' AXI4-Stream handshaking signal for all inputs
In_SigI in width(InFmt_g) (all zeros) Signal in-phase component for IqHandling_g="Parallel"
Format: InFmt_g
In_SigQ in width(InFmt_g) (all zeros) Signal quadrature component for IqHandling_g="Parallel"
Format: InFmt_g
In_MixI in width(MixFmt_g) (all zeros) Oscillator in-phase component for IqHandling_g="Parallel"
Format: MixFmt_g
In_MixQ in width(MixFmt_g) (all zeros) Oscillator quadrature component for IqHandling_g="Parallel"
Format: MixFmt_g
In_SigIQ in width(InFmt_g) (all zeros) Signal I then Q for IqHandling_g="TDM"
Format: InFmt_g
In_MixIQ in width(MixFmt_g) (all zeros) Oscillator I then Q for IqHandling_g="TDM"
Format: MixFmt_g
In_Last in 1 '0' TDM re-sync: marks the last Q sample; the next sample is treated as I

In_Valid is the single handshaking signal for all inputs. Ready is not supported; the entity accepts data every cycle In_Valid is asserted.

Output Data

Name In/Out Length Default Description
Out_Valid out 1 - AXI4-Stream handshaking signal for Out_SigReal
Out_SigReal out width(OutFmt_g) - Real output
Format: OutFmt_g

In TDM mode, one output sample is produced per I/Q input pair, so the output rate is half the input sample rate.

Detail

Parallel Architecture

The parallel architecture uses two multiply-accumulate operations whose structure matches the I-path of olo_fix_cplx_mult in MULT4/Parallel/MIX mode.

parallel architecture

Latency This architecture has a latency of MultRegs_g+ 3 + resize_latency clock cycles.

Where resize_latency is calculated as follows:

  • +1 cycle if Round_g is NOT "Trunc_s"
  • +1 cycle if Saturate_g is NOT "None_s"/"Warn_s"

TDM Architecture

The TDM architecture time-shares a single multiplier between the I and Q products, following the same pipeline as olo_fix_cplx_mult in TDM/MIX mode but producing only the real output.

TDM architecture

The In_Last signal (sampled on the Q slot) resets the I/Q phase tracker so that the immediately following sample is treated as I. This mirrors the resync behaviour of olo_fix_cplx_mult.

Latency (TDM): MultRegs_g + 3 clock cycles from the I input sample, plus one cycle each for rounding and saturation when those registers are enabled.

The latency is defined as Q-sample input to real output.