В этом примере показано, как выполнить оптимизацию набора компонентов приемника как система во время Временного интервала (GetWave) Симуляция. Вы будете видеть, как установить CTLE и Блок DFECDR, таким образом, их настройки адаптируются вместе глобально в процессе моделирования. Это - следование на примере, "Глобально Адаптируют Компоненты Приемника Используя Импульсные Метрики Ответа, чтобы Улучшать Производительность SerDes".
Компоненты приемника для CTLE и DFECDR могут работать совместно, чтобы выполнить адаптацию в симуляции области Времени. Обычно, они действуют независимо можно следующим образом:
CTLE адаптируется в Статистическом (Init), затем устанавливает на это значение, когда симуляция области Времени начинается
DFECDR адаптируется в Статистическом (Init), затем устанавливает на эти значения касания для Временного интервала, и Блок продолжает постоянно обучать значения касания
Можно выполнить эти шаги, чтобы настроить CTLE и DFECDR, чтобы совместно использовать сигналы в системе RX, чтобы адаптироваться вместе глобально во время симуляции области Времени:
Вы будете видеть, как эквализация может влиять на формы волны RX, которые будут или сверхкомпенсироваться, под - компенсируемый, или критически компенсироваться (e.g. похожий на то, как ответы фильтра могут быть заданы, как сверхослаблено, под - ослабленный или критически ослабленный).
Примечание: концепция слов данных (3 символа на слово) из Коммуникационной Теории используется в этом примере.
Низкая частота (LF) и Высокочастотное (HF) слово данных заданы для этого примера можно следующим образом:
Слово LF сохраняет то же логическое значение через 3 символа пользовательский интерфейс (e.g. 111 или 000), чтобы представлять неизменение поразрядные значения в слове.
Слово HF изменяет во время 3 символов пользовательский интерфейс (e.g. 101 или 010), чтобы представлять изменение поразрядные значения в слове.
Примечание: блок CTLE оптимизирует для внутреннего глаза (только содержимое HF).
Отключите внутреннюю адаптацию CTLE путем соединения выхода с терминатором строки
Измените вход CTLE, чтобы использовать сигнал от DFECDR (который позволяет адаптацию вместе глобально),
Настройте DFECDR путем создания блока MATLAB function, который оценивает метрики Глаза, в зависимости от Внутренней шины и параметров CTLE, затем выводит значение, чтобы использовать для настройки CTLE.
В DFECDR закодируйте функцию MATLAB, чтобы работать с входными сигналами во время контуров пользовательского интерфейса, а не с каждым демонстрационным интервалом
Добавьте условные операторы, чтобы сравнить метрики Глаза между Низкочастотными (LF) словами данных и Высокочастотными (HF) словами данных, определить затем лучшее значение эквализации.
Значением эквализации, выведенным функцией MATLAB, является Сигнал в Simulink. Это означает, что блок CTLE будет использовать это в качестве своего входа - так каждый раз, когда он изменяется, форма волны RX будет компенсироваться с этим новым значением во время симуляции области Времени.
Примечание: Блоки в системе RX могут совместно использовать сигналы. Это также верно в системе TX. Однако никакие сигналы не могут быть совместно использованы системами TX и RX.
Откройте систему путем ввода serdesDesigner (‘TDadapt.mat’). Вы будете видеть систему с основным TX, канал на 100 Ом с потерей 16 дБ на уровне 5 ГГц и RX, содержащим CTLE, сопровождаемый DFECDR. В этом примере CTLE настраивается, чтобы использовать "зафиксированный" режим (потому что этот пример показывает, как программно адаптироваться путем оценки фиксированных значений в функции MATLAB), и набор спецификации к "Усилению DC и Худому Усилению", и установите "усиление DC" на область значений 0 к-15 дБ (с шагом-1dB) и установите "Худое усиление" на область значений 0 к +15dB (с шагом +1dB) как показано ниже. Также обратите внимание, что DFECDR должен собираться "адаптировать" режим.
Можно нажать на CTLE и установить режим на "фиксированный".
Затем можно циклически повториться через различные значения для Выбора Настройки для CTLE и наблюдать эффект различных значений эквализации на глазковой диаграмме приемника:
Фигурируйте Выше: под - компенсируемая форма волны RX: набор Выбора Настройки CTLE к 0 (минимум).
Фигурируйте Выше: сверхкомпенсируемая форма волны RX: набор Выбора Настройки CTLE к 15 (максимум).
Фигурируйте Выше: критически компенсируемый сигнал: набор Выбора Настройки CTLE к 7 (e.g. значение среднего уровня).
Можно разработать алгоритм, чтобы оптимизировать сигнал приемника при помощи концепции Эквализации. Например, сигнал RX может быть рассмотрен как сверхкомпенсируемый, под - компенсируемым или критически компенсируемым:
Экспортируйте систему в Simulink.
В разделе Receiver можно изменить CTLE и DFECDR к стоимости акций с помощью Сигналов для того, чтобы включить глобальную адаптацию во время симуляции области Времени.
Можно посмотреть под маской CTLE (CTRL-U), затем изменить ConfigSelect выход в Терминатора вместо DataStoreWrite. Путем размещения Терминатора в ConfigSelect выход CTLE больше не находится в режиме обратной связи, и любой другой блок в системе RX может взять под свой контроль этот CTLE путем записи в его входной сигнал ConfigSelect.
Вы измените CTLE.ConfigSelect выход, чтобы связать с терминатором строки:
Можно теперь изменить DFECDR, чтобы управлять значением входа ConfigSelect, используемого CTLE во время симуляции области Времени. Это может быть выполнено путем добавления функции MATLAB, которая использует следующие параметры, чтобы оценить настройку CTLE, чтобы адаптироваться к следующему лучшему значению эквализации:
режим
• ConfigIn
• symbolRecovered
• voltageSample
Затем вы будете видеть, как изменить DFECDR, чтобы добавить эту функцию MATLAB.
Вы будете видеть селектор шины во Внутренней части выходного порта. Дважды щелкните, чтобы открыть его меню Block Parameters и внести следующие изменения:
Нажмите на сигнал symbolRecovered и нажмите кнопку отмеченный “Выбор>>” и повторите это для voltageSample. Это дополнительные выходные параметры, который является, почему необходимо включить их. Кроме того, необходимо изменить настройку и symbolTime и sampleInterval от "сигнала" до "параметра". Можно сделать это от "панели инструментов" данных о редактировании в то время как в функциональном редакторе в 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, чтобы создать порты. Используя любой метод, должны появиться следующими порты:
Входные параметры:
режим
конфигурирование
voltageSample
symbolRecovered
Примечание: symbolRecovered и voltageSample являются дополнительные выходные параметры блока DFECDR как показано в Селекторе Шины выше.
Выведите (то же самое как имя функции):
config
Создайте постоянный блок и сконфигурируйте его Присвоение Элемента на CTLESignal.Mode. Затем соедините его с портом входного параметра функции для режима.
Затем создайте блок чтения datastore и сконфигурируйте Присвоение Элемента на CTLESignal.ConfigSelect. Затем соедините его с портом входного параметра функции для того, чтобы сконфигурироваться.
Затем создайте блок записи datastore и сконфигурируйте Присвоение Элемента на CTLESignal.ConfigSelect. Затем соедините его с функциональным выходным портом для config.
Примечание: можно добавить Осциллограф, чтобы наблюдать адаптирующиеся значения CTLESignal.ConfigSelect в процессе моделирования.
Когда вы будете закончены, соединяя сигналы, DFECDR появится следующим:
Можно отредактировать файл "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
Можно использовать 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 начинается с 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, чтобы протестировать его эффект результатов области Времени.
Фигура: Статистический и Результаты области Времени с недостаточным Игнорируют Биты.
optPulseMetric | DFECDR | CTLE