Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не стартует PCIE корка в Stratix V
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
novartis
Пытаюсь запустить проект для платы XPRESSGX5-LPA7SE-GEN3 от Reflexces.
Я его уже и так и эдак.
Взял пример, который генерится в qsys, его и эксплуатирую.

Вот сигнал тап что показывает:
Нажмите для просмотра прикрепленного файла

Как я понимаю:
serdes_pll_locked = 1 - частота захвачена, то етсь 100МГЦ с разъема pcie подается,
reset_status = 0 - не под сбросом находится,
npor, perstn = 1 - сброса нет.
А LTSSM = 00001: Detect.Active.

Как это правильно интерпретировать?
Корка не может pcie линки обнаружить или что?
Inanity
Здравствуйте.

Что-то у вас на этапе детектирования сторон не проходит. Либо хост не видит плату, либо наоборот. Приёмная сторона терминирование включает для того, чтобы ответная сторона её детектировала. Пробовали ли на другой матери? Не повреждены ли конденсаторы на плате на линиях PCIe? Не знаю как на альтере (думаю там всё так же), надо проверить RX_ELECIDLE пин на корке PCIe, он отвечает за то, что хост увидел плату.
novartis
Спасибо за ответ!

Решил добавить в сигнал тап еще сигналы (какие то внутренние).
Скомпилил проект, залил, в сигнал тапе вижу LTSSM = 0x0F, то есть плата перешла в нормальное рабочее состояние!
В jungo windriver тоже свою плату вижу, можно драйвер сгенерить.

Тут же перезаливаю прошивку - LTSSM = 0x01.

Опять перезаливаю прошивку - LTSSM = 0x0F.

SDC файл в проект добавлен. Указаны частоты 100МГц - реф клок для pcie, 125МГц - для компонентов реконфигурации трансиверов, 100МГц - для светодиодов.
Тайм квест говорит, что все констрейны удовлетворены.

Что же делать?
Inanity
Цитата(novartis @ Jun 1 2016, 09:52) *
Тут же перезаливаю прошивку - LTSSM = 0x01.

Опять перезаливаю прошивку - LTSSM = 0x0F.


А вы перезагружаете хост после заливки прошивки? Я не уверен, что обычный PCIe умеет hotplug (вот expresscard умел). Если ваша плата поддерживает внешнее питание, то по идее нужно питать отдельно от хоста, конфигурировать ПЛИС и только после этого включать хост. Если это невозможно, то нужно каждый раз зашивать конфигурирующую память (И, кстати, если ПЛИСина жирная, то нужно, чтобы она успела законфигурироваться после подачи питания. Там вроде для PCIe 100ms допустимо).

И ещё, насколько я помню, после link training плата должна в состоянии 0x16 находиться, т.е. L0.
Andrew Su
Цитата(novartis @ Jun 1 2016, 09:52) *
Спасибо за ответ!

Решил добавить в сигнал тап еще сигналы (какие то внутренние).
Скомпилил проект, залил, в сигнал тапе вижу LTSSM = 0x0F, то есть плата перешла в нормальное рабочее состояние!
В jungo windriver тоже свою плату вижу, можно драйвер сгенерить.

Тут же перезаливаю прошивку - LTSSM = 0x01.

Опять перезаливаю прошивку - LTSSM = 0x0F.

SDC файл в проект добавлен. Указаны частоты 100МГц - реф клок для pcie, 125МГц - для компонентов реконфигурации трансиверов, 100МГц - для светодиодов.
Тайм квест говорит, что все констрейны удовлетворены.

Что же делать?


Добрый день.
После перезаливки конфигурации попробуйте в диспетчере устройств выполнить поиск устройств.
Удачи.
doom13
Цитата(Inanity @ Jun 1 2016, 12:28) *
А вы перезагружаете хост после заливки прошивки? Я не уверен, что обычный PCIe умеет hotplug (вот expresscard умел). Если ваша плата поддерживает внешнее питание, то по идее нужно питать отдельно от хоста, конфигурировать ПЛИС и только после этого включать хост. Если это невозможно, то нужно каждый раз зашивать конфигурирующую память (И, кстати, если ПЛИСина жирная, то нужно, чтобы она успела законфигурироваться после подачи питания. Там вроде для PCIe 100ms допустимо).

Перезагрузка ПК не ведет к сбросу питания на PCIe плате (на моём ПК это так). Но чтобы каждый раз не перезагружаться после перепрошивки FPGA под Windows делал так:
1. До перепрошивки FPGA удаляется драйвер для PCIe устройства.
2. Перепрошивается FPGA.
3. Создаётся новый драйвер.
novartis
Цитата
после link training плата должна в состоянии 0x16 находиться, т.е. L0.

Вы опечаталмсь наверно, L0 = 0x0F, я об этом состоянии и писал, что иногда в нормальное рабочее состояние прошиваться стала.

Цитата
После перезаливки конфигурации попробуйте в диспетчере устройств выполнить поиск устройств.

Если плата повисла в L0 = 0x01, то комп ее не видит и все тут, ни поиск в винде в диспетчере устройств не помогает, ни перезагрузка компа.

Цитата
Перезагрузка ПК не ведет к сбросу питания на PCIe плате

Питание для платы сбрасывать и не нужно. Я заливаю не во флешку, а в саму плис (sof файл).
После прошивки я пробовал и перезагружать комп.

Как я понимаю процесс.
Перезагружаем комп, в момент перезагрузки дергается нога perstn на разъеме pcie.
Происходит сброс корки pcie в ПЛИС, сброс компонентов реконфигурации и т.п.
Если бы образ для ПЛИС разворачивался из флешки, то это должно было бы выполниться за 100мс.
Но образ в ПЛИС уже загружен, поэтому требование про 100мс тут удовлетворяется.



Надо попробовать на другой материнской плате...


Хотелось бы рассказать про саппорт в reflexces.com:
на обращение в саппорт сам саппорт отводит себе 48 часов (business hour) - 48 рабочих часов, карл!!
Это 6 рабочих дней!! Ужас...
Inanity
Цитата(novartis @ Jun 1 2016, 19:56) *
Вы опечаталмсь наверно, L0 = 0x0F, я об этом состоянии и писал, что иногда в нормальное рабочее состояние прошиваться стала.


Я на xilinx делал, там L0 = 0x16. Наверное у альтеры по другому кодируются состояния LTSSM, хотя странно.

Цитата(novartis @ Jun 1 2016, 19:56) *
Если плата повисла в L0 = 0x01, то комп ее не видит и все тут, ни поиск в винде в диспетчере устройств не помогает, ни перезагрузка компа.


Detect.Active это не начальное состояние, перед ним Detect.Quiet вроде должен быть (у Xilinx там по крайней мере). У вас сброс этот вообще происходит? Не знаю
как в альтере PCIe сделан, но если до 0x01 есть состояния, в которые она не переходит после сброса, то что-то с логикой сброса не так.
novartis
У альтеры L0 = 0x0F. Видимо у каждого по своему.
Нажмите для просмотра прикрепленного файла

Провел сейчас эксперимент.
На другом компе на другой отладочной плате Stratix IV Dev Kit переразвел ноги pcie. Вместо pcie разъема указал на другие ножки (там второй pcie hard ip core есть), они в воздухе болтаются получается. Рефклок 100МГц подал.
В итоге рефклок захватилась, корка работает, LTSSM циклически переходит 0x00 -> 0x01 -> 0x00 -> 0x01...
Пытается обнаружить ответную сторону, но не удается.

От саппорта жду ответа по поводу IO_STANDARD для pci ног, в даташите только пины были указаны.
novartis
Саппорт прислал схему на плату.
На линии tx стоят конденсаторы по 100нФ.
Нажмите для просмотра прикрепленного файла

В то же время на отладке Stratix V GX FPGA Development Kit Board от альтеры-terasic кондеры по 220нФ.
Нажмите для просмотра прикрепленного файла

В стандарте на pcie GEN3 написано, что для GEN1 и GEN2 можно ставить 75-265нФ, для GEN3 176-265нФ
Нажмите для просмотра прикрепленного файла

Где то даже тема была, в которой обсуждали емкость конденсаторв для pcie, не могу найти.

Незнаю с этим или нет связаны мои проблемы.

Но выходит, что для GEN3 совсем всё плохо будет?


PS: исправил опечатки, везде про нанофарады
des333
Один из вариантов -- не правильно выбран I/O standard для референсного клока.
Jury093
Цитата(novartis @ Jun 2 2016, 21:19) *
На линии tx стоят конденсаторы по 100мкФ.
В то же время на отладке Stratix V GX FPGA Development Kit Board от альтеры-terasic кондеры по 220нФ.
В стандарте на pcie GEN3 написано, что для GEN1 и GEN2 можно ставить 75-265мкФ, для GEN3 176-265мкФ

у вас во всех трех картинках емкость правильная (100нФ = 0.1мкФ)
т.е. что 100нФ, что 0.22мкФ вполне в границах допуска, для Gen3 надо не меньше 176нФ
256мкФ - это явно ваша опечатка..

для паранойи, самостоятельно или попросите монтажника внимательно посмотреть монтаж конденсаторов - кондюки бывают лопаются или коротятся по обкладкам/монтажу, что приводит к неработоспособности линии..
novartis
Помогите правильно назначить пины для pcie.
Вот такая схема для pcie ног:
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Сам рефлекс предлагает использовать следующие назначения:
Код
# PCIe Signals
set_location_assignment PIN_AC28 -to pcie_rstn
set_location_assignment PIN_AF34 -to refclk
set_location_assignment PIN_AV38 -to rx_in0
set_location_assignment PIN_AT38 -to rx_in1
set_location_assignment PIN_AP38 -to rx_in2
set_location_assignment PIN_AM38 -to rx_in3
set_location_assignment PIN_AH38 -to rx_in4
set_location_assignment PIN_AF38 -to rx_in5
set_location_assignment PIN_AD38 -to rx_in6
set_location_assignment PIN_AB38 -to rx_in7
set_location_assignment PIN_AU36 -to tx_out0
set_location_assignment PIN_AR36 -to tx_out1
set_location_assignment PIN_AN36 -to tx_out2
set_location_assignment PIN_AL36 -to tx_out3
set_location_assignment PIN_AG36 -to tx_out4
set_location_assignment PIN_AE36 -to tx_out5
set_location_assignment PIN_AC36 -to tx_out6
set_location_assignment PIN_AA36 -to tx_out7

# Misc
set_location_assignment PIN_AK23 -to clk125

# Pin Constraints
set_instance_assignment -name IO_STANDARD "2.5 V" -to pcie_rstn
set_instance_assignment -name IO_STANDARD LVDS -to clk125
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to refclk
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in0
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in1
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in2
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in3
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in4
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in5
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in6
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to rx_in7
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out0
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out1
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out2
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out3
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out4
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out5
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out6
set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to tx_out7


Но с ними pcie встает в состояние LTSSM = 0x01 - Detect.Active, и дальше никуда не движется.

По схеме у рефклока есть внешнее сопротивление 100 Ом, как его наличие указать в квартусе?
По схеме это сопротивление не подключено (nc) и на плате его тоже нет.
novartis
Уже во всем ищу причину))

Вот на фото на трассе референс клока какая то грязь, флюс не смыт что ли?
Может это влиять на работу pcie?
Как это дело очистить в условиях обычного офиса (спиртиком протереть или еще чего)?

Нажмите для просмотра прикрепленного файла
Inanity
Цитата(novartis @ Jun 5 2016, 19:59) *
Уже во всем ищу причину))

Вот на фото на трассе референс клока какая то грязь, флюс не смыт что ли?
Может это влиять на работу pcie?
Как это дело очистить в условиях обычного офиса (спиртиком протереть или еще чего)?


Вроде маской закрыто всё, вряд ли. Водкой смойте, если имеется. Жидкостью для очистки мониторов в небольших количествах. Хуже не будет. Главное всё просушить.
Gate
У меня еще для рефлексиса в работающем дизайне есть строки:
Код
set_global_assignment -name VCCT_L_USER_VOLTAGE 1.0V
set_global_assignment -name VCCT_R_USER_VOLTAGE 1.0V
set_global_assignment -name VCCR_L_USER_VOLTAGE 1.0V
set_global_assignment -name VCCR_R_USER_VOLTAGE 1.0V
set_global_assignment -name VCCA_L_USER_VOLTAGE 3.0V
set_global_assignment -name VCCA_R_USER_VOLTAGE 3.0V
set_global_assignment -name POWER_HSSI_VCCHIP_LEFT "Opportunistically power off"
set_global_assignment -name POWER_HSSI_VCCHIP_RIGHT "Opportunistically power off"
set_global_assignment -name ENABLE_DRC_SETTINGS ON
set_global_assignment -name DISABLE_OCP_HW_EVAL ON

set_instance_assignment -name IO_STANDARD HCSL -to refclk_clk
set_instance_assignment -name XCVR_REFCLK_PIN_TERMINATION DC_COUPLING_EXTERNAL_RESISTOR -to refclk_clk
set_instance_assignment -name IO_STANDARD LVDS -to reconfig_xcvr_clk_clk
set_instance_assignment -name IO_STANDARD "2.5 V" -to perstn
#set_instance_assignment -name IO_STANDARD "1.5 V" -to local_rstn
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in0
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in1
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in2
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in3
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in4
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in5
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in6
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_rx_in7
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out0
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out1
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out2
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out3
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out4
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out5
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out6
set_instance_assignment -name IO_STANDARD "1.5-V PCML" -to pcie_256_hip_avmm_0_hip_serial_tx_out7
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in0
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in1
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in2
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in3
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in4
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in5
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in6
set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in7
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in0
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in1
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in2
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in3
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in4
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in5
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in6
set_instance_assignment -name XCVR_VCCA_VOLTAGE 3_0V -to pcie_256_hip_avmm_0_hip_serial_rx_in7
novartis
Добавил в сигналтап секцию, клок для нее - pcie_refclk. В коде накатал счетчик от этой тактовой и вывел его в эту секцию сигналтапа.
Иногда заливаю прошивку - сигналтап пишет waiting clock, то есть клока нет.
Несколько раз перезаливаю эту же прошивку - клок появляется, счетчик тикает.

Рефклок от компьютера в разъеме pcie он же всегда должен быть?
doom13
Цитата(novartis @ Jun 9 2016, 12:33) *
Рефклок от компьютера в разъеме pcie он же всегда должен быть?

Похоже что нет, если при старте система нашла PCIe устройство - тогда клок будет.
novartis
Во как получается.
Этот счетчик частоты pcie_refclk я еще могу на другой частоте с кварца в сигналтапе посмотреть.
И там вижу, что какое то количество тактов он натикал (тактов ~ 5500).

Выходит, залил прошивку, входа/выхода в высокий импеданс перешли, комп увидел это, подал рефклок, но входа/выхода дальше в нормальную работу не перешли, комп и снял рефклок.

doom13
Если не ошибаюсь, у меня было так (до заливки прошивки во флэш дело тогда ещё не дошло) - комп стартовал, загружалась прошивка FPGA по JTAG и процом не мог промониторить память, которая использовалась в качестве PCIe BAR и тактировалась ref clock-ом, после перезагрузки компа всё начинало работать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.