В этом примере показано, как выполнить оптимизацию набора компонентов приемника в системе во время моделирования временной области (GetWave). Вы увидите, как настроить блок CTLE и DFECDR, чтобы их настройки глобально адаптировались во время моделирования. Ниже приведен пример «Глобальная адаптация компонентов приемника с использованием метрик импульсного отклика для повышения производительности SerDes».
Компоненты приемника для CTLE и DFECDR могут работать совместно для выполнения адаптации в моделировании временной области. Обычно они работают независимо следующим образом:
CTLE адаптируется в статистическом (Init), а затем устанавливает это значение, когда начинается моделирование временной области
DFECDR адаптируется в статистическом (Init), затем устанавливает эти значения отводов для временной области, и блок переходит к непрерывному обучению значений отводов
Чтобы настроить CTLE и DFECDR для совместного использования сигналов в системе RX для глобальной адаптации во время моделирования временной области, выполните следующие действия:
Вы увидите, как уравнивание может влиять на формы сигналов RX, которые должны быть либо чрезмерно выровнены, либо недостаточно выровнены, либо критически выровнены (например, аналогично тому, как отклики фильтра могут быть определены как избыточно затухающие, недостаточно затухающие или критически затухающие).
Примечание.В этом примере используется понятие слов данных (3 символа на слово) из теории коммуникаций.
Низкочастотное (LF) и высокочастотное (HF) слово данных определяются для этого примера следующим образом:
Слово LF сохраняет одно и то же логическое значение для 3 символов UI (например, 111 или 000), чтобы представлять неизменяемые битово-битовые значения в слове.
HF слово изменяется в течение 3 символов UI (например, 101 или 010), чтобы представлять изменение битовых значений внутри слова.
Примечание.Блок CTLE оптимизируется только для внутреннего глаза (только содержимое HF).
Деактивизация внутренней адаптации CTLE путем подключения выходного сигнала к терминатору
Изменение входного сигнала CTLE для использования сигнала от DFECDR (что обеспечивает глобальную адаптацию)
Настройте DFECDR, создав функциональный блок MATLAB, который оценивает метрики Eye, в зависимости от параметров внутренней шины и CTLE, а затем выводит значение, используемое для конфигурации CTLE.
В DFECDR кодируйте функцию MATLAB для работы с входными сигналами во время границ пользовательского интерфейса, а не на каждом интервале выборки.
Добавьте условные операторы для сравнения метрик глаза между низкочастотными (LF) словами данных и высокочастотными (HF) словами данных, чтобы определить следующее наилучшее значение выравнивания.
Значение выравнивания, выводимое функцией MATLAB, является сигналом в Simulink. Это означает, что блок КТЛ будет использовать это в качестве своего входа, поэтому каждый раз, когда он изменяется, форма сигнала RX будет выравниваться с этим новым значением во время моделирования временной области.
Примечание.Блоки в системе RX могут совместно использовать сигналы. Это также справедливо в системе TX. Однако никакие сигналы не могут совместно использоваться системами RX и TX.
Откройте систему, набрав serdesdesDesigner («TDadapt.mat»). Вы увидите систему с базовым TX, 100-омным каналом с потерей 16dB при 5GHz и RX, содержащим CTLE, за которым следует DFECDR. В этом примере CTLE настраивается для использования «фиксированного» режима (поскольку в этом примере показано, как программно адаптироваться путем оценки фиксированных значений в функции MATLAB)и спецификация установлена на «коэффициент усиления постоянного тока и пиковый коэффициент усиления», а «коэффициент усиления постоянного тока» установлен в диапазоне от 0 до -15 дБ (с шагом -1 дБ) и установите значение «Пиковый коэффициент усиления» в диапазоне от 0 до + 15 дБ (с шагом + 1 дБ), как показано ниже. Также следует отметить, что DFECDR должен быть настроен на режим «адаптации».

Можно нажать на CTLE и установить режим «фиксированный».

Затем можно циклически просматривать различные значения для опции Configuration Select for the CTLE и наблюдать влияние различных значений выравнивания на диаграмму глаз приемника:

Рисунок выше: Недостаточно выровненная форма сигнала RX: Выбор конфигурации CTLE установлен в 0 (минимум).

Рисунок выше: Переравненная форма сигнала RX: Выбор конфигурации CTLE установлен на 15 (максимум).

Рис. Выше: Критически выровненный сигнал: выбор конфигурации CTLE установлен на 7 (например, значение среднего диапазона).
Можно разработать алгоритм оптимизации сигнала приемника, используя концепцию выравнивания. Например, сигнал RX может рассматриваться как избыточно выровненный, недостаточно выровненный или критически выровненный:
Экспортируйте систему в Simulink.

В разделе Приемник (Receiver) можно изменить CTLE и DFECDR для совместного использования значений с использованием Сигналов (Signals), чтобы обеспечить глобальную адаптацию во время моделирования временной области.

Можно просмотреть маску CTLE (CTRL-U), а затем изменить вывод ConfigSelect на Terminator вместо DataStireWrite. Размещая терминатор на выходе ConfigSelect, КТЛ больше не находится в режиме обратной связи, и любой другой блок в системе RX может управлять этим КТЛ, записывая его входной сигнал ConfigSelect.

Для подключения к терминатору необходимо изменить выходные данные CTLE.ConfigSelect:

Теперь можно изменить DFECDR для управления значением ввода ConfigSelect, используемого CTLE во время моделирования временной области. Это может быть достигнуто путем добавления функции MATLAB, которая использует следующие параметры для оценки конфигурации CTLE для адаптации к следующему наилучшему значению выравнивания:
• Режим
• ConfigIn
• symbolRecovered (Восстановлено)
• voltageSample
Далее будет показано, как изменить DFECDR для добавления этой функции MATLAB.

На выходном порту Interior появится селектор шины. Дважды щелкните, чтобы открыть меню «Параметры блока» и внести следующие изменения:

Щелкните по символу сигнала Recovered и нажмите кнопку с пометкой «Select > >» (Выбрать > >) и повторите это для параметра voltageSample. Это необязательные выходные данные, поэтому их необходимо включить. Кроме того, необходимо изменить конфигурацию и symbolTime и sampleInterval с «signal» на «parameter». Это можно сделать с помощью панели инструментов «edit data» в редакторе функций в MATLAB:

Добавьте функцию MATLAB в холст Simulink. Simulink позволяет автоматически генерировать порты, определяя строку кода оператора функции следующим образом:
% ctleTimeDomainAdapt - Simple adaptation algorithm to optimize a CTLE configuration % in the time domain for NRZ signals. Current serdes.CTLE % adapts in Init/Statistical only. % % Goal is to monitor the symbol decisions and voltage level of decisions from the % serdes.DFECDR. From this, calculate the high and low frequency voltage averages to % adjust the CTLE config bringing the averages together. Once settled, detect toggle % of config and lock adapted configuration. The config adjustment operates under the % assumption that the CTLE 'boost' increases with increasing config from 0 to X and % modulation is NRZ only. % Copyright 2020 The MathWorks, Inc. function config = ctleTimeDomainAdapt(mode, configIn, symbolRecovered, voltageSample, SampleInterval, SymbolTime)
Примечание.Вы можете либо использовать фрагменты кода, конкатенированные, как они описаны в этом примере, либо использовать присоединенную функцию MATLAB «ctleTimeGroupAdapt.m» для справки.
Для создания портов можно также использовать инструменты холста в Simulink. При использовании любого из этих методов порты должны выглядеть следующим образом:
Входные данные:
способ
configIn
symbolRecovered
voltageSample
Примечание: symbolRecovered и voltageSample - дополнительная продукция блока DFECDR (и зарегистрированы в рамках кодекса MATLAB для CDR),
Вывод (совпадает с именем функции):
конфигурация
Создайте блок константы и настройте его назначение элемента CTLESignal.Mode. Затем подключите его к порту ввода функции для режима.
Затем создайте блок чтения хранилища данных и настройте назначение элемента CTLESignal.ConfigSelect. Затем подключите его к порту ввода функции для конфигурирования.
Затем создайте блок записи хранилища данных и настройте назначение элемента CTLESignal.ConfigSelect. Затем подключите его к порту вывода функции для конфигурации.

Примечание.Можно добавить область для наблюдения за адаптирующимися значениями CTLESignal.ConfigSelect во время моделирования.
По завершении подключения сигналов DFECDR отображается следующим образом:

В качестве отправной точки для алгоритма адаптации можно отредактировать файл «ctleTimeStartAdapt.m», присоединенный к этому примеру. В этом примере используются постоянные переменные для отслеживания значений при каждом вызове функции MATLAB. В качестве отправной точки вы оцените ненулевые переменные (например, используя функцию isempty ()), чтобы при первом вызове функции их можно было инициализировать. После этого значения настраиваются блоками CTLE и DFECDR, работающими вместе.
persistent sps sampleCounter symbolCounter persistent internalConfig updateConfig symbols voltages persistent lowFreqCount highFreqCount lowFreqVoltage highFreqVoltage persistent preventToggle toggling if isempty(sps) sps = SymbolTime/SampleInterval; sampleCounter = 0; % Total samples symbolCounter = 0; % Total symbols internalConfig = configIn; % Take config from Init and set for initial config % internalConfig = 0; % Use this instead to ignore value from Init updateConfig = false; symbols = [0 0 0]; % Symbol history (3) voltages = [0 0 0]; % Voltage at each symbol (3) lowFreqCount = 0; % Low frequency event count highFreqCount = 0; % High frequency event count lowFreqVoltage = 0; % Voltage sum at low frequency events highFreqVoltage = 0; % Voltage sum at high frequency events preventToggle = [0 0 0 0]; % Toggle tracker; last 4 config updates -1/+1 toggling = false; % Toggle detected flag end
Примечание.Если переменная является постоянной, она сохраняет свое значение. В противном случае они создаются как неопределенные для каждого вызова функции MATLAB.
Можно реализовать многие типы контрольного тестирования, но в этом примере реализован детектор переключения. Если CTLE имеет заданное значение и начинает увеличиваться или уменьшаться на 1 (например, 4-5, 5-4, 4-5) от слова к слову, программа будет проверять состояние переключения путем обнаружения 3 повторов. Если true, он выходит из цикла, таким образом, КТЛ сохраняет свое обученное оптимальное значение.
Примечание.Пример реализации такого алгоритма можно увидеть в прикрепленном файле.
if mode == 2 && ~toggling
Для обработки формы сигнала RX можно использовать сигналы symbolRecoverReved и voltageSample. Но во-первых, важно понимать работу Data Slicer:
1. Каждый раз, когда тактовое время возникает в начале пользовательского интерфейса,
2. Блок DFECDR применяет свои отводы,
3. Срез данных запускается на + 0,5 UI позже,
4. Затем для этого бита принимается решение о значении отвода.
Срезатель данных выводит как символ, так и напряжение. Например, если срезатель данных работает в местоположении 0,5 UI, срезатель выводит символ как + 0,5 или -0,5 и значение напряжения, которого достиг символ.
Система работает на шаге времени на основе выборки, поэтому можно отслеживать границы пользовательского интерфейса путем настройки счетчика проб и символов. Когда число выборок делится на эту настройку для «выборок на бит», это определяет границу символа. Таким образом, можно найти комбинации HF (например, 010, 101) или LF (например, 111, 000) слов данных для оптимизации для критического выравнивания:
% How often to update CTLE Config updateFrequencySymbols = 1000; % Range of CTLE configurations minCTLEConfig = 0; maxCTLEConfig = 15; % Set up a sample and symbol counter to track overall progress sampleCounter = sampleCounter+1; % Every call to this function is a sample % When sample count is divisible by samples per bit, there is a symbol boundary if mod(sampleCounter,sps) == 0 symbolCounter = symbolCounter+1; updateConfig = true; % Flag to keep from looping in update section % Maintain bit/voltage history symbols = [symbols(2:3) symbolRecovered]; % -0.5 or 0.5 voltages = [voltages(2:3) voltageSample]; % Voltages at each symbol % Keep count of low/high frequency events and sum voltages across those events % Low frequency = Steady high or low % High frequency = Rapid tranition if isequal(symbols, [0.5 0.5 0.5]) || isequal(symbols, [-0.5 -0.5 -0.5]) % 1 1 1 OR 0 0 0 lowFreqCount = lowFreqCount + 1; lowFreqVoltage = lowFreqVoltage+ abs(voltages(2)); % keep middle voltage sample elseif isequal(symbols, [-0.5 0.5 -0.5]) || isequal(symbols, [0.5 -0.5 0.5])% 0 1 0 OR 1 0 1 highFreqCount = highFreqCount + 1; highFreqVoltage = highFreqVoltage+ abs(voltages(2)); % keep middle voltage sample end end
Функцию MATLAB Mod можно использовать для определения того, когда образцы достигли Mod 0, что определяет границу пользовательского интерфейса. Как только счетчик символов достигнет значения по модулю 0, можно накопить эти местоположения в виде битов. Затем после накопления достаточного количества битов (например, 1000) вычислите среднее напряжение в этой совокупности и обновите конфигурацию CTLE.
Создайте оператор if для выполнения следующего теста и решения:
Если сигнал 111 или 000, переменная инкрементного счета для LF
Если сигнал 010 или 101, переменная инкрементного счета для HF
Для каждого случая возьмем напряжение на этом символе и переменную приращения для счетчика напряжения
% When symbol count is divisible by update frequency, check if CTLE update is needed if mod(symbolCounter,updateFrequencySymbols) == 0 && updateConfig % Calculate low/high voltage average lowFreqAvg = lowFreqVoltage/lowFreqCount; highFreqAvg = highFreqVoltage/highFreqCount;
Можно реализовать любой нужный алгоритм, но в этом примере CTLE начинается со значения configSelect из Init, и функция выполняет приращение. Каждый раз DFECDR оценивается и сравнивается с постоянной переменной. В зависимости от этих результатов CTLE увеличивается или уменьшается.
Примечание.Для вашего кода важно проверить, что для CTLE не задано недопустимое значение configSelect.
% Increase CTLE config if low freq is above high freq if lowFreqAvg > highFreqAvg % Prevent exceeding maximum CTLE config if internalConfig < maxCTLEConfig % If toggle is detected, disable adaptation if ~isequal(preventToggle,[1 -1 1 -1]) internalConfig = internalConfig + 1; % Add current action to toggle tracker preventToggle = [preventToggle(2:4) 1]; else toggling = true; end end % Decrease CTLE config if high freq is above low freq elseif lowFreqAvg <= highFreqAvg % Prevent exceeding minimum CTLE config if internalConfig > minCTLEConfig if ~isequal(preventToggle,[-1 1 -1 1]) internalConfig = internalConfig - 1; % Add current action to toggle tracker preventToggle = [preventToggle(2:4) -1]; else toggling = true; end end end % Reset variables associated with averaging every updateFrequencySymbols lowFreqCount = 0; lowFreqVoltage = 0; highFreqCount = 0; highFreqVoltage = 0; updateConfig = false; % Lock updates until next symbol boundary end end config = internalConfig; end

Рисунок: Диаграмма глаз во время моделирования временной области.
В Области можно увидеть, что CTLE начинается со значения из Init, и код переключателя-детектора «блокирует» конфигурацию CTLE после нескольких итераций:

Рисунок: Когда начинается моделирование временной области, CTLE начинается со значения Init.
Можно задать код для запуска из конфигурации CTLE 0 и увидеть, что алгоритм увеличивает конфигурацию до тех пор, пока она не переключится:

Рисунок: Объем вывода сигнала CTLESignal.ConfigSelect, если функция запрограммирована на запуск с нуля вместо значения Init.
Чтобы найти значение параметра Ignore Bits для получателя, можно оценить, сколько пользовательского интерфейса требуется для расчета CTLE. В этом случае он будет равен количеству доступных конфигураций CTLE.

Рис.: Для параметра Ignore Bits можно установить значение 16, которое является количеством конфигураций CTLE, доступных в этом примере.
После завершения моделирования можно увидеть, что глаз временной области имеет допустимую кривую ванны, если при моделировании используется достаточное количество битов игнорирования для приемника.

Рисунок: Статистические результаты и результаты временной области с достаточным количеством битов игнорирования.
Можно проверить эффект «Игнорировать биты», установив нулевое значение и повторно запустив моделирование:

Рисунок: Можно установить значение параметра Ignore Bits равным 0 из 16, чтобы проверить его влияние на результаты Time Domain.

Рисунок: Статистические результаты и результаты временной области с недостаточным количеством битов игнорирования.
CTLE | DFECDR | optPulseMetric