makc 218 24 ноября, 2023 Опубликовано 24 ноября, 2023 · Жалоба Доброго всем дня, Столкнулся с ещё одной проблемой наличия линка на PCI-E у плат с Артиксами, причём в этот раз LTSSM не может пройти дальше практически самой начальной фазы - Detect.Active, т.е. не отрабатывает процедура Receiver Detection. В описании GTP есть следующий пункт: Судя по нему в начале процедуры определения наличия приёмника ПЛИС должна установить уровень сигнала на линиях TXN и TXP равным (Vdd - Vswing/2). Отдельный вопрос, какое именно значение Vswing они считают правильным, но я предполагаю что 500 мВ. Vdd судя по всему это Vmgtavtt, т.е. 1,2 В. Т.е. в итоге на выходах ПЛИС должно появиться значение напряжения около 0,95 В. Далее, судя по описанию, происходит отключение управляющей цепи и уровень сигнала должен вернуться к Vcmoutac (1,2 В / 2 = 0,6 В) и ПЛИС через заданный интервал должна измерить величину напряжения на линиях TXP/TXN, по которому принимается решение о наличии на линии приёмника. Это полностью согласуется с логикой описания этого процесса в спецификации PCI-E: Однако по факту я наблюдаю совсем другую картину: 1. перед началом процедуры определения приёмника напряжение на выходах 560 мВ; 2. при включении режима определения приёмника на выходе ПЛИС появляется уровень 1,18 В с крутым фронтом (если приёмника нет или он не готов), если приёмник есть и с ним всё хорошо, то уровень около 960 мВ. 3. далее передатчик ПЛИС формирует крутой спад сигнала и уровни возвращаются к исходным 560 мВ; Т.е. не видно никакого длительного процесса заряда-разряда конденсатора, по которому бы ПЛИС с помощью компаратора (сравнивающего уровень сигнала в линии с опорным значением) могла судить о наличии приёмника на другом конце. Напротив, всё выглядит так, что ПЛИС формирует достаточно мощный импульс и в зависимости от получившегося практически стабильного по времени уровня напряжения принимает решение о наличии/отсутствии приёмника. Проблема в том, что на некоторых слотах x16 (подключённых напрямую к процессору) процессор далеко не сразу правильно настраивает свои приёмники (подключает терминаторы) или они не сразу включаются и в результате ПЛИС не может определить их наличие, а значит пойти дальше по графу состояний LTSSM. При этом особенно интересно, что в то же самое время, пока ПЛИС не может определить наличие приёмника на другом конце, процессор успешно видит приёмник в ПЛИС и начинает слать TS1/TS2, пытаясь поднимать линк. Однако через некоторый таймаут всё это прекращается, т.к. он по всей видимости не дожидается получения TS1/TS2 от ПЛИС, что логично, т.к. ПЛИС не видит приёмника. Т.е. по факту процессор сам себе обрубает линк с платой. При этом после тёплого ресета линк стабильно поднимается (процессор прогрелся и у него стало всё хорошо? 😉). Такое поведение наблюдается на паре материнских плат и число чудящих Artix`ов всего два. При этом такая проблема далеко не нова - https://support.xilinx.com/s/article/51135?language=en_US Правда в моём случае процессор не третьего, а четвёртого поколения, для которого такой эрраты в доступной документации нет и значение TX_RXDETECT_REF уже равно рекомендованному 3'b011. На проблемных платах помогает уменьшение TX_RXDETECT_REF до значения 3'b010, при этом на рабочих платах увеличение значения TX_RXDETECT_REF до 3'b100 ломает установку линка. Однако логика работы параметра TX_RXDETECT_REF непонятна, т.к. в первую очередь кажется, что этот параметр определяет пороговое значение опорного уровня сигнала внутренного компаратора, при котором приёмник считается подключенным к линии. Однако если установить значение 3'b000, то я вижу, что максимальный уровень выходного сигнала ПЛИС в процессе проверки наличия приёмника снижается до 1,03 В вместо исходных 1,18 В. При этом Detect.Active пролетает с первого раза. Если всё так хорошо, то почему AMD (Xilinx) рекомендует ставить 3'b010 в крайнем случае и то после консультации с их техподдержкой? Есть-ли у кого-нибудь понимание, как на самом деле работает механизм определения наличия приёмника у Xilinx в седьмой серии? В шестой серии, судя по осциллограммам, механизм реализован плюс-минус также. Чем на практике чревата установка низких значений TX_RXDETECT_REF? PS: предложения вида "забить и забыть" принимаются, но игнорируются, т.к. в серии возможны массовые отказы и/или проблемы в совместимости. Поэтому ищется решение, которое бы гарантировало работоспособность плат на Артиксах в максимально широком спектре материнских плат и платформ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 218 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба Наснимал немного картинок попыток Receiver Detection в длинном слоте мат.платы, чтобы было понятно о чём идёт речь. 1. Холодный запуск - попыток начала передачи TS1/TS2 нет, т.к. ПЛИС приёмник не увидела по причине слишком большой амплитуды сигнала на TXP/TXN, которая обусловлена отсутствием нагрузки в виде Rterm на стороне процессора: 2. Холодный запуск - попыток начала передачи TS1/TS2 нет, т.к. ПЛИС приёмник не увидела по причине слишком большой амплитуды сигнала на TXP/TXN. Но по сравнению с предыдущим вариантом амплитуда ниже, однако недостаточно низкая для определения наличия линка. Т.е. Rterm на стороне процессора подключились, но пока их номинал вне пределов, заданных спецификацией PCIe: 3. Холодный запуск - попыток начала передачи TS1/TS2 есть, линк в итоге поднялся. Но по сравнению с предыдущим вариантом амплитуда та же и компаратору в ПЛИС повезло увидеть "правильный" уровень. Rterm на стороне процессора подключились, но их номинал вне пределов, заданных спецификацией PCIe: 4. Теплая перезагрузка по кнопке Reset. Судя по виду диаграммы на линиях TXP/TXN у процессора появились правильные Rterm, линк поднимается с первой попытки: 5. Заклеил каптоновым скотчем линии TXP/TXP на плате и попробовал запуститься в режиме холодного старта. ПЛИС не увидела приёмника и вошла в режим непрерывных попыток его обнаружения. При этом амплитуда сигнала составила 1,2 В: 6. Заклеил каптоновым скотчем линии TXP/TXP на плате, припаял на эти линии после конденсаторов два резистора по 51 Ом на землю, в прошивке ПЛИС установил параметр TX_RXDETECT_REF=3'b000 и попробовал запуститься в режиме холодного старта. ПЛИС сразу увидела наличие "приёмника" и начала передавать TS1/TS2: 7. То же самое, что в предыдущем эксперименте, только TX_RXDETECT_REF=3'b011. В режим холодного старта ПЛИС сразу увидела наличие "приёмника" и начала передавать TS1/TS2: 8. То же самое, что в предыдущем эксперименте, только TX_RXDETECT_REF=3'b111. В режим холодного старта ПЛИС не увидела наличие "приёмника" и не начала передавать TS1/TS2 несмотря на вполне красивую картину на шине: Из вышеприведённых результатов я делаю следующие выводы: 1. Значение TX_RXDETECT_REF определяет величину опорного напряжения компаратора, который определяет присутствие приёмника на линиях TXP/TXN. При этом значение по-умолчанию 3'b011 по всей видимости даёт значение опорного уровня около 1,05 В, чего бывает недостаточно для нормальной работы с некотоыми интеловскими процессорами. Значение 3'b010 по всей видимости соответствует значению 1,1 В, которое в моём случае даёт стабильный результат. Но даже установка значения 3'b000 не несёт никаких фатальных последствий, т.к. без приёмника на линии ПЛИС не начинает передачу TS1/TS2. 2. Параметры приёмника в процессорах/ПЛИС (значения Rterm) нестабильны и могут меняться в процессе работы. В результате если в BIOS стоит малый таймаут на запуск линка PCIe может не успевать подниматься. Возможно это связано с тем, что в процессоре реализован PCIe Gen3, но проверить это невозможно. 3. Короткие слоты, которые подключены к хабу (PCH) всегда работают стабильно и судя по наблюдаемым осциллограммам на них сразу после Reset'a присутствуют правильные значения Rterm. 4. Описание процесса Receiver Detection у Xilinx следует читать так: ПЛИС выдаёт на линии TXP/TXN значение Vdd (MGTAVTT) = 1,2 В, которое при наличии подключённых к линии Rterm = 40...60 Ом даёт значение напряжения Vdd - Vswing/2 = 0,85 В. Vswing = 0,7 В, на которые происходит увеличение напряжения на линиях TXP/TXP, т.е. разность между Vdd и Vcm. Далее, спустя заданный интервал, ПЛИС с помощью компаратора сравнивает значения напряжений на TXP/TXN с пороговым значением и если значение напряжений ниже порога, то это определяется как присутствие приёмника на линии. После этого выдача 1,2 В на линии TXP/TXN прекращается (закрывается ключ внизу) и трансивер переходи в режим передачи TS1/TS2. Итог: интеловские процессоры нарушают спецификацию PCIe, но большинство распространённых плат на это забивает и работает, в отличие от Artix-7, которому такое не нравится. Но и ему можно объяснить, что всё хорошо и не стоит излишне переживать. 😉 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба В результате, рекомендуете ставить TX_RXDETECT_REF = 3'b010 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 218 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба Только что, Flood сказал: В результате, рекомендуете ставить TX_RXDETECT_REF = 3'b010 ? Да, это повышает шансы и с таким значением этого параметра ни одного сбоя не зафиксировано. Ещё в эту тему нашлась прикольная эррата на Kintex XC7K325T: Судя по ней и значение TX_RXDETECT_REF = 3'b000 очень даже ничего, правда там немного другой тип GT-трансивера, но тем не менее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 32 minutes ago, makc said: Ещё в эту тему нашлась прикольная эррата на Kintex XC7K325T: Это не на Engineering sample? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 218 27 ноября, 2023 Опубликовано 27 ноября, 2023 · Жалоба 44 минуты назад, Flood сказал: Это не на Engineering sample? Да, из Kintex-7 FPGA XC7K325T CES9937 Errata EN171 (v1.6) February 28, 2012 Я обратил на неё внимание из-за рекомендации по установке значения TX_RXDETECT_REF = 3'b000 и комментария "Set the following attributes to force the transmitter to always detect a receiver". 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться