Статистический анализ в системах 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

В модели Simulink системы SerDes существует две подсистемы Init, один на стороне передатчика (Блок Tx) и один на стороне приемника (Блок Rx). Во время статистического анализа импульсная характеристика аналогового канала сначала компенсируется подсистемой Init в блоке Tx на основе Системы 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, чтобы открыть диалоговое окно Block Parameters. Нажмите кнопку Show Init, чтобы открыть код, имеющий отношение к функции Init передатчика.

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

%% 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, и настраивает симуляцию и параметры 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);

Модифицированная импульсная характеристика в 2D матричной форме изменена назад в вектор импульсной характеристики и отправлена стороне 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 в 2D матрицу.

Затем функция Init инициализирует Системные объекты, которые представляют блоки на стороне Rx, и настраивает симуляцию и параметры 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);

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

Каждая функция 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.

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

Пороги PAM4

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

  • Прямая связь с Системным объектом

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

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

  • Прямая связь с блоком Constant

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

Похожие темы