Глобально адаптируйте компоненты получателя Используя импульсные метрики ответа, чтобы улучшать производительность SerDes

В этом примере показано, как выполнить оптимизацию набора компонентов получателя как система с помощью функционального optPulseMetric чтобы вычислить метрики, такие как высота глаза, ширина и маржа операционной прибыли канала (COM) оценивают от импульсного ответа с целевой частотой ошибок по битам (BER), чтобы оценить оптимальную производительность особой настройки. Адаптация выполняется как статистический анализ (Init), затем оптимизированный результат передается временному интервалу (GetWave).

Инициализируйте систему SerDes несколькими CTLEs и DFECDR

Этот пример использует модель SerDes Designer rx_ctle_adapt_dfe_train как начальная точка. Введите следующую команду в командном окне MATLAB®, чтобы открыть модель:

>> serdesDesigner('rx_ctle_adapt_dfe_train.mat')

Этот проект содержит раздел получателя с двумя блоками CTLE, сопровождаемыми блоком DFECDR. В их настройке по умолчанию эти блоки оптимизируют индивидуально. Цель этого примера состоит в том, чтобы оптимизировать блоки как систему.

Для CTLE_LowFreq блокируйтесь, Худая частота (GHz) установлена в [10 11 12 13 14 15 16], усиление DC (дБ) установлено в [0 0 0 0 0 0 0], и Худое усиление (дБ) установлено в 0. Все другие параметры сохранены в их значениях по умолчанию.

Для CTLE_HighFreq блокируйтесь, Спецификация установлена в DC Gain and AC Gain, Худая частота (GHz) установлена в 14, усиление DC (дБ) установлено в 0, и усиление AC (дБ) установлено в [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]. Все другие параметры сохранены в их значениях по умолчанию.

Для блока DFECDR Начальные веса касания (V) установлены в [0 0 0 0 0 0 0 0 0 0]. Все другие параметры сохранены в их значениях по умолчанию.

Экспортируйте систему SerDes в модель Simulink®.

Добавьте код, чтобы оптимизировать CTLEs и DFECDR как система

Дважды щелкните по подсистеме Init в блоке Rx и нажмите на кнопку Show Init. Скопируйте полный код, перечисленный в конце этого примера в Пользовательской пользовательской области кода. Сохраните модель. Код сломан ниже в нескольких подразделах для легкого понимания.

Примечание: Чтобы завершить пример, необходимо поместить следующие секции кода вместе в Пользовательскую пользовательскую область кода в подсистеме Init. Полный набор кода обеспечивается в конце этого примера. Для получения дополнительной информации о подсистеме Init, смотрите Статистический анализ в Системах SerDes.

Инициализируйте параметры получателя

Первый раздел Пользовательской пользовательской области кода проверяет, находятся ли и CTLEs в, адаптируют режим и переменные инстанцирования, чтобы содержать временные ценности и лучшие метрики настройки.

%% BEGIN: Custom user code area (retained when 'Refresh Init' button is pressed) 
% If both CTLEs are in Adapt mode, use global adaptation 
if CTLE_LowFreqParameter.Mode == 2 && CTLE_HighFreqParameter.Mode == 2 
    CTLE_LowFreqInitBestConfig = 0; 
    CTLE_HighFreqInitBestConfig = 0; 
    bestMetric = 0; 
    SPB = SymbolTime/SampleInterval; 

Разверните параметры CTLE

Пример кода устанавливает параметр CTLE.Mode от adapt к fixed позволить алгоритмическое управление значений для каждого блока. В этом случае значения непосредственно развертываются, и блоки называются, чтобы обработать импульсную характеристику.

    CTLE_LowFreqInit.Mode = 1; 
    CTLE_HighFreqInit.Mode = 1; 
    for CTLE_LowFreqInitSweep = 0:1:6 
        for  CTLE_HighFreqInitSweep = 0:1:15 
            % Set current sweep configs on each CTLE 
            CTLE_LowFreqInit.ConfigSelect = CTLE_LowFreqInitSweep; 
            CTLE_HighFreqInit.ConfigSelect = CTLE_HighFreqInitSweep; 
            % Call CTLEs and DFE 
            [sweepImpulse, ~] = CTLE_LowFreqInit(LocalImpulse); 
            [sweepImpulse, ~] = CTLE_HighFreqInit(sweepImpulse); 
            [sweepImpulse, ~, ~, ~, ~] = DFECDRInit(sweepImpulse); 

Преобразуйте Импульсную характеристику в Импульсный Ответ и Оцените с optPulseMetric

Преобразуйте импульсную характеристику в импульсный ответ для оценки функциональным optPulseMetric. Импульсный ответ предоставляет себя основанной на метриках оценке с большей готовностью, чем импульсная характеристика. optPulseMetric функция используется, чтобы оптимизировать систему SerDes в целом. О многих метриках сообщает эта функция, и можно использовать алгоритм, чтобы оценить несколько компонентов получателя вместе как систему.

            % Convert impulse after DFE to pulse then calculate eye metrics 
            sweepPulse = impulse2pulse(sweepImpulse,SPB,SampleInterval); 
            eyeMetric = optPulseMetric(sweepPulse,SPB,SampleInterval,1e-6); 
            % Select eye metric to evaluate results 
            sweepMetric = eyeMetric.maxMeanEyeHeight; 
%             sweepMetric = eyeMetric.eyeHeightMax; 
%             sweepMetric = eyeMetric.COMMax; 
%             sweepMetric = eyeMetric.meanHeightCenter; 
%             sweepMetric = eyeMetric.eyeHeightCenter; 
%             sweepMetric = eyeMetric.COMCenter; 

Оцените Результаты optPulseMetric

Сохраните настройки CTLE на основе сравнения с предыдущими результатами. Итоговые лучшие настройки сохранены на блоках для итогового статистического анализа (Init) и затем передали временному интервалу (GetWave) симуляцию.

     % If current sweep metric is better than previous, save the CTLE configs 
            if sweepMetric > bestMetric 
                bestMetric = sweepMetric; 
                CTLE_LowFreqInitBestConfig = CTLE_LowFreqInitSweep; 
                CTLE_HighFreqInitBestConfig = CTLE_HighFreqInitSweep; 
            end 
        end 
    end 
    % Set CTLEs to best configs from sweep 
    CTLE_LowFreqInit.ConfigSelect = CTLE_LowFreqInitBestConfig; 
    CTLE_HighFreqInit.ConfigSelect = CTLE_HighFreqInitBestConfig; 
end 
% END: Custom user code area (retained when 'Refresh Init' button is pressed) 

Запустите систему SerDes

Запустите систему SerDes и наблюдайте поведение оптимизации. Можно попытаться измениться, какая метрика оценена, чтобы выполнить различную оптимизацию.

Полный код

Вставка копии следующий код в Пользовательской пользовательской области кода в подсистеме Init получателя.

%% BEGIN: Custom user code area (retained when 'Refresh Init' button is pressed) 
% If both CTLEs are in Adapt mode, use global adaptation 
if CTLE_LowFreqParameter.Mode == 2 && CTLE_HighFreqParameter.Mode == 2 
    CTLE_LowFreqInitBestConfig = 0; 
    CTLE_HighFreqInitBestConfig = 0; 
    bestMetric = 0; 
    SPB = SymbolTime/SampleInterval; 
    CTLE_LowFreqInit.Mode = 1; 
    CTLE_HighFreqInit.Mode = 1; 
    for CTLE_LowFreqInitSweep = 0:1:6 
        for  CTLE_HighFreqInitSweep = 0:1:15
            % Set current sweep configs on each CTLE 
            CTLE_LowFreqInit.ConfigSelect = CTLE_LowFreqInitSweep; 
            CTLE_HighFreqInit.ConfigSelect = CTLE_HighFreqInitSweep; 
            % Call CTLEs and DFE 
            [sweepImpulse, ~] = CTLE_LowFreqInit(LocalImpulse); 
            [sweepImpulse, ~] = CTLE_HighFreqInit(sweepImpulse); 
            [sweepImpulse, ~, ~, ~, ~] = DFECDRInit(sweepImpulse); 
            % Convert impulse after DFE to pulse then calculate eye metrics 
            sweepPulse = impulse2pulse(sweepImpulse,SPB,SampleInterval); 
            eyeMetric = optPulseMetric(sweepPulse,SPB,SampleInterval,1e-6); 
            % Select eye metric to evaluate results 
            sweepMetric = eyeMetric.maxMeanEyeHeight; 
%             sweepMetric = eyeMetric.eyeHeightMax; 
%             sweepMetric = eyeMetric.COMMax; 
%             sweepMetric = eyeMetric.meanHeightCenter; 
%             sweepMetric = eyeMetric.eyeHeightCenter; 
%             sweepMetric = eyeMetric.COMCenter; 
% If current sweep metric is better than previous, save the CTLE configs 
            if sweepMetric > bestMetric 
                bestMetric = sweepMetric; 
                CTLE_LowFreqInitBestConfig = CTLE_LowFreqInitSweep; 
                CTLE_HighFreqInitBestConfig = CTLE_HighFreqInitSweep; 
            end 
        end 
    end 
    % Set CTLEs to best configs from sweep 
    CTLE_LowFreqInit.ConfigSelect = CTLE_LowFreqInitBestConfig; 
    CTLE_HighFreqInit.ConfigSelect = CTLE_HighFreqInitBestConfig; 
end 
% END: Custom user code area (retained when 'Refresh Init' button is pressed) 

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

| |

Похожие темы