Этот пример показывает, как выполнить оптимизацию набора компонентов приемника как системы с помощью функции optPulseMetric
вычисляют метрики, такие как высота глаза, ширина и оценка рабочего запаса канала (COM), из импульсной характеристики при целевой вероятности битовой ошибки (BER), чтобы оценить оптимальную эффективность конкретного строения. Адаптация выполняется как статистический анализ (Init), затем оптимизированный результат передается во временной области (GetWave).
Этот пример использует модель SerDes Designer rx_ctle_adapt_dfe_train
как начальная точка. Введите следующую команду в командном окне MATLAB ®, чтобы открыть модель:
>> serdesDesigner('rx_ctle_adapt_dfe_train.mat')
Этот проект содержит раздел приемника с двумя блоками CTLE, за которыми следует блок DFECDR. В своём строении по умолчанию эти блоки оптимизируются по отдельности. Цель этого примера состоит в том, чтобы оптимизировать блоки как систему.
Для CTLE_LowFreq
блок, частота Peaking (ГГц) установлена на [10 11 12 13 14 15 16]
коэффициент усиления постоянного тока (дБ) установлен в [0 0 0 0 0 0 0]
, и Пиковый коэффициент усиления (дБ) установлен в 0
. Все другие параметры сохраняются на своих значениях по умолчанию.
Для CTLE_HighFreq
блок, спецификация установлена в DC Gain and AC Gain
, Пиковая частота (ГГц) установлена в 14
коэффициент усиления постоянного тока (дБ) установлен в 0
, и коэффициент усиления переменного тока (дБ) установлен на [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 Systems.
В первом разделе области пользовательского кода проверяется, находятся ли оба CTLE в режиме адаптации и переменные создания экземпляров для хранения временных значений и оптимальных показателей строения.
%% 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
. Импульсная характеристика поддается метрической оценке легче, чем импульсная характеристика. The 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