Глобально адаптируйте компоненты приемника во временном интервале

В этом примере показано, как выполнить оптимизацию набора компонентов приемника как система во время Временного интервала (GetWave) Симуляция. Вы будете видеть, как установить CTLE и Блок DFECDR, таким образом, их настройки адаптируются вместе глобально в процессе моделирования. Это - следование на примере, "Глобально Адаптируют Компоненты Приемника Используя Импульсные Метрики Ответа, чтобы Улучшать Производительность SerDes".

Глобальная переменная компонента приемника обзор Adapatation:

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

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

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

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

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

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

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

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

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

  • Слово HF изменяет во время 3 символов пользовательский интерфейс (e.g. 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. Однако никакие сигналы не могут быть совместно использованы системами TX и RX.

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

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

Откройте систему путем ввода serdesDesigner (‘TDadapt.mat’). Вы будете видеть систему с основным TX, канал на 100 Ом с потерей 16 дБ на уровне 5 ГГц и RX, содержащим CTLE, сопровождаемый DFECDR. В этом примере CTLE настраивается, чтобы использовать зафиксированный режим, Усиление DC и Худое Усиление как спецификация, усиление DC 0 к-15 дБ и Худое усиление 0 к +15dB.

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

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

Фигура: под - компенсируемая форма волны RX: Амплитуда меньше для слова HF (101 или 010) по сравнению со словом LF (000 или 111).

Фигура: сверхкомпенсируемая форма волны RX: Амплитуда меньше для слова HF (101 или 010) по сравнению со словом LF (000 или 111).

Фигура: критически компенсируемый сигнал: амплитуды LF и сигналов HF равны.

Можно разработать алгоритм, чтобы оптимизировать сигнал приемника при помощи концепции Эквализации. Например, сигнал RX может быть рассмотрен как сверхкомпенсируемый, под - компенсируемым или критически компенсируемым:

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

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

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

Измените CTLE

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

Вы измените CTLE.ConfigSelect выход, чтобы связать с терминатором строки:

Добавьте адаптацию CTLE к DFECDR

Можно теперь изменить DFECDR, чтобы управлять значением входа ConfigSelect, используемого CTLE во время симуляции области Времени. Это может быть выполнено путем добавления функции MATLAB, которая использует следующие параметры, чтобы оценить настройку CTLE, чтобы адаптироваться к следующему лучшему значению эквализации:

режим

• ConfigIn

• symbolRecovered

• voltageSample

Затем вы будете видеть, как изменить DFECDR, чтобы добавить эту функцию MATLAB.

Вы будете видеть селектор шины во Внутренней части выходного порта). Дважды щелкните, чтобы открыть его меню Block Parameters и внести следующие изменения:

Нажмите на сигнал symbolRecovered и нажмите кнопку отмеченный “Выбор>>” и повторите это для voltageSample. Затем необходимо изменить настройку symbolRecovered и voltageSample от "сигнала" до "параметра". Можно сделать это из контекстного меню для каждого.

Добавьте функцию MATLAB в холст Simulink. Измените метку в "ctleTimeDomainAdapt". Можно заставить Simulink автоматически генерировать порты путем определения функциональной строки кода оператора можно следующим образом:

Примечание: можно или использовать фрагменты кода, конкатенированные, когда они объяснены в этом примере, или можно использовать присоединенную функцию MATLAB "ctleTimeDomainAdapt.m" для ссылки.

function config = fcn(mode, configIn, symbolRecovered, voltageSample, SymbolTime, SampleInterval)

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

Входные параметры:

  • режим

  • конфигурирование

  • symbolRecovered

  • voltageSample

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

Выведите (то же самое как имя функции):

  • config

Создайте постоянный блок и сконфигурируйте его Присвоение Элемента на CTLESignal.ConfigSelect. Затем соедините его с входным портом CTLE.

Примечание: можно добавить Осциллограф, чтобы наблюдать адаптирующиеся значения CTLESignal.ConfigSelect в процессе моделирования

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

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

Можно отредактировать файл "ctleTimeDomainAdapt.m" присоединенный к этому примеру как начальная точка для алгоритма адаптации. Этот пример использует переменные Persistent, чтобы отслеживать значения каждый раз, когда функция MATLAB называется. Как начальная точка, вы оцените, если переменные будут ненулевыми (e.g. использование функции 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 (e.g. 4-5, 5-4, 4-5) от слова до слова программа протестирует на условие переключателя путем обнаружения 3 повторений. Если это правда, это выходит из цикла, таким образом CTLE сохраняет свое обученное оптимальное значение.

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

    if mode == 2 && ~toggling

Понимание ножей данных

Можно использовать сигналы symbolRecovered и voltageSample, чтобы обработать форму волны RX. Но сначала, важно изучить операцию Data Slicer:

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

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

3. Нож данных инициирован в +0.5 пользовательских интерфейсах позже,

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

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

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

Система работает на основанном на выборке временном шаге, таким образом, можно отслеживать контуры пользовательского интерфейса путем подготовки счетчика символа и выборки. Когда демонстрационное количество является делимым этой установкой для "выборок на бит", это задает контур символа. Таким образом, можно найти комбинации HF (e.g. 010, 101) или LF (e.g. 111000) слова данных, чтобы оптимизировать для критической эквализации:

        % 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 символами к сортировке HF по сравнению с содержимым сигнала LF

Можно использовать Mod функции MATLAB, чтобы найти, когда samples/s достиг Mod 0, который задает контур пользовательского интерфейса. Если счетчик символа достиг по модулю 0, можно накопить эти местоположения как биты. Затем после накопления достаточных битов (e.g. 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 и видеть, что алгоритм постепенно увеличивает настройку, пока это не переключается:

Фигура: выход Scope от CTLESignal.ConfigSelect сигнала, если функция запрограммирована, чтобы начать с нуля вместо значения от Init.

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

Фигура: можно установить значение для, Игнорируют Биты к 16, который является количеством настроек CTLE, доступных в этом примере.

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

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

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

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

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

Смотрите также

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте