Decision feedback equalizer (DFE) with clock and data recovery (CDR)
SerDes Toolbox / Datapath Blocks
The DFECDR block adaptively processes a sample-by-sample input signal or analytically processes an impulse response vector input signal to remove distortions at post cursor taps.
The DFE modifies baseband signals to minimize the intersymbol interference (ISI) at the clock sampling times. The DFE samples data at each clock sample time and adjusts the amplitude of the waveform by a correction voltage.
For impulse response processing, the hula-hoop algorithm is used to find the clock sampling locations. The zero-forcing algorithm is then used to determine the N correction factors necessary to have no ISI at the N subsequent sampling locations, where N is the number of DFE taps.
For sample-by-sample processing, the clock recovery is accomplished by a first order phase tracking model. The bang-bang phase detector utilizes the unequalized edge samples and equalized data samples to determine the optimum sampling location. The DFE correction voltage for the N-th tap is adaptively found by finding a voltage that compensates for any correlation between two data samples spaced by N symbol times. This requires a data pattern that is uncorrelated with the channel ISI for correct adaptive behavior.
WaveIn
— Input baseband signalInput baseband signal. The input signal can be a sample-by-sample signal specified as a scalar, or an impulse response vector signal.
Data Types: double
WaveOut
— Estimated channel outputEstimated channel output. If the input signal is a sample-by-sample signal specified as a scalar, the output is also scalar. If the input signal is an impulse response vector signal, the output is also a vector.
Data Types: double
Mode
— DFE operating modeAdapt
(default) | Off
| Fixed
DFE operating mode:
Off
— DFECDR is bypassed and the input
waveform remains unchanged.
Fixed
— DFECDR applies the input DFE tap
weights specified in Initial tap weights (V) to the input
waveform.
Adapt
— The Init subsystem calls to the DFECDR
System object™. The DFECDR System object finds the optimum DFE tap values for the best eye height opening
for statistical analysis. During time domain simulation, DFECDR uses the adapted
values as the starting point and applies them to the input waveform. For more
information about the Init subsystem, see Statistical Analysis in SerDes Systems.
Use get_param(gcb,'Mode')
to view the current DFECDR
Mode.
Use set_param(gcb,'Mode',value)
to set DFECDR to a
specific Mode.
Initial tap weights (V)
— Initial DFE tap weights[0 0 0 0]
(default) | row vectorInitial DFE tap weights, specified as a row vector in volts. The length of the vector specifies the number of DFE taps. The vector element value specifies the strength of the tap at that element position. Setting a vector element value to zero only initializes the tap.
You can use a valid MATLAB expression to evaluate the Initial tap weights (V) row vector.
Example: set_param(gcb,'TapWeights',"zeros(1,100)")
creates a
DFE with 100 taps.
Use get_param(gcb,'TapWeights')
to view the current
value of DFECDR Initial tap weights (V).
Use set_param(gcb,'TapWeights',value)
to set DFECDR to
a specific Initial tap weights (V) vector value.
Data Types: double
Adaptive gain
— Controls DFE tap weight update rate9.6e-5
(default) | positive real scalarControls DFE tap weight update rate, specified as a unitless positive real scalar. Increasing the value of Adaptive gain leads to a faster convergence of DFE adaptation at the expense of more noise in DFE tap values.
Use get_param(gcb,'EqualizationGain')
to view the
current DFECDR Adaptive gain value.
Use set_param(gcb,'EqualizationGain',value)
to set
DFECDR to a specific value of Adaptive gain.
Data Types: double
Adaptive step size (V)
— DFE adaptive step resolution1e-06
(default) | nonnegative real scalar | nonnegative real-valued row vectorDFE adaptive step resolution, specified as a nonnegative real scalar or a nonnegative real-valued row vector in volts. Specify as a scalar to apply to all the DFE taps or as a vector that has the same length as the Initial tap weights (V).
Adaptive step size (V) specifies the minimum DFE tap change
from one time step to the next to mimic hardware limitations. Setting
Adaptive step size (V) to 0
yields DFE tap
values without any resolution limitation.
Use get_param(gcb,'EqualizationStep')
to view the
current DFECDR Adaptive step size (V) value.
Use set_param(gcb,'EqualizationStep',value)
to set
DFECDR to a specific value of Adaptive step size
(V).
Data Types: double
Minimum DFE tap value (V)
— Minimum value of adapted taps-1
(default) | real scalar | real-valued row vectorMinimum value of the adapted taps, specified as a real scalar or a real-valued row vector in volts. Specify as a scalar to apply to all the DFE taps or as a vector that has the same length as the Initial tap weights (V).
Use get_param(gcb,'MinimumTap')
to view the current
DFECDR Minimum DFE tap value (V) value.
Use set_param(gcb,'MinimumTap',value)
to set DFECDR to
a specific value of Minimum DFE tap value (V).
Data Types: double
Maximum DFE tap value (V)
— Maximum value of adapted taps1
(default) | nonnegative real scalar | nonnegative real-valued row vectorMaximum value of the adapted taps, specified as a nonnegative real scalar or a nonnegative real-valued row vector in volts. Specify as a scalar to apply to all the DFE taps or as a vector that has the same length as the Initial tap weights (V).
Use get_param(gcb,'MaximumTap')
to view the current
DFECDR Maximum DFE tap value (V) value.
Use set_param(gcb,'MaximumTap',value)
to set DFECDR to
a specific value of Maximum DFE tap value (V).
Data Types: double
2x tap weights
— Multiply DFE tap weights by a factor of twoSelect to multiply the DFE tap weights by a factor of two.
The output of the slicer in the DFECDR block from the SerDes Toolbox™ is [-0.5 0.5]. But some industry applications require the slicer output to be [-1 1]. 2x tap weights allows you to quickly double the DFE tap weights to change the slicer reference.
Phase offset (symbol time)
— Manual clock phase offset0
(default) | real scalar in the range [−0.5, 0.5]Manual clock phase offset to move the recovered clock phase, specified as a real scalar in the range [-0.5, 0.5] in the fraction of symbol time. Phase offset (symbol time) is used to manually shift the clock probability distribution function (PDF) for a better bit error rate (BER).
Use get_param(gcb,'PhaseOffset')
to view the current
DFECDR Phase offset (symbol time) value.
Use set_param(gcb,'PhaseOffset',value)
to set DFECDR to
a specific value of Phase offset (symbol time).
Data Types: double
Reference offset (ppm)
— Reference clock offset impairment0
(default) | real scalar in the range [−300, 300]Reference clock offset impairment, specified as a real scalar in the range [−300, 300] in parts per million (ppm). Reference offset (ppm) is the deviation between transmitter oscillator frequency and receiver oscillator frequency.
Use get_param(gcb,'ReferenceOffset')
to view the
current DFECDR Reference offset (ppm) value.
Use set_param(gcb,'ReferenceOffset',value)
to set
DFECDR to a specific value of Reference offset
(ppm).
Data Types: double
Early/late count threshold
— Early or late CDR count threshold to trigger phase update16
(default) | positive real integer ≥5Early or late CDR count threshold to trigger a phase update, specified as a unitless positive real integer ≥5. Increasing the value of Early/late count threshold provides a more stable output clock phase at the expense of convergence speed. Because the bit decisions are made at the clock phase output, a more stable clock phase has a better bit error rate (BER).
Early/late count threshold also controls the bandwidth of the CDR, which is approximately calculated by using the equation:
Use get_param(gcb,'Count')
to view the current DFECDR
Early/late count threshold value.
Use set_param(gcb,'Count',value)
to set DFECDR to a
specific value of Early/late count threshold.
Data Types: double
Step (symbol time)
— Clock phase resolution0.0078
(default) | real scalarClock phase resolution of the recovered clock, specified as a real scalar in fraction of symbol time. Step (symbol time) is the inverse of the number of phase adjustments in the CDR. If the CDR has 128 steps of phase adjustment, the Step (symbol time) value is 1/128.
Use get_param(gcb,'ClockStep')
to view the current
DFECDR Step (symbol time) value.
Use set_param(gcb,'ClockStep',value)
to set DFECDR to a
specific value of Step (symbol time).
Data Types: double
Sensitivity (V)
— Sampling latch metastability voltage0
(default) | real scalarSampling latch metastability voltage, specified as a real scalar in volts. If the data sample voltage lies within the region of (±Sensitivity (V)), there is a 50% probability of bit error.
Use get_param(gcb,'Sensitivity')
to view the current
DFECDR Sensitivity (V) value.
Use set_param(gcb,'Sensitivity',value)
to set DFECDR to
a specific value of Sensitivity (V).
Data Types: double
Mode
— Include Mode parameter in IBIS-AMI modelSelect to include Mode as a parameter in the IBIS-AMI file. If you deselect Mode, it is removed from the AMI files, effectively hard-coding Mode to its current value.
Tap weights
— Include Tap weights parameter in IBIS-AMI modelSelect to include Tap weights as a parameter in the IBIS-AMI file. If you deselect Tap weights, it is removed from the AMI files, effectively hard-coding Tap weights to its current value.
Phase Offset
— Include Phase Offset parameter in IBIS-AMI modelSelect to include Phase Offset as a parameter in the IBIS-AMI file. If you deselect Phase Offset, it is removed from the AMI files, effectively hard-coding Phase Offset to its current value.
Reference offset
— Include Reference offset parameter in IBIS-AMI modelSelect to include Reference offset as a parameter in the IBIS-AMI file. If you deselect Reference offset, it is removed from the AMI files, effectively hard-coding Reference offset to its current value.