Statistical Analysis in SerDes Systems

A SerDes system simulation involves a transmitter (Tx) and a receiver (Rx) connected by a passive analog channel. There are two distinct phases to a SerDes system simulation: statistical analysis and time-domain analysis. Statistical analysis (also known as analytical, linear time-invariant, or Init analysis) is based on impulse responses enabling fast analysis and adaptation of equalization algorithms. Time-domain analysis (also known as empirical, bit-by-bit or GetWave analysis) is a waveform-based implementation of equalization algorithms that can optionally include nonlinear effects.

The reference flow of statistical analysis differs from time-domain analysis. During a statistical analysis simulation, an impulse response is generated. The impulse response represents the combined response of the transmitter’s analog output, the channel, and the receiver’s analog front end. The impulse response of the channel is modified by the transmitter model's statistical functions. The modified impulse response from the transmitter output is then further modified by the receiver model's statistical functions. The simulation is then completed using the final modified impulse response which represents the behavior of both AMI models combined with the analog channel.

Image showing the workflow of statistical simulation

During a time-domain simulation, a digital stimulus waveform is passed to the transmitter model's time-domain function. This modified time-domain waveform is then convolved with the analog channel impulse response used in the statistical simulation. The output of this convolution is then passed to the receiver model's time-domain function. The modified output of the receiver becomes the simulation waveform at the receiver latch.

Image showing the workflow of time-domain simulation

In SerDes Toolbox™, the Init subsystem within both the Tx and Rx blocks uses an Initialize Function Simulink® block. The Initialize Function block contains a MATLAB® function to handle the statistical analysis of an impulse response vector. The impulse response vector is generated by the Analog Channel block.

The MATLAB code within the Init subsystems mimics the architecture of Simulink time-domain simulation by initializing and setting up the library blocks from the SerDes Toolbox that implement equalization algorithms. Each subsystem then processes the impulse response vector through one or more System objects representing the corresponding blocks.

Additionally, an Init subsystem can adapt or optimize the equalization algorithms and then apply the modified algorithms to the impulse response. The output of an Init subsystem is an adapted impulse response. If the Init subsystem adapts the equalization algorithms, it can also output the modified equalization settings as AMI parameters. These modified equalization parameters can also be passed to the time-domain analysis as an optimal setting or to provide a starting point for faster time-domain adaptation.

Init Subsystem Workflow

In a Simulink model of a SerDes system, there are two Init subsystems, one on the transmitter side (Tx block) and one on the receiver side (Rx block). During statistical analysis, the impulse response of the analog channel is first equalized by the Init subsystem inside the Tx block based on the System object™ properties. The modified impulse response is then fed as an input to the Rx block. The Init system inside the Rx block further equalizes the impulse response and produces the final output.

The System objects corresponding to the Tx and Rx blocks modify the impulse response in the same order as they were received. If there are multiple self-adapting System objects in a Tx or Rx block, each System object finds the best setting for the impulse response and modifies it before sending it to the next System object.

The final equalized impulse response is used to derive the pulse response, statistical eye, and the waveforms.

Image showing the results of Init Statistical analysis. There are four plots in the image. The top left plot shows the unequalized and equalized pulse responses. The top right plot shows the statistical eye. The bottom left plot shows the unequalized and equalized waveforms derived from the pulse response. And the bottom right plot reports the eye height, eye width, eye are, COM, and VEC metrics.

SerDes System Using Init Subsystem

To understand how an Init subsystem handles statistical analysis in a SerDes system, create a SerDes system using the SerDes Designer App. The SerDes system contains an FFE block on the Tx side and CTLE and DFECDR blocks on the Rx side. Use the default settings for each block.

Export the SerDes system to a Simulink model. In Simulink, double-click the Tx block to open the Init block. Then double-click the Init block to open the Block Parameters dialog box. Click the Show Init button to open the code pertaining to the Init function of the transmitter.

The Init function first reshapes the impulse response vector of the analog channel into a 2-D matrix. The first column in the 2-D matrix represents the analog channel impulse response (victim). The subsequent columns (if any are present) represent the crosstalk (aggressors).

%% Impulse response formatting
% Size ImpulseOut by setting it equal to ImpulseIn
ImpulseOut = ImpulseIn;
% Reshape ImpulseIn vector into a 2D matrix using RowSize and Aggressors called LocalImpulse
LocalImpulse = zeros(RowSize,Aggressors+1);
AggressorPosition = 1;
for RowPosition = 1:RowSize:RowSize*(Aggressors+1)
    LocalImpulse(:,AggressorPosition) = ImpulseIn(RowPosition:RowSize-1+RowPosition)';
    AggressorPosition = AggressorPosition+1;
end

Then the Init function initializes the System objects that represent the blocks on the Tx side and sets up the simulation and AMI parameters and the block properties. In this SerDes system, there is only one block on the Tx side, FFE.

%% Instantiate and setup system objects
% Create instance of serdes.FFE for FFE
FFEInit = serdes.FFE('WaveType', 'Impulse');
% Setup simulation parameters
FFEInit.SymbolTime = SymbolTime;
FFEInit.SampleInterval = SampleInterval;
% Setup FFE In and InOut AMI parameters
FFEInit.Mode = FFEParameter.Mode;
FFEInit.TapWeights = FFEParameter.TapWeights;
% Setup FFE block properties
FFEInit.Normalize = true;

The channel impulse response is then processed by the System object on the Tx side.

%% Impulse response processing via system objects
% Return impulse response for serdes.FFE instance
LocalImpulse = FFEInit(LocalImpulse);

The modified impulse response in 2-D matrix form is reshaped back into an impulse response vector and sent to the Rx side for further equalization.

%% Impulse response reformating
% Reshape LocalImpulse matrix into a vector using RowSize and Aggressors
ImpulseOut(1:RowSize*(Aggressors+1)) = LocalImpulse;

Similarly, if you look at the Rx Init code, you can see that the Rx Init function first reshapes the output of the Tx Init function into a 2-D matrix.

Then the Init function initializes the System objects that represent the blocks on the Rx side and sets up the simulation and AMI parameters and the block properties. In this case, there are two blocks on the Rx side, CTLE and DFECDR.

%% Instantiate and setup system objects
% Create instance of serdes.CTLE for CTLE
CTLEInit = serdes.CTLE('WaveType', 'Impulse');
% Setup simulation parameters
CTLEInit.SymbolTime = SymbolTime;
CTLEInit.SampleInterval = SampleInterval;
% Setup CTLE In and InOut AMI parameters
CTLEInit.Mode = CTLEParameter.Mode;
CTLEInit.ConfigSelect = CTLEParameter.ConfigSelect;
% Setup CTLE block properties
CTLEInit.Specification = 'DC Gain and Peaking Gain';
CTLEInit.DCGain = [0 -1 -2 -3 -4 -5 -6 -7 -8];
CTLEInit.ACGain = 0;
CTLEInit.PeakingGain = [0 1 2 3 4 5 6 7 8];
CTLEInit.PeakingFrequency = 5000000000;
CTLEInit.GPZ = [0 -23771428571 -10492857142 -13092857142;-1 -17603571428 -7914982142 -13344642857;...
-2 -17935714285 -6845464285 -13596428571;-3 -15321428571 -5574642857 -13848214285;...
-4 -15600000000 -4960100000 -14100000000;-5 -15878571428 -4435821428 -14351785714;...
-6 -16157142857 -3981285714 -14603571428;-7 -16435714285 -3581089285 -14855357142;...
-8 -16714285714 -3227142857 -15107142857];
% Create instance of serdes.DFECDR for DFECDR
DFECDRInit = serdes.DFECDR('WaveType', 'Impulse');
% Setup simulation parameters
DFECDRInit.SymbolTime = SymbolTime;
DFECDRInit.SampleInterval = SampleInterval;
DFECDRInit.Modulation = Modulation;
% Setup DFECDR In and InOut AMI parameters
DFECDRInit.ReferenceOffset = DFECDRParameter.ReferenceOffset;
DFECDRInit.PhaseOffset = DFECDRParameter.PhaseOffset;
DFECDRInit.Mode = DFECDRParameter.Mode;
DFECDRInit.TapWeights = DFECDRParameter.TapWeights;
% Setup DFECDR block properties
DFECDRInit.EqualizationGain = 9.6e-05;
DFECDRInit.EqualizationStep = 1e-06;
DFECDRInit.MinimumTap = -1;
DFECDRInit.MaximumTap = 1;
DFECDRInit.Count = 16;
DFECDRInit.ClockStep = 0.0078;
DFECDRInit.Sensitivity = 0;

The impulse response that was previously modified by the System objects on the Tx side is then further modified by the System objects on the Rx side.

%% Impulse response processing via system objects
% Return impulse response and any Out or InOut AMI parameters for serdes.CTLE instance
[LocalImpulse, CTLEConfigSelect] = CTLEInit(LocalImpulse);
% Return impulse response and any Out or InOut AMI parameters for serdes.DFECDR instance
[LocalImpulse, DFECDRTapWeights, DFECDRPhase, ~, ~] = DFECDRInit(LocalImpulse);

The final equalized impulse response in 2-D matrix form is reshaped back into an impulse response vector.

Each Init function also contains a section, Custom user code area, where you can customize your own code.

%% BEGIN: Custom user code area (retained when 'Refresh Init' button is pressed)

% END: Custom user code area (retained when 'Refresh Init' button is pressed)

For more information on how you can use the Custom user code area, see Customizing Datapath Building Blocks and Implement Custom CTLE in SerDes Toolbox PassThrough Block.

See Also

| | |

Related Topics