Изучаем спецификации RGMII и возможности MEMS генераторов.
В рассказе А.Беляева «Мистер Смех» главный герой мог
заставить смеяться окружающих просто падая. Но когда на нашем
новом SOM`е стал иногда падать link на GbE, я понял, что будь
на его месте мистер Смех, наши программисты всё равно не
засмеялись бы.
Итак, у нас есть свой SOM на CycloneV-SE SOC`е. И среди 200
контактов есть выход на тот самый GbE. Привожу схему, чтобы
было понятно:
И суть проблемы: редкие падения-восстановления link на скорости 1000Gb/s.
— Что может быть причиной?
Исследования проводились в двух направлениях:
1) возможности MEMS (генератор 25MHz);
2) корректная работа RGMII интерфейса.
- Почему MEMS? — спросите Вы.
- Это дёшевая, программируемая и малопотребляющая штуковина. Но когда на коробке с программатором для этих генераторов я увидел надпись «Not recommended: Bluetooth, WiFi, USB3.0, Gigabit Ethernet», у меня самого возник подобный вопрос.
Т.к. стабильность частоты у генераторов +-20ppm, то подозрения упали на джиттер (J). И для того чтобы прикинуть а сколько надо, пришлось покопаться в IEEE 802.3-2008.
Из табл. 39-5 секции 3 были взяты две цифры:
1) нормативная Total J (TJ) = 192ps (peak-peak);
2) информативная Deterministic J (DJ) = 96ps (peak-peak),
с помощью которых можно найти запас устойчивости (RJ'(rms))
Si501 по Random J (RJ) следующим образом:
1) определим бюджет RJ(peak-peak) = TJ-DJ = 192-96 = 96ps;
2) соответственно, RJ(rms) = RJ(peak-peak)/alpha = 96/13.8 =
6.96ps,
где alpha = erfcinv(2BER/DTD)sqrt(8) (48B.3.1.3.1);
3) согласно pdf на Si501, в качестве RJ можно брать Phase J
(PJ) = 1.3ps(rms) и тогда искомая величина будет равна:
RJ'(rms) = sqrt(RJ(rms)^2-PJ(rms)^2) = sqrt(6.96^2-1.3^2) =
6.84ps,
а доля Si501 в бюджете TJ передатчика равна:
E,% = (RJ(rms)-RJ`(rms))/RJ(rms) = (6.96-6.84)/6.96 = 1.7%
На мой взгляд, это мало. И дело тут не в J.
- Тогда RGMII?
Судя по всему, EMAC HPS работает в соответствии с версией 1.3
RGMII. Т.е. вот так:
Тут оптимальный захват данных достигается за счет задержек
тактовых сигналов на (1.5-2)ns. Это обычно делается за счет
увеличения длины дорожек.
А PHY после сброса хочет работать по версии 2.0, т.е. вот так:
Налицо явное противоречие, т.к. моём случае все линии данных были
выровнены по тактовым сигналам и задержек на плате не было, а у МАС
в соответствии с 1.3 внутренней задержки на стороне TX
не предусмотрено.
Но для таких как я, в PHY предусмотрены дополнительные skew:
В нашем случае значения skew для RX устанавливались самим PHY
после сброса, а для TX их грузил Linux. И, судя по всему,
грузил правильно.
Подведу итоги:
1) Я разобрался с RGMII, хотя это не помогло решить проблему.
2) Я впервые покопался в IEEE 802.3-2008 в секциях 3 и 4 на
предмет J, хотя это тоже не дало результатов.
3) В итоге оставив в покое RGMII мы заменили MEMS на XO и
link перестал падать. Собственно, с этого мы и начали.
4) Для анализа интерфейса, работающего на частоте 125MHz,
осциллографа с полосой 200MHz явно недостаточно.
Во-первых, величина стабильности частоты ±20 ppm является долговременной нестабильностью и напрямую не связана с джиттером. Для анализа последнего необходимо опираться на характеристики фазового шума генератора, а не на долговременную стабильность.
Во-вторых, если честно, секция с расчетом total jitter читается просто ужасно. Дело даже не в формулах, набранных в тексте, но во внезапно возникающих определениях. Что такое Deterministic J? alpha выглядит магической константой, что за 2BER и DTD используются при её расчете?
На расчете RJ’ и E,% — я окончательно потерял нить повествования. Хотя бы краткая теория просто необходима, иначе зачем писать статью?
В-третьих, что значит «На мой взгляд, это мало. И дело тут не в J»? Почему 1.7% это много или мало? При принятии решений разработчик должен руководствоваться объективными критериями.
Не помешали бы временные диаграммы интерфейса, непонятно, зачем там эта задержка в 1.5-2 нс, хоть на плате, хоть внутри чипа.
«Судя по всему, грузил правильно»? Из чего вы сделали такой вывод?
Наконец, в чем итоги? Какова связь конфигурации clock skew с тем, что переход на XO устранил проблему? Какая величина джиттера у XO?
Почему осциллографа недостаточно? Понятно, что спектр цифрового сигнала с частотой 125 МГц уходит далеко за пределы 200 МГц и форма сигнала будет сильно искажена. Но для ряда задач (например, измерения задержек между сигналами) даже искаженной формы сигнала будет достаточно.
автор сейчас в отпуске. в понедельник вернётся и всё обязательно расскажет и объяснит.
В этой заметке я привёл результаты по конкретному железу: генератор Si501, phy 9031rnx и emac от soc`а. На вопрос к silabs о параметре, по которому Si501 не подходит для приложений gbe, мне ответили: «Гигабитная карта с Si501 теряла слишком много пакетов по сравнению с генератором XO». Вот такой замечательный ответ.
Что касается джиттера, то он делится на deterministic и random в пропорции 50/50. Я пытался найти запас по random — RJ`(rms), т.е. со штрихом. А без штриха — это весь бюджет на random. И у меня получилось что от допустимого бюджета, т.е. 100%, фазовый джиттер съедает только 1.7%. А остальные 98.3% приходятся на emac и phy. Не думаете же Вы, что производители этих замечательных чипов закладываются на величины свыше 50% и считают их подходящими? Чтобы это проверить я послал соответствующие запросы. От micrel я результата не добился — они меня просто послали, а от altera ещё жду ответа.
Что касается вопросов:
1) Deterministic J — информативная составляющая джиттера; alpha — масштабный коэфф., BER — коэфф. ошибок; DTD — data-transition density, равный отношению number_of_edges к number_of_bits для данных, т.е. 0.5 и 1 для тактовых импульсов. Все термины взяты из секции 3 ieee802.3. Основная формула — это комплементарная функция ошибки. В моём тексте я взял alpha равную 13.8 (как в секции 3), хотя:
erfcinv(2*1e-12/.5)*sqrt(8) = 13.87.
2) Объективных критериев я не нашёл, поэтому просто выступил в роли эксперта. Могу выслушать любые возражения на этот счёт.
— При длительности импульса 4нс задержка в (1.5-2)нс очевидно нужна для правильного стробирования.
— Грузил правильно со слов программистов.
— Связи между clock skew и XO никакой нет. Это две разные ветки решения одной проблемы.
— Величина джиттера на установленный XO неизвестна.
— Про осциллограф я просто пошутил.