Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCIe
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Methane
Цитата(disel @ Mar 30 2010, 10:39) *
Если нужен хотплуг то нужно стандарт читать, а не пытаться познать его методом тыка плат в компьютер.

В стандарте написано что прочитайте регистр, и в этом регистр бит говорит поддерживает сплот хотплаг или не поддерживается. Вопрос, как сказать системе, то какой-то конкретный сплот поддерживает хотплаг?
dmitry-tomsk
Если хочется грузить прошивку с пользовательского приложения, то на плате дожно быть устройство для хранения загружаемой прошивки - флэш память (медленно программруется, ограничен ресурс) или микроконтроллер, который будет хранить прошивку в ОЗУ. Тогда можно было бы зашить в ПЛИС бутлоадер - чистый интерфейс с PCIe и интерфейсом к этому микроконтроллеру. Перед загрузкой рабочей прошивки нужно считать configuration space PCIe платы, который устанавливается ОС или БИОС при старте, перегрузить прошивку, а потом восстановить configuration space своим драйвером.
Methane
Цитата(dmitry-tomsk @ Mar 30 2010, 11:30) *
Если хочется грузить прошивку с пользовательского приложения, то на плате дожно быть устройство для хранения загружаемой прошивки - флэш память (медленно программруется, ограничен ресурс) или микроконтроллер, который будет хранить прошивку в ОЗУ. Тогда можно было бы зашить в ПЛИС бутлоадер - чистый интерфейс с PCIe и интерфейсом к этому микроконтроллеру. Перед загрузкой рабочей прошивки нужно считать configuration space PCIe платы, который устанавливается ОС или БИОС при старте, перегрузить прошивку, а потом восстановить configuration space своим драйвером.

Загрузиться из флеши, дождаться конфигурации, записать конфигурацию к примеру во флеш, записать новую прошивку из драйвера во флеш, перезагрузиться с новой прошивкой из флеши, восстановить конфигурацион спейс из флеши. Где-то так? Слишком сложно.
disel
Цитата(dmitry-tomsk @ Mar 30 2010, 12:30) *
Если хочется грузить прошивку с пользовательского приложения, то на плате дожно быть устройство для хранения загружаемой прошивки - флэш память (медленно программруется, ограничен ресурс) или микроконтроллер, который будет хранить прошивку в ОЗУ. Тогда можно было бы зашить в ПЛИС бутлоадер - чистый интерфейс с PCIe и интерфейсом к этому микроконтроллеру. Перед загрузкой рабочей прошивки нужно считать configuration space PCIe платы, который устанавливается ОС или БИОС при старте, перегрузить прошивку, а потом восстановить configuration space своим драйвером.

Этот метод понятен. Но все же интересно: а хотплуг для PCIe все же существует или нет?
Methane
Цитата(disel @ Mar 30 2010, 11:37) *
Этот метод понятен. Но все же интересно: а хотплуг для PCIe все же существует или нет?

Его не может не быть, потому что expressCard это PCIe 1x. ИМХО.

И ИМХО, по идее можно любому разъему сказать что он HotPlug. Тоже ИМХО.
dmitry-tomsk
Цитата(Methane @ Mar 30 2010, 12:36) *
Загрузиться из флеши, дождаться конфигурации, записать конфигурацию к примеру во флеш, записать новую прошивку из драйвера во флеш, перезагрузиться с новой прошивкой из флеши, восстановить конфигурацион спейс из флеши. Где-то так? Слишком сложно.

Зачем это configuration space во флэш писать? Это неколько регистров, они в памяти приложения остаются, которое прошивку перегружает (или драйвера). Сложного ничего нет, основная проблема - где хранить новую прошивку (флэш не самый удобный вариант).
disel
Цитата(Methane @ Mar 30 2010, 11:45) *
В стандарте написано что прочитайте регистр, и в этом регистр бит говорит поддерживает сплот хотплаг или не поддерживается. Вопрос, как сказать системе, то какой-то конкретный сплот поддерживает хотплаг?


Читать нужно: PCI Standard Hot-Plug Controller and Subsystem Specification 1.0
Только не знаю где взять.
Methane
Цитата(dmitry-tomsk @ Mar 30 2010, 11:56) *
Зачем это configuration space во флэш писать? Это неколько регистров, они в памяти приложения остаются, которое прошивку перегружает (или драйвера). Сложного ничего нет, основная проблема - где хранить новую прошивку (флэш не самый удобный вариант).

Флеш, это минимум 10тыс циклов. Так что можно и в ней. Прошивать, так по любому нужна будет CPLD, которая будет грузить. Проще уж ней выкрутится. Дело не в этом. Криво получается. И как я понял, от настроек root port зависит, что будет делать компютер, если на время перезагрузки endPoint перестанет отвечать.
SiTi
Цитата(Methane @ Mar 30 2010, 13:36) *
Загрузиться из флеши, дождаться конфигурации, записать конфигурацию к примеру во флеш, записать новую прошивку из драйвера во флеш, перезагрузиться с новой прошивкой из флеши, восстановить конфигурацион спейс из флеши. Где-то так? Слишком сложно.

Вот да... Я это и хотел сказать. Только вот не догадался, что конфигурационное пространство тоже надо сохранять...

Цитата
Зачем это configuration space во флэш писать? Это неколько регистров, они в памяти приложения остаются, которое прошивку перегружает (или драйвера).

Вот только не понятно, как это приложение будет иметь доступ к устройству (для записи), которое на какое-то время отрубилось... Это возможно?
Methane
Цитата(SiTi @ Mar 30 2010, 13:43) *
Вот только не понятно, как это приложение будет иметь доступ к устройству (для записи), которое на какое-то время отрубилось... Это возможно?

Спецификация говорит что да. Все зависит от настроек root port. А какие настройки у него в PC, ХЕЗ.
SiTi
Цитата(disel @ Mar 30 2010, 14:38) *
Читать нужно: PCI Standard Hot-Plug Controller and Subsystem Specification 1.0
Только не знаю где взять.

Я у себя не нашёл.

Цитата
Спецификация говорит что да. Все зависит от настроек root port. А какие настройки у него в PC, ХЕЗ.
Какая спецификация PCIe? Есть у меня исходники линуксячего драйвера, где я что-то подобное видел - сохраняется всё конфигурационное пространство, потом ребуут карточки, потом почти всё это пространство восстанавливается. Только я тогда не понял, что за ребуут такой... А похоже это то, что нам надо smile.gif
Methane
Цитата(SiTi @ Mar 30 2010, 13:56) *
Какая спецификация PCIe? Есть у меня исходники линуксячего драйвера, где я что-то подобное видел - сохраняется всё конфигурационное пространство, потом ребуут карточки, потом почти всё это пространство восстанавливается. Только я тогда не понял, что за ребуут такой... А похоже это то, что нам надо smile.gif

Какого именно драйвера? Ядро сейчас это 374 мегабайта.
В типовом ядре, есть каллбэки которые вызываются при инициализации PCI устройства, уходе его в слип, повердаун итд. Но чтобы сохранялось и восстанавливалось я не помню.
SiTi
drivers/net/mlx4/reset.c
Methane
Цитата(SiTi @ Mar 30 2010, 14:18) *
drivers/net/mlx4/reset.c

ХЕЗ. По идее после ресета, base адресса могут и другие быть. То похоже ресестится не PCI а что-то на PCI карточке.
XVR
Цитата(disel @ Mar 30 2010, 14:38) *
Читать нужно: PCI Standard Hot-Plug Controller and Subsystem Specification 1.0
Только не знаю где взять.
Тут - http://rapidshare.com/files/369941890/shpc1_0.pdf
Methane
Цитата(XVR @ Mar 30 2010, 15:40) *

Так это же не PCIe. С линком-то что делать?
XVR
Цитата(Methane @ Mar 30 2010, 20:16) *
Так это же не PCIe.
Это то, что рекомендовал disel, так что вопросы к нему smile.gif
Видимо нужен какой то из PCIe стандартов, только скажите какой (www.pcisig.com) Возможно PCIe Base подойдет
Немного написано в CEM спецификации:
Цитата
In the following text, all references to mechanical elements should be interpreted in the context of
the PCI Express card form factor definition, unless otherwise stated.
3.1. Scope
5 The PCI Express specification natively supports Hot-Plug/Hot Removal of PCI Express add-in
cards. However, hardware support of Hot-Plug/Hot-Removal on the system board is optional.
Since the PCI Express evolutionary form factor is designed as a direct PCI connector replacement
and utilizes an edge card connector, the PCI Express Native Hot-Plug model is based on the
standard usage model defined in the PCI Standard Hot-Plug Controller and Subsystem Specification,
10 Revision 1.0.
The following section describes the add-in card presence detect and PCI Express Native Hot-Plug
signals. For a detailed explanation of the register requirements and standard usage model, see
Chapter 7 of the PCI Express Base Specification, Revision 1.1.
3.2. Presence Detect
15 The PCI Express Hot-Plug controller detects the presence of an add-in card using the PRSNT2#
signal as shown in Figure 3-1. It is the responsibility of the Root Complex or the switch to
determine the presence of the add-in card and set the present bits in the appropriate register as
described in Chapter 7 of the PCI Express Base Specification, Revision 1.1. In addition to the Hot-Plug
controller, the PRSNT2# signal is used by the system board to recognize the presence of the add-in
20 card in order to enable the auxiliary signals: CLK, PERST#, SMBus, and JTAG. The two signals,
PRSNT1# and PRSNT2#, described in Figure 3-1, are required on the PCI Express connector and
must be supported by all PCI Express add-in cards.
Both PRSNT1# and PRSNT2# signals are required in order to detect the presence of the add-in
card and to ensure that it is fully inserted in the connector. Note that the pads on the add-in card
25 for the PRSNT1# and PRSNT2# signals are shorter than the rest of the pads in order to have about
1 ms difference of insertion time. Unused PRSNT2# pads on x4, x8, and x16 add-in cards can be
either standard length or the pad can be eliminated. This scheme is used to allow the power
switches to isolate the power to the card during surprise removal. The mechanical details are
provided in Chapter 5.
It is required that all PCI Express add-in cards implement variable-length edge finger pads and tie
the PRSNT1# and PRSNT2# signals together on the add-in card. There is more than one
PRSNT2# pin defined in the x4, x8, and x16 PCI Express connectors; these are needed to support
up-plugging. All add-in cards shall connect the PRSNT1# signal to the farthest-apart PRSNT2#
5 signal with a single trace in between them as illustrated in Figure 3-1. For example, a x4 add-in card
would connect PRSNT1# with PRSNT2# on pin B31, and a x8 add-in card would connect
PRSNT1# with PRSNT2# on pin B48. Refer to Table 5-1 for connector pin numbering and
definition. If the system board designer chooses to implement hot-plug support, the system board
must connect PRSNT1# to GND and separately connect all the PRSNT2# pins together to a single
10 pull-up resistor, as shown in Figure 3-1. The system board designer determines the pull-up resistor
voltage and associated use of applicable hot-plug control logic. If the system board designer
chooses not to implement hot-plug support, PRSNT1# and PRSNT2# connector pins may either
be left un-connected or may be grounded on the system board.
Since the x8 add-in card may plug into a x8 connector with a x4 Link only, the system board shall
15 have the two PRSNT2# pins (B31 and B48) connected together. This is required in order to sense
the presence of the x8 add-in card in a x8 connector that supports a x4 Link only. See Section 6.3
for card interoperability discussions.
Methane
Цитата(XVR @ Mar 30 2010, 20:53) *
Это то, что рекомендовал disel, так что вопросы к нему smile.gif
Видимо нужен какой то из PCIe стандартов, только скажите какой (www.pcisig.com) Возможно PCIe Base подойдет
Немного написано в CEM спецификации:

Ну возьму я завтра тестер, и прозвоню PRSNT сигналы. Что дальше?
XVR
Цитата(Methane @ Mar 30 2010, 22:07) *
Ну возьму я завтра тестер, и прозвоню PRSNT сигналы. Что дальше?
Их не надо прозванивать, их надо имплементировать на своей плате (хоть с помощью реле). Если ядро ОС вообще в курсе, что hot-plug бывает, то их размыкание/замыкание заставит ядро (драйвер) заново инициализировать этот слот.
Немного криво, зато железно (в смысле в РЕАЛЬНОМ железе) rolleyes.gif
Methane
Цитата(XVR @ Mar 30 2010, 22:33) *
Их не надо прозванивать, их надо имплементировать на своей плате (хоть с помощью реле). Если ядро ОС вообще в курсе, что hot-plug бывает, то их размыкание/замыкание заставит ядро (драйвер) заново инициализировать этот слот.
Немного криво, зато железно (в смысле в РЕАЛЬНОМ железе) rolleyes.gif

Это надо только пробовать.
disel
Цитата(Methane @ Mar 30 2010, 19:16) *
Так это же не PCIe. С линком-то что делать?


У Петрова в "Шины PCI, PCI Express" написано что пользовательская модель PCI Express Hot Plug выведена из пользовательской модели "PCI Standard Hot-Plug Controller and Subsystem Specification 1.0". И они идентичны с точки зрения пользователя. Изменения коснулись некоторых регистров, которые описаны в стандарте PCIe.
Methane
Цитата(disel @ Mar 31 2010, 07:58) *
У Петрова в "Шины PCI, PCI Express"

А что за книга? "сферический PCIe в вакууме" или применительно к PC?

Цитата
написано что пользовательская модель PCI Express Hot Plug выведена из пользовательской модели "PCI Standard Hot-Plug Controller and Subsystem Specification 1.0". И они идентичны с точки зрения пользователя. Изменения коснулись некоторых регистров, которые описаны в стандарте PCIe.

В том-то и фишка, что я читал только про бит, прочитав который можно узнать поддерживает сплот хот-плаг или нет.
disel
Цитата(Methane @ Mar 31 2010, 08:39) *
А что за книга? "сферический PCIe в вакууме" или применительно к PC?

Скорее "сферический PCI в вакууме". Про PCIe немного.
SiTi
Если в диспетчере устройств отключить устройство, потом его сбросить/перепрошить, потом опять попытаться обнаружить, то устройство обнаруживается и работает.
Methane
Цитата(SiTi @ May 12 2010, 13:53) *
Если в диспетчере устройств отключить устройство, потом его сбросить/перепрошить, потом опять попытаться обнаружить, то устройство обнаруживается и работает.

А если загрузить систему, а потом прошить? Я сейчас пользуюсь рекомендациями альтеры - через jtag прошиваю, потом контрл-альт-дел. Тогда работает.
SiTi
Что-то я не понял... (Возможно вечер сказывается). Какую систему загрузить? И что даст ctrl+alt+del?
Можно пояснить по-подробнее?
Methane
Цитата(SiTi @ May 12 2010, 18:49) *
Что-то я не понял... (Возможно вечер сказывается). Какую систему загрузить? И что даст ctrl+alt+del?
Можно пояснить по-подробнее?

Если я сейчас делаю так. Гружу плисину через JATG, потом делаю ресет через ctrl+alt+del (рекомендация альтеры). Если не делать ctrl+alt+del а загрузить ПЛИСину к примеру во время тестирования памяти, она не видится в системе.
dsmv
Цитата(Methane @ May 12 2010, 20:35) *
Если я сейчас делаю так. Гружу плисину через JATG, потом делаю ресет через ctrl+alt+del (рекомендация альтеры). Если не делать ctrl+alt+del а загрузить ПЛИСину к примеру во время тестирования памяти, она не видится в системе.



Есть ещё вариант. Программа adp201x1_restart позволяет запомнить базовые адреса BAR0, BAR1. А потом их восстановить.
Один раз необходимо запустить программу в режиме определения базовых адресов:
adp201x1_restart 4953 5504 -r
Будет сформирован файл bar.txt в котором будут сохранены значения базовых адресов.
После перезагрузки ПЛИС через JTAG надо выполнить команду:
adp201x1_restart 4953 5504 -w
Программа запишет BAR0, BAR1, COMMAND

Перезагрузка компьютера не требуется.

4953 - это VendorID
5504 - это DeviceID

На компьютере c Chipset P45 работоспособность восстанавливается в полном объёме.
На компьютере с процессором I7 и Chipset P55 восстанавливается только обращения к регистрам. Канал DMA не работает.

Программа работает через драйвер UNINSYS.

Файлы:
Нажмите для просмотра прикрепленного файла - собственно программа

Нажмите для просмотра прикрепленного файла - исходные тексты

Нажмите для просмотра прикрепленного файла - драйвер UNINSYS - необходимо переименовать расширение в *.exe
Methane
Цитата(dsmv @ May 13 2010, 07:01) *
Есть ещё вариант.

А если не винда и вообще свой драйвер?
dsmv
Цитата(Methane @ May 13 2010, 08:43) *
А если не винда и вообще свой драйвер?


Тогда нужно научится запоминать и восстанавливать регистры BARx и COMMAND
Bad0512
Цитата(Methane @ Mar 30 2010, 13:25) *
Дело не только в хотплаге. Дело в том что хотелось бы
1. Грузить прошивку прямо из драйвера.
2. Не перезагружать комп при каждой смене прошивки.

Да, а поставить плату в компютер, (пустую, без прошивки) а потом запрограммировать ее через JTAG, получается? Я читал что у народа работает, но тоже только один раз. Если сменить прошивку, не работает.

1. Из драйвера грузить не получится. Ибо когда девайс у вас не загружен - BARов и прочей хрени просто _физически_ не существует.
2. Могу предложить старый "дедовский" способ отладки :
2.1. Disable device в Device manager
2.2. Reload FPGA using JTAG cable.
2.3. Enable device or Scan for Hardware changes in Device manager.
По времени занимает минуты 3-4 в зависимости от сноровки спортсмена wink.gif
Ну или вышеописанный способ (пишите утилиту, которая сохраняет изменяемые регистры (особенно BARы) куда-нибудь, потом перегружаете FPGA и потом той же мостыркой восстанавливаете прежние значения. Тут расчёт на то, что система "ничего не заметит". Этот трюк, как уже описано выше, не всегда и не везде прокатывает.


Цитата(Methane @ May 13 2010, 11:43) *
А если не винда и вообще свой драйвер?

На "невинде" последовательность действий должна быть примерна та же:
1. Убиваем девайс в системе, не знаю как это делается, возможно достаточно всего лишь драйвер выгрузить.
2. Делаем свои дела с девайсом, т.е. перегружаем FPGA.
3. Пинаем bus enumerator на поиск девайсов по новой. Возможно для этого его надо перегрузить, либо запустить какой-то скрипт.

Все эти действия (исходя из идеологии этой самой пресловутой "невинды") можно запихать в один скриптик, уменьшая количество ручной работы до минимума.
Methane
Цитата(Бэд @ May 13 2010, 11:28) *
На "невинде" последовательность действий должна быть примерна та же:
1. Убиваем девайс в системе, не знаю как это делается, возможно достаточно всего лишь драйвер выгрузить.
2. Делаем свои дела с девайсом, т.е. перегружаем FPGA.
3. Пинаем bus enumerator на поиск девайсов по новой. Возможно для этого его надо перегрузить, либо запустить какой-то скрипт.

Все эти действия (исходя из идеологии этой самой пресловутой "невинды") можно запихать в один скриптик, уменьшая количество ручной работы до минимума.

Тут главная проблема в том, что PC, по подаче питания, если не находит ничего в сплоте, то имеет полное право считать что там ничего нет. Только что проверил, если карточку не нашел BIOS (она потом появилась) то линух ее тоже уже не видит. А это значит трах с параллельным пассивным программированием.
gosu-art
Здравствуйте!
Methane
Можно узнать, чем у вас закончились эксперименты с ХотПлугом?

Сейчас стоит наподобие задача - нужна обязательно горячая реконфигурация(возможно с использованием Remote System Upgrade). И вот думаю, связываться с Альтеровской PCIe или поставить PEX(не PHY) какой нить. Есть некоторые вопросы:
1. Если я поставлю PEX, то я понимаю проблемы с горячей реконфигурацией исчезнут? и с ПЛИСиной можно будет творить что угодно rolleyes.gif когда компьютер загрузится (WinXP).
2. Интересует PCIe'ый JTAG! Можно ли его использовать в своих корыстных целях))? Ну, например, нацелить на него Programmer, SignalTap? (естественно JTAG ноги будут на плисину заведены и, соответственно, будет стоять PEX)
Bad0512
Цитата(gosu-art @ Sep 4 2011, 00:28) *
Здравствуйте!
Methane
Можно узнать, чем у вас закончились эксперименты с ХотПлугом?

Сейчас стоит наподобие задача - нужна обязательно горячая реконфигурация(возможно с использованием Remote System Upgrade). И вот думаю, связываться с Альтеровской PCIe или поставить PEX(не PHY) какой нить. Есть некоторые вопросы:
1. Если я поставлю PEX, то я понимаю проблемы с горячей реконфигурацией исчезнут? и с ПЛИСиной можно будет творить что угодно rolleyes.gif когда компьютер загрузится (WinXP).
2. Интересует PCIe'ый JTAG! Можно ли его использовать в своих корыстных целях))? Ну, например, нацелить на него Programmer, SignalTap? (естественно JTAG ноги будут на плисину заведены и, соответственно, будет стоять PEX)

Можно и не PEX. Поглядите на GN4121 / GN4124 от Gennum.
Для вариантов X1 и X4 очень неплохое решение.
dsmv
Цитата(gosu-art @ Sep 3 2011, 20:28) *
1. Если я поставлю PEX, то я понимаю проблемы с горячей реконфигурацией исчезнут? и с ПЛИСиной можно будет творить что угодно rolleyes.gif когда компьютер загрузится (WinXP).
2. Интересует PCIe'ый JTAG! Можно ли его использовать в своих корыстных целях))? Ну, например, нацелить на него Programmer, SignalTap? (естественно JTAG ноги будут на плисину заведены и, соответственно, будет стоять PEX)


При наличии PEX8311 проблемы с перезагрузкой ПЛИС исчезают.
А вот PCI'ый JTAG использовать вряд ли удасться. Я не встречал информации о его поддержке на системных платах. Как вариант можно сделать аналог Byte Blaster, но вот удасться ли его запустить на порте с нестандартным адресом ?
gosu-art
Спасибо!
Я так и думал, что с JTAG'ом облом получится.
Как вариант можно поставить в качестве моста еще одну ПЛИС-Altera CycloneIVgx. Вот думаю... стоит ли заморачиваться!?
gosu-art
Вот такой вопросик возник...
Потянут ли трансиверы С4 external pcie без использования редрайверов ? длина кабеля 1м.
MishaN
Не совсем по теме, но может есть у кого опыт...
Подскажи, а Express Card у Ноутбуков это ведь и есть PCIe? Где можно взять адаптер чтобы вывести наружу стандартный PCIe и воткнуть туда свою плату с FPGA
(ну нету уменя настолького компа и покупать нехочу)
Kuzmi4
2 MishaN
Не только. Вот в этом документе всё расписано. Особенно обратите внимание на Table 3-1: ExpressCard Interface - List of Signals wink.gif
Главное вам там с драйвером разобраться
dmitry-tomsk
Порекомендуйте, пожалуйста, switch для превращения artix-7 pciex4 в pciex1 3.0. Нужно 8 плат в компьютер воткнуть с макс. пропускной способностью.
bambr
Цитата(dmitry-tomsk @ Jul 14 2018, 12:26) *
Порекомендуйте, пожалуйста, switch для превращения artix-7 pciex4 в pciex1 3.0. Нужно 8 плат в компьютер воткнуть с макс. пропускной способностью.


Невнятный вопрос. Превращаем Artix-7 в свитч? Тогда не проще ли микросхемы свитчей использовать?

krux
мне PCIe свичи от IDT очень понравились.
dmitry-tomsk
Цитата(krux @ Jul 16 2018, 21:37) *
мне PCIe свичи от IDT очень понравились.

Спасибо, не нашёл только у них pcie 3.0
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.