В этом примере показано, как выполнить оптимизацию набора компонентов приемника как система с помощью функционального optPulseMetric
чтобы вычислить метрики, такие как высота глаза, ширина и маржа операционной прибыли канала (COM) оценивают от импульсного ответа с целевой частотой ошибок по битам (BER), чтобы оценить оптимальную эффективность особой настройки. Адаптация выполняется как статистический анализ (Init), затем оптимизированный результат передается временному интервалу (GetWave).
Этот пример использует модель 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®.
Дважды щелкните по подсистеме Init в блоке Rx и нажмите на кнопку Show Init. Можно поместить код в Пользовательскую пользовательскую область кода от следующих шагов и сохранить модель. Код сломан ниже в нескольких подразделах для легкого понимания.
Примечание: Чтобы завершить пример, можно также сослаться на прикрепленный файл 'rx_init_custom_user_code.m'
и поместите в Пользовательской пользовательской области кода в подсистеме 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.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
функция используется, чтобы оптимизировать систему SerDes в целом. О многих метриках сообщает эта функция, и можно использовать алгоритм, чтобы оценить несколько компонентов приемника вместе как систему.
Примечание: функциональный optPulseMetric
спроектирован, чтобы анализировать один ответ, не матрицу ответов, таким образом, можно использовать sweepPulse(:,1)
обрезать основной ответ из импульсной матрицы или импульсной матрицы.
% Convert impulse after DFE to pulse then calculate eye metrics sweepPulse = impulse2pulse(sweepImpulse,SPB,SampleInterval); eyeMetric = optPulseMetric(sweepPulse(:,1),SPB,SampleInterval,1e-6); % Select eye metric to evaluate results sweepMetric = eyeMetric.maxMeanEyeHeight; % sweepMetric = eyeMetric.maxEyeHeight; % sweepMetric = eyeMetric.maxCOM; % sweepMetric = eyeMetric.centerMeanEyeHeight; % sweepMetric = eyeMetric.centerEyeHeight; % sweepMetric = eyeMetric.centerCOM;
Сохраните настройки 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 и наблюдайте поведение оптимизации. Можно попытаться измениться, какая метрика оценена, чтобы выполнить различную оптимизацию.
CTLE | DFECDR | optPulseMetric