Системная симуляция SerDes включает передатчик (Tx) и приемник (Rx), соединенный пассивным аналоговым каналом. Существует две отличных фазы к системной симуляции SerDes: статистический анализ и анализ временного интервала. Статистический анализ (также известный аналитичным, линейным независимый от времени, или анализ Init) основан на импульсных характеристиках, разрешающих быстрый анализ и адаптацию алгоритмов эквализации. Анализ временного интервала (также известный эмпирическими, поразрядно или анализ GetWave) являются основанной на форме волны реализацией алгоритмов эквализации, которые могут опционально включать нелинейные эффекты.
Ссылочный поток статистического анализа отличается от анализа временного интервала. Во время симуляции статистического анализа сгенерирована импульсная характеристика. Импульсная характеристика представляет объединенный ответ аналогового выхода передатчика, канала и аналогового фронтэнда приемника. Импульсная характеристика канала изменяется статистическими функциями модели передатчика. Модифицированная импульсная характеристика от передатчика выход затем далее изменяется статистическими функциями модели приемника. Симуляция затем завершается с помощью измененной импульсной характеристики финала, которая представляет поведение обеих моделей AMI, объединенных с аналоговым каналом.
Во время симуляции временного интервала цифровая форма волны стимула передается функции временного интервала модели передатчика. К этой модифицированной форме волны временного интервала затем применяют операцию свертки с аналоговой импульсной характеристикой канала, используемой в статистической симуляции. Выход этой свертки затем передается функции временного интервала модели приемника. Модифицированный выход приемника становится формой волны симуляции в фиксаторе приемника.
В SerDes Toolbox™ подсистема Init и в блоках Tx и в Rx использует блок Initialize Function Simulink®. Блок Initialize Function содержит функцию MATLAB®, чтобы обработать статистический анализ вектора импульсной характеристики. Вектор импульсной характеристики сгенерирован блоком Analog Channel.
Код MATLAB в подсистемах Init подражает архитектуре симуляции временного интервала Simulink путем инициализации и подготовки библиотечных блоков от SerDes Toolbox та эквализация реализации алгоритмы. Каждая подсистема затем обрабатывает вектор импульсной характеристики через один или несколько Системных объектов, представляющих соответствующие блоки.
Кроме того, подсистема Init может адаптировать или оптимизировать алгоритмы эквализации и затем применить модифицированные алгоритмы к импульсной характеристике. Выход подсистемы Init является адаптированной импульсной характеристикой. Если подсистема Init адаптирует алгоритмы эквализации, она может также вывести модифицированные настройки эквализации как параметры AMI. Эти модифицированные параметры эквализации могут также быть переданы анализу временного интервала как оптимальная установка или обеспечить начальную точку для более быстрой адаптации временного интервала.
В модели Simulink системы SerDes существует две подсистемы Init, один на стороне передатчика (Блок Tx) и один на стороне приемника (Блок Rx). Во время статистического анализа импульсная характеристика аналогового канала сначала компенсируется подсистемой Init в блоке Tx на основе Системы object™ свойства. Модифицированная импульсная характеристика затем питается как вход блок Rx. Система Init в блоке Rx далее компенсирует импульсную характеристику и производит окончательный результат.
Системные объекты, соответствующие блокам Tx и Rx, изменяют импульсную характеристику в том же порядке, как они были получены. Если существует несколько адаптивных Системных объектов в блоке Tx или Rx, каждый Системный объект находит лучшую установку для импульсной характеристики и изменяет его прежде, чем отправить его в следующий Системный объект.
Компенсируемая импульсная характеристика финала используется, чтобы вывести импульсный ответ, статистический глаз и формы волны.
Чтобы изучить, как подсистема 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. Если несколько системных объектов присутствуют, они должны быть последовательно. Первый входной порт должен иметь форму волны как вход. Если какая-либо форма волны вывела, присутствует, это должен быть первый выходной порт.
Если вы используете SerDes Toolbox datapath библиотечный блок, пороги PAM4 в функции Init обеспечены для вас автоматически. Если вы используете пользовательскую конфигурацию с помощью PassThrough, генерация кода функции Init находит блоки Data Store Write, которые ссылаются на пороговые сигналы PAM4 (PAM4_UpperThreshold
, PAM4_CenterThreshold
, PAM4_LowerThreshold
) и определяет возможности соединения. Возможности соединения, которые поддерживаются:
Прямая связь с Системным объектом
Связь с Системным объектом через селектор шины
Связь с Системным объектом через блок Gain
Прямая связь с блоком Constant
Если генерация кода Init не может найти поддерживаемую топологию, она применяет пороги PAM4 по умолчанию.