Глобальная адаптация компонентов приемника во временном интервале

Этот пример показывает, как выполнить оптимизацию набора компонентов приемника как системы во время симуляции временного интервала (GetWave). Вы увидите, как настроить CTLE и блок DFECDR так, чтобы их настройки адаптировались вместе глобально во время симуляции. Это является последующим примером «Глобальная адаптация компонентов приемника с помощью метрики импульсной характеристики для улучшения эффективности SerDes».

Обзор глобальной адаптации компонента приемника:

Компоненты приемника для CTLE и DFECDR могут работать вместе, чтобы выполнить адаптацию в симуляции временного интервала. Обычно они работают независимо следующим образом:

  • CTLE адаптируется в Statistical (Init), затем устанавливает это значение, когда начинается симуляция Временного интервала

  • DFECDR адаптируется в Statistical (Init), затем устанавливает эти значения отвода для Временной Интервал, и блок продолжает постоянно обучать значения отвода

Можно следовать следующим шагам, чтобы настроить CTLE и DFECDR для совместного использования сигналов в системе RX, чтобы адаптироваться вместе глобально во время симуляции Временного интервала:

Часть 1: Определите метод оптимизации формы волны RX по сравнению с эквализацией

Вы увидите, как эквализация может повлиять на формы волны RX, которые будут либо переравниваться, либо недоравниваться, либо критически выравниваться (например, подобно тому, как реакции фильтра могут быть определены как чрезмерно демпфированные, недостаточно демпфированные или критически демпфированные).

Примечание: В этом примере используется концепция слов данных (3 символа на слово) из Communications Theory.

Низкочастотное (LF) и Высокая частота (HF) слово данных для этого примера заданы следующим образом:

  • Слово LF сохраняет одно и то же логическое значение через 3 символа UI (например, 111 или 000), чтобы представлять изменяющиеся значения бит/бит в слове.

  • Слово HF изменяется во время UI 3 символа (например, 101 или 010), чтобы представлять изменение битовых значений в слове.

Примечание: блок CTLE оптимизирует для внутреннего глаза (только содержимое HF).

Часть 2: Настройка блоков Simulink в разделе приемника

  • Отключите внутреннюю адаптацию CTLE путем подключения выхода к терминатору строки

  • Измените вход CTLE, чтобы использовать сигнал от DFECDR (который позволяет адаптироваться вместе глобально)

  • Настройте DFECDR путем создания блока MATLAB function, который оценивает метрики глаз, в зависимости от параметров внутренней шины и CTLE, затем выводит значение, используемое для строения CTLE.

Часть 3: Реализуйте пользовательскую функцию MATLAB, чтобы адаптировать эквализацию во время симуляции Временного интервала

  • В DFECDR кодируйте функцию MATLAB для работы с входными сигналами во время контуров пользовательского интерфейса, а не на каждом интервале расчета

  • Добавьте условные операторы, чтобы сравнить метрики Глаза между словами данных Низкой Частоты (LF) и словами данных Высокой Частоты (HF), чтобы определить следующее лучшее значение эквализации.

  • Значение эквализации, выводимое функцией MATLAB, является Сигналом в Simulink. Это означает, что блок CTLE будет использовать это в качестве входов - поэтому каждый раз, когда он изменяется, форма волны RX будет выравниваться с этим новым значением во время симуляции Временного интервала.

Примечание: Блоки в системе RX могут совместно использовать сигналы. Это также верно в системе TX. Однако никакие сигналы не могут быть разделены между системами RX и TX.

Часть 1: Определите метод оптимизации формы волны приемника по сравнению с эквализацией

Инициализация системы SerDes с CTLE и DFECDR в приемнике

Откройте систему, набрав serdesDesigner («TDadapt.mat»). Вы увидите систему с базовым каналом TX, 100-Ом с потерей 16dB на 5GHz, и RX, содержащий CTLE, за которым следует DFECDR. В этом примере CTLE настроен на использование «фиксированного» режима (потому что в этом примере показано, как программно адаптироваться путем оценки фиксированных значений в функции MATLAB), и установите значение спецификации в «DC Gain and Peaking Gain», и установите значение «DC gain» в области значений от 0 до -15 дБ (с шагами -1 дБ) и установите значение «Peaking gain» в области значений от 0 до + 15 дБ (с шагами + 1 дБ), как показано ниже. Следует также отметить, что DFECDR должен быть установлен в режим «адаптации».

Можно кликнуть на CTLE и установить режим на «fixed».

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

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

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

Фигура Выше: Критически-уравненный сигнал: Строение Select установлено на 7 (например, значение среднего уровня).

Можно разработать алгоритм для оптимизации сигнала приемника с помощью концепции эквализация. Для примера RX сигнал может быть рассмотрен как чрезмерно выравниваемый, недостаточно выравниваемый или критически выравниваемый:

Часть 2: Настройка блоков Simulink в системе приемника

Экспорт системы в Simulink.

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

Измените CTLE

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

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

Добавление адаптации CTLE к DFECDR

Теперь можно изменить 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 «ctleTimeDomainAdapt.m» для ссылки.

Также можно использовать инструменты холста в Simulink, чтобы создать порты. Используя любой из методов, порты должны появиться следующим образом:

Входы:

  • способ

  • configIn

  • symbolRecovered

  • voltageSample

  • Примечание: symbolRecovered и voltageSample являются опциональными выходами блока DFECDR (и документируются в коде MATLAB для CDR)

Выход (то же, что и имя функции):

  • config

Создайте постоянный блок и сконфигурируйте его назначение элемента CTLESignal.Mode. Затем подключите его к входному параметру функции порту для режима.

Затем создайте блок datastore read и настройте назначение элемента CTLESignal.ConfigSelect. Затем соедините его с входным параметром функции портом для конфигурирования.

Затем создайте блок записи datastore и настройте назначение элемента CTLESignal.ConfigSelect. Затем соедините его с выходным портом функции для config.

Примечание.Вы можете добавить возможности для наблюдения адаптируемых значений CTLESignal.ConfigSelect во время симуляции.

Когда вы закончите соединять сигналы, DFECDR появится следующим образом:

Часть 3: Реализуйте алгоритм, чтобы адаптировать эквализацию во время симуляции временного интервала

Можно отредактировать файл «ctleTimeDomainAdapt.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.

Реализуйте Watchdogs, такие как Toggle Detector

Можно реализовать многие типы проверки сторожа, но в этом примере реализован детектор переключений. Если CTLE находится на заданном значении и начинает увеличиваться или уменьшаться на 1 (например, 4-5, 5-4, 4-5) от слова к слову, программа проверяет на переключение условия путем обнаружения 3 повторов. Если true, он выходит из цикла, таким образом, CTLE сохраняет свое обученное оптимальное значение.

Примечание: Вы можете увидеть пример реализации такого алгоритма в прикрепленном файле.

    if mode == 2 && ~toggling

Общие сведения о срезах данных

Можно использовать simbolRecovered и voltageSample сигналов, чтобы обработать сигнал RX. Но во-первых, важно понять операцию Data Slicer:

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

2. Блок DFECDR применяет свои отводы,

3. Срез данных запускается в + 0.5 UI позже,

4. Затем для этого бита возникает решение о значении касания.

Срез данных выводит как символ, так и напряжение. Например, если срезатель данных работает в местоположении 0,5 UI, срезатель выводит символ как + 0,5 или -0,5 и значение напряжения, достигнутое символом.

Поиск контуров пользовательского интерфейса из SLICER данных

Система запускается на временном шаге, основанном на выборке, поэтому можно отслеживать контуры пользовательского интерфейса, настраивая счетчик выборки и символа. Когда количество выборок делится на эту настройку для «выборок на бит», это определяет контур символа. Таким образом, можно найти комбинации слов данных 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

Найдите 3-Symbol комбинации для сортировки HF по сравнению с содержимым сигнала LF

Можно использовать функцию MATLAB Mod, чтобы найти, когда выборки/s достигли 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

Можно реализовать любой алгоритм, который вы хотите, но в этом примере CTLE начинается с значения configSelect из Init, и функция выполняет шаг. Каждый раз DFECDR оценивается и сравнивается с переменной Persistent. В зависимости от этих результатов 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, доступных в этом примере.

Когда моделирование завершится, можно увидеть, что Временной интервал Eye имеет действительную Кривую Ванны, если в симуляции используются достаточные Биты Игнора для приемника.

Фигура: Статистические и Временной интервал результаты с достаточным количеством бит Ignore.

Можно протестировать эффект Ignore Bits, установив значение равным нулю и повторно запустив симуляцию:

Фигура: Можно задать значение для Биты равное 0 от 16, чтобы проверить его эффект от результатов Временной интервал.

Фигура: Статистические результаты и результаты во временном интервале с недостаточным значением Ignore Bits.

См. также

| |

Похожие темы