Статистический анализ в системах SerDes

Системная симуляция SerDes включает передатчик (Tx) и приемник (Rx), соединенные пассивным аналоговым каналом. В системной симуляции SerDes существуют две отдельные фазы: статистический анализ и анализ временной области. Статистический анализ (также известный как аналитический, линейный инвариантный по времени или анализ Init) основан на импульсных характеристиках, позволяющих быстро анализировать и адаптировать алгоритмы эквализации. Анализ во временной области (также известный как эмпирический, битовый или GetWave анализ) является основанной на форме волны реализацией алгоритмов эквализации, которые могут опционально включать нелинейные эффекты.

Эталонный поток статистического анализа отличается от анализа во временной области. Во время симуляции статистического анализа генерируется импульсная характеристика. Импульсная характеристика представляет совокупную характеристику аналогового выхода передатчика, канала и аналогового переднего конца приемника. Импульсная характеристика канала изменяется статистическими функциями модели передатчика. Модифицированная импульсная характеристика от выхода передатчика затем дополнительно изменяется статистическими функциями модели приемника. Симуляция затем завершается с использованием окончательной модифицированной импульсной характеристики, которая представляет поведение обеих моделей AMI в сочетании с аналоговым каналом.

Image showing the workflow of statistical simulation

Во время симуляции во временной области в функцию модели передатчика во временной области передается сигнал цифрового стимула. Эта измененная форма волны временной области затем свертывается с импульсной характеристикой аналогового канала, используемой в статистической симуляции. Выход этой свертки затем передается в функцию временной области модели приемника. Измененный выход приемника становится формой волны симуляции на защелке приемника.

Image showing the workflow of time-domain simulation

В SerDes Toolbox™ подсистема Init в блоках Tx и Rx использует Initialize Function Simulink® блок. Блок Initialize Function содержит MATLAB® функция для обработки статистического анализа вектора импульсной характеристики. Вектор импульсной характеристики генерируется блоком Analog Channel.

Код MATLAB в подсистемах Init имитирует архитектуру симуляции временной области Simulink путем инициализации и настройки библиотечных блоков из SerDes Toolbox, которые реализуют алгоритмы эквализации. Затем каждая подсистема обрабатывает вектор импульсной характеристики через один или несколько системные объекты, представляющих соответствующие блоки.

Кроме того, подсистема Init может адаптировать или оптимизировать алгоритмы эквализации, а затем применить измененные алгоритмы к импульсной характеристики. Выход подсистемы Init является адаптированной импульсной характеристикой. Если подсистема Init адаптирует алгоритмы эквализации, она также может вывести измененные настройки эквализации как параметры AMI. Эти измененные параметры эквализации могут также быть переданы в анализ временной области в качестве оптимальной настройки или для предоставления начальной точки для более быстрой адаптации временной области.

Рабочий процесс Init Subsystem

В модели Simulink системы SerDes существует две подсистемы Init, одна на стороне передатчика (блок Tx) и одна на стороне приемника (блок Rx). Во время статистического анализа импульсная характеристика аналогового канала сначала уравнивается подсистемой Init внутри блока Tx на основе свойств System object™. Модифицированная импульсная характеристика затем подается как вход в блок Rx. Система Init внутри блока Rx дополнительно выравнивает импульсную характеристику и выдает конечный выход.

Системные объекты, соответствующие блокам Tx и Rx, изменяют импульсную характеристику в том же порядке, в котором они были получены. Если в блоке Tx или Rx существуют несколько самоадаптируемых Системные объекты, каждый Системный объект находит лучшую настройку для импульсной характеристики и изменяет ее перед отправкой на следующий Системный объект.

Конечная уравненная импульсная характеристика используется, чтобы вывести импульсную характеристику, статистический глаз и формы волны.

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, использующая подсистему Init

Чтобы понять, как подсистема Init обрабатывает статистический анализ в системе SerDes, создайте систему SerDes с помощью SerDes Designer Приложения. Система SerDes содержит блок FFE на стороне Tx и блоки CTLE и DFECDR на стороне Rx. Используйте настройки по умолчанию для каждого блока.

Экспорт системы SerDes в модель Simulink. В Simulink дважды кликните блок Tx, чтобы открыть блок Init. Затем дважды кликните блок Init, чтобы открыть диалоговое окно Параметры Блоков. Нажмите кнопку Show Init, чтобы открыть код, относящийся к функции Init передатчика.

Функция Init сначала перестраивает вектор импульсной характеристики аналогового канала в матрицу 2-D. Первый столбец в матрице 2-D представляет импульсную характеристику аналогового канала (жертва). Последующие столбцы (если таковые имеются) представляют перекрестные помехи (агрессоры).

%% 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

Затем функция Init инициализирует системные объекты, которые представляют блоки на стороне Tx, и настраивает параметры simulation и AMI и свойства блоков. В этой системе SerDes существует только один блок на стороне Tx, 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;

Импульсная характеристика канала затем обрабатывается системным объектом на стороне Tx.

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

Модифицированная импульсная характеристика в 2-D матричной форме переформулируется назад в вектор импульсной характеристики и отправляется на сторону Rx для дальнейшей эквализации.

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

Точно так же, если вы посмотрите на код Rx Init, то можете увидеть, что функция Rx Init сначала перестраивает выход функции Tx Init в матрицу 2-D.

Затем функция Init инициализирует системные объекты, которые представляют блоки на стороне Rx, и настраивает параметры simulation и AMI и свойства блоков. В этом случае существует два блока на стороне Rx, CTLE и 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;

Импульсная характеристика, которая была ранее изменена системными объектами на стороне Tx, затем дополнительно изменяется системными объектами на стороне Rx.

%% 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);

Конечная уравненная импульсная характеристика в 2-D матричной форме переформулирована назад в вектор импульсной характеристики.

Каждая функция Init также содержит раздел Пользовательский код, где можно настроить свой собственный код.

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

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

Для получения дополнительной информации об использовании пользовательского кода см. Пользовательская настройка базовых блоков Datapath и Реализация пользовательского CTLE в SerDes Toolbox PassThrough Block.

Генерация кода функции Init (Refresh Init) может поддерживать один или несколько Системных объектов при использовании пользовательского блока PassThrough. Если присутствует несколько системных объектов, они должны быть последовательно. Первый входной порт должен иметь форму волны в качестве входа. Если присутствует выход формы волны, он должен быть первым выходным портом.

PAM4 пороги

Если вы используете библиотечный блок данных SerDes Toolbox, PAM4 пороги в функции Init поддерживаются для вас автоматически. Если вы используете пользовательское строение с использованием PassThrough, генерация кода функции Init находит блоки Data Store Write, которые ссылаются на PAM4 пороговые сигналы (PAM4_UpperThreshold, PAM4_CenterThreshold, PAM4_LowerThreshold) и определяет связи. Поддерживаются следующие возможности подключения:

  • Прямое соединение с системным объектом

  • Связь с системным объектом через селектор шины

  • Связь с системным объектом через Gain блок

  • Прямое соединение с Constant блоком

Если генерация кода Init не может найти поддерживаемую топологию, она применяет пороги PAM4 по умолчанию.

Похожие темы