Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ядро PCI Express Block Plus в Virtex 5
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Страницы: 1, 2, 3
Kuzmi4
И снова здравствуйте laughing.gif

Имею неприятную специфику работы этого самого PCI Express Block Plus:
Дата-трансферы без прерываний бегают нормально rolleyes.gif
Отсылка прерывания по контрольным точкам (то есть редко) тоже работала нормально с трансферами.
А вот если сделать эти дата-трансферы пачками, упорядочить (запись перед трансфером управляющей информации трансфера-запись/чтение,адрес,длинна), прерывания после обработки трансферов(то есть довольно часто) - тогда возникает этот самый неприятный момент - прога на PC виснет. Проверялось как на Р55 платформе так и (да простят меня Одмины ) на ML370. И была замечена интересная специфика - на серверной платформе зависания начинались после гораздо меньшего числа трансферов чем на Р55 (грубо говоря если на Р55 работало полдня без вопросов, то на серверной после ~100-300 трансферов висли) 07.gif
В результате исследования со стороны корки выяснилось что пред-момент зависона выглядит так: получаю трансфер обрабатываю, отсылаю прерывание,получаю подтверждение от корки, что запрос прерывания от меня воспринят и дальше - тишина, входящих запросов от PC нет.. На стороне PC удалось увидеть пару раз (логи ядра в линухе), что виснем как раз на ожидании прерывания... PCIE анализера нет, чтоб посмотреть ушёл ли пакет в мать или нет, но реально видно что корка работает и рапортует в нормальном режиме и это беспокоит.

Никто не сталкивался с таким чЮдесным функционированием ?? 1111493779.gif
Как вариант - может я там галочки какие пропустил ? smile3046.gif
Скриншоты конфигурирования и автомат отсылки прерывания прилагаю (на PC разрешено 1 прерывание, отсылаю 1 прерывание). Потому что нахожусь в каком то тупике - неясно где поломалось...
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
jojo
Всё слежу за новостями борьбы с PCI Express, так всё меньше хочется делать свою обёртку.

Вы не пробовали ядро PLDA для Virtex-5? Там и тестбенч есть, и обёртка вокруг ядра Endpoint Block Plus.
Ядро можно получить после короткой переписки по e-mail. Затем уговорить ядро работать стандартным образом.
serebr
Цитата(jojo @ Jan 11 2010, 17:12) *
Всё слежу за новостями борьбы с PCI Express, так всё меньше хочется делать свою обёртку.

Вы не пробовали ядро PLDA для Virtex-5? Там и тестбенч есть, и обёртка вокруг ядра Endpoint Block Plus.
Ядро можно получить после короткой переписки по e-mail. Затем уговорить ядро работать стандартным образом.

Вот бы уговорить работать ядро PCIe от PLDA для Lattice! Само ядро имеется, а с таблеткой для него - труба.
jojo
Предполагаю, что ядро PLDA по способу лечения не отличается от IP-ядер Lattice.
Kuzmi4
Цитата(jojo @ Jan 11 2010, 13:12) *
Всё слежу за новостями борьбы с PCI Express, так всё меньше хочется делать свою обёртку.

Вы не пробовали ядро PLDA для Virtex-5? Там и тестбенч есть, и обёртка вокруг ядра Endpoint Block Plus.
Ядро можно получить после короткой переписки по e-mail. Затем уговорить ядро работать стандартным образом.

С того, что я знаю - ядру от PLDA требуется внешняя физика. Потому не подходит если юзать с трансиверами в виртексе. Или я где то ошибся ?
jojo
В Virtex-5 встроенные трансиверы, кроме краевого разъёма PCI Express и самой ПЛИС ничего не нужно.

Ядро PLDA (точнее одно из ядер) является обёрткой вокруг Endpoint block plus. Endpoint block IP параметризуем в Xilinx Coregen, ядро PLDA параметризуем в визарде PLDA. Затем всё сводим под крышей одного проекта в ISE.
demon_rt
У меня такая проблема: устройство на базе Endpoint Block Plus
v1.9 не на всех PC работает в режиме х8. Перепробовал кучу машин с различными мостами. В некоторых материнках, устройство сразу работает на х8, в других при первом включении на х1, а после перезагрузки(помогает кнопка ресет), переходит на х8, в третьих только на х1, и никакая перезагрузка не помогает, не смотря на то, что на материнке написано х8 и в биосе тоже все нормально. Неужели Endpoint Block Plus такой привередливый к типу чипсетов?????
FLTI
Цитата(demon_rt @ Aug 22 2010, 23:15) *
У меня такая проблема: устройство на базе Endpoint Block Plus
v1.9 не на всех PC работает в режиме х8. Перепробовал кучу машин с различными мостами. В некоторых материнках, устройство сразу работает на х8, в других при первом включении на х1, а после перезагрузки(помогает кнопка ресет), переходит на х8, в третьих только на х1, и никакая перезагрузка не помогает, не смотря на то, что на материнке написано х8 и в биосе тоже все нормально. Неужели Endpoint Block Plus такой привередливый к типу чипсетов?????

Тема привередливости к чипсетам меня тоже интересует.
demon_rt,что Вам удалось за год на эту тему выяснить?
dsmv
Цитата(FLTI @ Aug 4 2011, 19:57) *
Тема привередливости к чипсетам меня тоже интересует.
demon_rt,что Вам удалось за год на эту тему выяснить?


PCI Express платы на основе Xilinx Virtex 5 выпускаем давно. С такими проблемами не сталкивался.
Проверьте:
1. Скорость загрузки ПЛИС - нужна параллельная загрузка.
2. Выводы PCI Express подключены через конденсаторы. Проверьте их, может там попались разные конденсаторы.
FLTI
Цитата(dsmv @ Aug 8 2011, 14:37) *
PCI Express платы на основе Xilinx Virtex 5 выпускаем давно.

Какие реальные скорости получаете для передач "Память ПК->Буферная память на PCIe х 1 плате" ( System Memory Read ) в зависимости от чипсета матери?

dsmv
Цитата(FLTI @ Aug 8 2011, 13:49) *
Какие реальные скорости получаете для передач "Память ПК->Буферная память на PCIe х 1 плате" ( System Memory Read ) в зависимости от чипсета матери?


Для реализации x1 у нас используется PEX8311. Насколько я помню, на вывод удалось достичь 150 МБайт/с.

Для x8 и чипсет P55 - 1050 МБайт/с. Если найду переходник, то измерю скорость Virtex 5 в режиме x1
FLTI
Цитата(dsmv @ Aug 8 2011, 17:13) *
Для реализации x1 у нас используется PEX8311. Насколько я помню, на вывод удалось достичь 150 МБайт/с.

Этот показатель как-то зависил от матери?
Цитата(dsmv @ Aug 8 2011, 17:13) *
Для x8 и чипсет P55 - 1050 МБайт/с. Если найду переходник, то измерю скорость Virtex 5 в режиме x1

Заранее благодарю.

dsmv
Вот результаты измерения.
Компьютер - Intel I7 2.8 ГГц, системная плата GIGABYTE GA-P55-UD6

Модуль AMBPEX5 установлен через переходник x1

Ввод данных (из устройства в компьютер):
1. системная память (непрерывная) 128 МБайт - 219 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 218 Мбайт/с

Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 201 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 201 Мбайт/с

Модуль AMBPEX5 в режиме x8

Ввод данных (из устройства в компьютер):
1. системная память (непрерывная) 128 МБайт - 639 Мбайт/с
2. пользовательская память (разрывная) 1024 Мбайт - 1534 Мбайт/с

Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 1080 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 1080 Мбайт/с

Модуль AMBPEX1 - используется контроллер PEX8311

Ввод данных (из устройства в компьютер):
1. системная память (непрерывная) 128 МБайт - 177 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 160 Мбайт/с

Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 185 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 120 Мбайт/с


Для режима x1 скорости от компьютера практически не зависят. Хотя я это давно не проверял.
Для режима x8 - от компьютера сильно зависят. На большинстве компьютеров нашей фирмы, скорость ввода в режиме x8 - 1300 - 1400 Мбайт/с. У меня - около 1500.

Это, кстати, не предел. В новом контроллере частота внутренней шины увеличена до 266 МГц. По предварительным измерениям скорость увеличена до 1600 Мбайт/с.


FLTI
Цитата(dsmv @ Aug 8 2011, 19:42) *
Вот результаты измерения.
Компьютер - Intel I7 2.8 ГГц, системная плата GIGABYTE GA-P55-UD6

Модуль AMBPEX5 установлен через переходник x1

Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 201 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 201 Мбайт/с

Модуль AMBPEX1 - используется контроллер PEX8311

Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 185 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 120 Мбайт/с

Для режима x1 скорости от компьютера практически не зависят. Хотя я это давно не проверял.

Огромное Вам спасибо.
Скажите, при выводе данных из компьютера в устройство в чём разница между понятиями "системная память (непрерывная)" и "пользовательская память (разрывная)"?
И почему на AMBPEX5 через переходник x1 скорости вывода в обоих этих случаях равны, а на PEX8311 сильно отличаются?
dsmv
Цитата(FLTI @ Aug 8 2011, 18:58) *
Огромное Вам спасибо.
Скажите, при выводе данных из компьютера в устройство в чём разница между понятиями "системная память (непрерывная)" и "пользовательская память (разрывная)"?
И почему на AMBPEX5 через переходник x1 скорости вывода в обоих этих случаях равны, а на PEX8311 сильно отличаются?


Системная память выделяется в ядре Windows и является непрерывной по физическим адресам.
Пользовательская память выделяется на 3 кольце и является фрагментированной. На физическом уровне состоит из страниц по 4 кбайта.

В моём контроллере дескрипторы объедены в блок дескрипторов.

Посмотрите мои доклады: http://ds-dev.ru/projects/ds-dma/wiki/%D0%...%86%D0%B8%D0%B8

Там же есть исходный код нового контроллера.

FLTI
Цитата(dsmv @ Aug 8 2011, 19:42) *
Вот результаты измерения.
Компьютер - Intel I7 2.8 ГГц, системная плата GIGABYTE GA-P55-UD6

Модуль AMBPEX5 установлен через переходник x1
Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 201 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 201 Мбайт/с

В моём контроллере дескрипторы объедены в блок дескрипторов.
Посмотрите мои доклады: http://ds-dev.ru/projects/ds-dma/wiki/%D0%...%86%D0%B8%D0%B8
Там же есть исходный код нового контроллера.

А если Ваш код контроллера, который в Virtex 5 давал 201 Мбайт/с разместить в Спартан-6 используя его аппаратное ядро PCIe x 1, то можно ли ожидать получение таких же скоростей 200 Мбайт/с ?
Или в Virtex 5 есть нечто, чего нет в Спартан-6 из-за чего такие скорости на Спартане-6 не получить?
dsmv
Цитата(FLTI @ Aug 8 2011, 20:45) *
А если Ваш код контроллера, который в Virtex 5 давал 201 Мбайт/с разместить в Спартан-6 используя его аппаратное ядро PCIe x 1, то можно ли ожидать получение таких же скоростей 200 Мбайт/с ?
Или в Virtex 5 есть нечто, чего нет в Спартан-6 из-за чего такие скорости на Спартане-6 не получить?


Я собираюсь сделать реализацию контрроллера для Virtex 6 и Spartan 6. Но в будущем. Я думаю, что для Spartan 6 скорость 200 Мбайт/с получится. Если хотите, подключайтесь к проекту. Сделаем реализацию для Spartan 6.
FLTI
dsmv, а пробовали ли Вы Ваше ядро на PCIe GEN2?
Удалось ли получить увеличенные скорости по сравнению с GEN1?
Кстати, есть ли сейчас матери со слотами PCIe x1 GEN2?
Будет ли встроенное Spartan 6 ядро PCIe x1 работать на PCIe x1 GEN2 с увеличенной скоростью?
dsmv
Цитата(FLTI @ Aug 9 2011, 07:29) *
dsmv, а пробовали ли Вы Ваше ядро на PCIe GEN2?
Удалось ли получить увеличенные скорости по сравнению с GEN1?
Кстати, есть ли сейчас матери со слотами PCIe x1 GEN2?
Будет ли встроенное Spartan 6 ядро PCIe x1 работать на PCIe x1 GEN2 с увеличенной скоростью?


В моём компьютере PCI Express 2.0; Но Virtex 5 (и Spartan6) поддерживают только PCIE v1.1; Так что увеличения скорости при установке в слот PCIE v2.0 нет.
Virtex 6 поддерживает PCIE v2.0 и я собираюсь сделать такую реализацию.
FLTI
Цитата(dsmv @ Aug 9 2011, 08:53) *
В моём компьютере PCI Express 2.0

И даже PCIe x 1 слоты PCI Express 2.0? Если так, то назовите пожалуйста эту мать.
Цитата(dsmv @ Aug 9 2011, 08:53) *
Virtex 6 поддерживает PCIE v2.0 и я собираюсь сделать такую реализацию.

Наверное на Artix-7 подешевле будет.

dsmv
Цитата(FLTI @ Aug 9 2011, 08:09) *
И даже PCIe x 1 слоты PCI Express 2.0? Если так, то назовите пожалуйста эту мать.

Наверное на Artix-7 подешевле будет.


Я уже называл: GA-P55-UD6 http://www.gigabyte.ru/products/mb/specs/ga-p55-ud6_10.html

PCIe x1 - это PCI Express v1.1; Но он расположен крайне неудобно и я его практически не использую.

Использую два слота:
PCIE_x8_1 - PCI Express v2.0 x8
PCIE_x4_1 - PCI Express v1.1 x4

Для реализации x1 они ведут себя одинаково.
Кстати, есть большая разница для реализации PCI Express x4;
Модуль AMBPEX8 установленный в PCIE_x8_1 показывает скорость приёма 510 Мбайт/с, а при установке в PCIE_x4_1 - 710 Мбайт/с.
А вот для выдачи данных - наоборот, скорость в PCIE_x8_1 больше чем в PCIE_x4_1; ( 560 и 410 Мбайт/с )
FLTI
Цитата(dsmv @ Aug 9 2011, 10:17) *
Я уже называл: GA-P55-UD6 http://www.gigabyte.ru/products/mb/specs/ga-p55-ud6_10.html
А вот для выдачи данных - наоборот, скорость в PCIE_x8_1 больше чем в PCIE_x4_1; ( 560 и 410 Мбайт/с )

Не возникают ли провалы в скорости если начинают работать другие устройства, использующие DMA Bus Master, например если выводимые в плату данные будут поступать из гигабитной сети или с HDD?

Не пробовали ли чипсет x58, возможно там результаты будут повыше?
Как-то расстраивает 410 Мбайт/с на вывод на PCIE_x4_1...
dsmv
Цитата(FLTI @ Aug 9 2011, 10:42) *
Не возникают ли провалы в скорости если начинают работать другие устройства, использующие DMA Bus Master, например если выводимые в плату данные будут поступать из гигабитной сети или с HDD?

Не пробовали ли чипсет x58, возможно там результаты будут повыше?
Как-то расстраивает 410 Мбайт/с на вывод на PCIE_x4_1...


Серьёзных исследований не проводили. На первый взгляд - скорость не падает. Пропускная способность памяти и chipseta на порядок выше, что PCI Express x8.

Ну так можно установить в слот x8 и получить 500 Мбайт/с. А если сделать реализацию x8 - то все 1080 Мбайт/с.
FLTI
Цитата(dsmv @ Aug 9 2011, 13:39) *
Кстати, есть большая разница для реализации PCI Express x4;

А вот для выдачи данных - наоборот, скорость в PCIE_x8_1 больше чем в PCIE_x4_1; ( 560 и 410 Мбайт/с )

Ну так можно установить в слот x8 и получить 500 Мбайт/с. А если сделать реализацию x8 - то все 1080 Мбайт/с.

Поясните пожалуйста, правильно ли я Вас понял, что реализация PCI Express x4 (т.е Virtex 5 работающий как бы в режиме PCI Express x4 ) в слоте PCIE_x4_1 на вывод даст скорость 4100 Мбайт/с, а в слоте PCIE_x8_1 на вывод даст скорость 560 Мбайт/с?
dsmv
Цитата(FLTI @ Aug 9 2011, 12:48) *
Поясните пожалуйста, правильно ли я Вас понял, что реализация PCI Express x4 (т.е Virtex 5 работающий как бы в режиме PCI Express x4 ) в слоте PCIE_x4_1 на вывод даст скорость 4100 Мбайт/с, а в слоте PCIE_x8_1 на вывод даст скорость 560 Мбайт/с?


Нет. Неправильно.
Есть модуль AMBPEX8. Там реализован PCI Express x4 на ПЛИС Virtex 4 FX20. В слоте PCIE x4 скорость выдачи около 400 Мбайт/с. В слоте PCIE x8 скорость выдачи 560 Мбайт/с.
Я думаю, что реализация на Spartan 6 PCI Express x4 даст похожие цифры.
FLTI
Цитата(dsmv @ Aug 9 2011, 13:39) *
Серьёзных исследований не проводили. На первый взгляд - скорость не падает.

Стоило бы проверить.
Где-то на этом форуме видел тему, что кто-то жаловался на падение скорости подобного рода контроллера, как потом выяснилось, из-за большой активности других устройств на PCIe .
demon_rt
Цитата(dsmv @ Aug 8 2011, 19:42) *
Модуль AMBPEX5 в режиме x8


Вывод данных ( из компьютера в устройство )
1. системная память (непрерывная) 128 МБайт - 1080 Мбайт/с
2. пользовательская память (разрывная) 128 Мбайт - 1080 Мбайт/с


Подскажите пожалуйста в каком режиме осуществляется вывод данных из компьютера в устройство. Я наблюдаю такую картину: В режиме вывода данных из устройства на компьютер все отлично MPS = 128Байт, скорость 1200 Мбайт/с. При записи из компьютера в устройство 128Байт данных, на шине RX PCI Express Block Plus приходят 16 TLP длинной 1DW со сдвигом данных.

dsmv
Цитата(demon_rt @ Aug 28 2011, 19:27) *
При записи из компьютера в устройство 128Байт данных, на шине RX PCI Express Block Plus приходят 16 TLP длинной 1DW со сдвигом данных.


Это какая-то странная ситуация. Пришлите отправляемый запрос, надо на него посмотреть.
demon_rt
Такой вопрос, кто нить сталкивался с изохронным режимом (приложение А спецификации) работы PCI Express.
Jack_of_Shadows
Читая форум, прихожу к мысли что с проблемами на этапе установки соединения столкнулся один я.
Есть две платы PCI/104 express. Одна из них как раз с virtex-5 и example design из PCI Express Block Plus корки. Возможности потестить ее с разными хостами нет. PCIe устройство не детектируется, после долгих тыканий набрел на гид по отладке сего ядра на сайте xilinx, благодаря которому смог установить следующую заковырку:

На этапе установке связи хост шлёт плате TS1-пакет с link number, который хочет ей присвоить (точнее начинает слать непрерывно такие пакеты). Через некоторое время плата начинает отсылать такие же пакеты обратно, подтверждая что приняла номер. После этого хост добавляет в отсылаемые пакеты желаемый lane number. И тут (если быть точным за пару пакетов до прихода lane number) плата выставляет флаг rx_elec_idle (насколько я понимаю сообщая о том, что приемная линия перешла в режим простоя) и в наглую не шлет ответный пакет хосту. Через некоторое время процесс инициализации сбрасывается, в сумме он повторяется несколько раз, потом хост естественно оставляет попытки.

Предполагая количество людей, которые уже использовали тот же самый пример и ядро, смутно понимаю что дело не в нем. Грешить на root complex тоже очень не хочется, начальство имеет планы на использование конкретно его в будущих разработках. Буду рад любым подсказкам и наводкам
dmitry-tomsk
Цитата(Jack_of_Shadows @ Dec 15 2011, 15:54) *
Читая форум, прихожу к мысли что с проблемами на этапе установки соединения столкнулся один я.
Есть две платы PCI/104 express. Одна из них как раз с virtex-5 и example design из PCI Express Block Plus корки. Возможности потестить ее с разными хостами нет. PCIe устройство не детектируется, после долгих тыканий набрел на гид по отладке сего ядра на сайте xilinx, благодаря которому смог установить следующую заковырку:

На этапе установке связи хост шлёт плате TS1-пакет с link number, который хочет ей присвоить (точнее начинает слать непрерывно такие пакеты). Через некоторое время плата начинает отсылать такие же пакеты обратно, подтверждая что приняла номер. После этого хост добавляет в отсылаемые пакеты желаемый lane number. И тут (если быть точным за пару пакетов до прихода lane number) плата выставляет флаг rx_elec_idle (насколько я понимаю сообщая о том, что приемная линия перешла в режим простоя) и в наглую не шлет ответный пакет хосту. Через некоторое время процесс инициализации сбрасывается, в сумме он повторяется несколько раз, потом хост естественно оставляет попытки.

Предполагая количество людей, которые уже использовали тот же самый пример и ядро, смутно понимаю что дело не в нем. Грешить на root complex тоже очень не хочется, начальство имеет планы на использование конкретно его в будущих разработках. Буду рад любым подсказкам и наводкам


А какая плата? Там есть switch? Или конфигурация stack up/down фиксирована? Как сброс сделан?
Могу дать свою прошивку и тестовую прогу под windows в обмен на ucf файл.
Мы сейчас свою плату PCI104 express делаем, вот не хотелось бы тоже наколоться.
Jack_of_Shadows
Процессорная плата - MSM945 от Digital-Logic (ныне Kontron).
Плата с плисом - SMT101 от Sundance (они кстати предоставляют тестовую прошивку под PCIe, но она так же не работает как и пример от корки, что лишний раз намекает что проблемы либо в связи, либо в root complex). (как я заметил вы ищете примеры разводки, но, к несчастью, от Sundance мне удалось получить только схему)

Процессорная плата рассчитана только на нахождение на верхушке мезонина, поэтому CPU_DIR фиксированно заведен на единицу. Сброс с разъема PCIe заведен на дополнительную плисину Spartan-3, которая конфигурирует Virtex. Выведя сигналы сброса на светодиоды, я всегда вижу как вначале почему-то мигает trn_reset, затем вместе пару раз trn_reset и sys_reset. Все это в течении пары секунд, пока пытается установиться соединение.

От прошивки бы и проги не отказался sm.gif Хотя в данный момент они вряд ли помогут с проблемами на нижнем уровне. Кстати, если вы имеете отношение к Томскому "Интенсис" и их SGDMA, то я качал демонстрационную версию модуля, однако у нас плисы разные (у меня XC5VFX30T), и я так и не смог адаптировать ucf под свою плату (сыпались какие-то ошибки с GTP/GTX трансиверами).
dmitry-tomsk
Цитата(Jack_of_Shadows @ Dec 16 2011, 11:54) *
Процессорная плата - MSM945 от Digital-Logic (ныне Kontron).
Плата с плисом - SMT101 от Sundance (они кстати предоставляют тестовую прошивку под PCIe, но она так же не работает как и пример от корки, что лишний раз намекает что проблемы либо в связи, либо в root complex). (как я заметил вы ищете примеры разводки, но, к несчастью, от Sundance мне удалось получить только схему)

Процессорная плата рассчитана только на нахождение на верхушке мезонина, поэтому CPU_DIR фиксированно заведен на единицу. Сброс с разъема PCIe заведен на дополнительную плисину Spartan-3, которая конфигурирует Virtex. Выведя сигналы сброса на светодиоды, я всегда вижу как вначале почему-то мигает trn_reset, затем вместе пару раз trn_reset и sys_reset. Все это в течении пары секунд, пока пытается установиться соединение.

От прошивки бы и проги не отказался sm.gif Хотя в данный момент они вряд ли помогут с проблемами на нижнем уровне. Кстати, если вы имеете отношение к Томскому "Интенсис" и их SGDMA, то я качал демонстрационную версию модуля, однако у нас плисы разные (у меня XC5VFX30T), и я так и не смог адаптировать ucf под свою плату (сыпались какие-то ошибки с GTP/GTX трансиверами).


Спасибо!
Мне кажется дело со сбросом. На отладочных китах сброс не используется, вместо него кнопка для ручного сброса. Попробуйте его вообще отключить в прошивке. Адаптировать sgdma помогу, самому интересно, шлите ucf файл.
Jack_of_Shadows
собственно вот:


Код
###############################################################################
# Define Device, Package And Speed Grade
###############################################################################

CONFIG PART = xc5vfx30t-ff665-1;

###############################################################################
# User Time Names / User Time Groups / Time Specs
###############################################################################

# CONFIG STEPPING = "ES";

###############################################################################
# User Physical Constraints
###############################################################################


###############################################################################
# Pinout and Related I/O Constraints
###############################################################################

#
# SYS reset (input) signal.  The sys_reset_n signal should be
# obtained from the PCI Express interface if possible.  For
# slot based form factors, a system reset signal is usually
# present on the connector.  For cable based form factors, a
# system reset signal may not be available.  In this case, the
# system reset signal must be generated locally by some form of
# supervisory circuit.  You may change the IOSTANDARD and LOC
# to suit your requirements and VCCO voltage banking rules.
#

NET "sys_reset_n"      LOC = "H9"  | IOSTANDARD = LVCMOS33 | PULLUP | NODELAY;

#
# SYS clock 250 MHz (input) signal. The sys_clk_p and sys_clk_n
# signals are the PCI Express reference clock. Virtex-5 GTX
# Transceiver architecture requires the use of a dedicated clock
# resources (FPGA input pins) associated with each GTX Transceiver Tile.
# To use these pins an IBUFDS primitive (refclk_ibuf) is
# instantiated in user's design.
# Please refer to the Virtex-5 GTX Transceiver User Guide
# (UG198) for guidelines regarding clock resource selection.
#

NET  "sys_clk_p"       LOC = "T4";
NET  "sys_clk_n"       LOC = "T3";
INST "refclk_ibuf"     DIFF_TERM = "TRUE";

#
# Transceiver instance placement.  This constraint selects the
# transceivers to be used, which also dictates the pinout for the
# transmit and receive differential pairs.  Please refer to the
# Virtex-5 GTX Transceiver User Guide (UG198) for more
# information.
#
# PCIe Lanes 0
INST "ep/pcie_ep0/pcie_blk/SIO/.pcie_gt_wrapper_i/GTD[0].GT_i" LOC = GTX_DUAL_X0Y1;

#
# PCI Express Block placement. This constraint selects the PCI Express
# Block to be used.
#

INST "ep/pcie_ep0/pcie_blk/pcie_ep"                       LOC = PCIE_X0Y0;

###############################################################################
# Physical Constraints
###############################################################################

#
# BlockRAM placement
#

INST "ep/pcie_ep0/pcie_blk/pcie_mim_wrapper_i/bram_retry/generate_sdp.ram_sdp_inst"      LOC = RAMB36_X4Y4;
INST "ep/pcie_ep0/pcie_blk/pcie_mim_wrapper_i/bram_tl_tx/generate_tdp2[1].ram_tdp2_inst" LOC = RAMB36_X4Y3;
INST "ep/pcie_ep0/pcie_blk/pcie_mim_wrapper_i/bram_tl_rx/generate_tdp2[1].ram_tdp2_inst" LOC = RAMB36_X4Y2;
INST "ep/pcie_ep0/pcie_blk/pcie_mim_wrapper_i/bram_tl_tx/generate_tdp2[0].ram_tdp2_inst" LOC = RAMB36_X4Y1;
INST "ep/pcie_ep0/pcie_blk/pcie_mim_wrapper_i/bram_tl_rx/generate_tdp2[0].ram_tdp2_inst" LOC = RAMB36_X4Y0;


###############################################################################
# Timing Constraints
###############################################################################

#
# Ignore timing on asynchronous signals.
#

NET "sys_reset_n" TIG;

#
# Timing requirements and related constraints.
#

NET "sys_clk_c"                                      PERIOD = 10ns;

NET "ep/pcie_ep0/pcie_blk/SIO/.pcie_gt_wrapper_i/gt_refclk_out" TNM_NET = "MGTCLK";

TIMESPEC "TS_MGTCLK"  = PERIOD "MGTCLK" 100.00 MHz HIGH 50 %;

# LEDs

NET "led1"  LOC = "E10"  | IOSTANDARD = LVTTL;
NET "led2"  LOC = "F10"  | IOSTANDARD = LVTTL;
NET "led3"  LOC = "F20"  | IOSTANDARD = LVTTL;
NET "led4"  LOC = "G21"  | IOSTANDARD = LVTTL;

###############################################################################
# End
###############################################################################

dmitry-tomsk
OK, в понедельник займусь
Jack_of_Shadows
sys_reset повесил на вечную 1, При загрузке наблюдаю как trn_reset все также мигает 3 раза. И картинка не меняется не на йоту.

На форуме тех поддержки xilinx предлагали поиграться настройками трансиверов (размахом выходного сигнала и эмфазой) - тоже не изменило ничего.
dmitry-tomsk
Цитата(Jack_of_Shadows @ Dec 16 2011, 16:25) *
sys_reset повесил на вечную 1, При загрузке наблюдаю как trn_reset все также мигает 3 раза. И картинка не меняется не на йоту.

На форуме тех поддержки xilinx предлагали поиграться настройками трансиверов (размахом выходного сигнала и эмфазой) - тоже не изменило ничего.

Как грузится плис - со флэши? В PC104 нет сигнала присутствия в слоте, может загрузка прошивки запаздывает?
dmitry-tomsk
Цитата(dmitry-tomsk @ Dec 16 2011, 21:47) *
Как грузится плис - со флэши? В PC104 нет сигнала присутствия в слоте, может загрузка прошивки запаздывает?

Странный ucf, в коментариях тактовая 250 МГц, а в таймингах 100 МГц. Прикрепил прошивку для 100 МГц
Jack_of_Shadows
ucf сгенерирован core-генератором, в настройках там точно 100 МГц стояло, и на плате точно 100 МГц идет. Сам не понял что у них с комментариями.
С вашей прошивкой ничего не изменилось - смотрю pci-устройства через pcitree в win хр.
Грузится с флеши, производители платы уверяют что загрузка занимает порядка 70 мс. И на этот случай всегда рекомендуют горячий старт, который тоже не помогает. К тому же я в начале говорил, процесс инициализации начинает идти, проходят успешно стадии detect и polling, а на configuration случается затык, в один прекрасный момент (всегда один и тот же, что значит дело не в случайных помехах) RX линия сбрасывается в режим простоя (или как там правильно перевести IDLE). И кроме того в некоторых местах во время инициализации видно по сигналу rx_status что возникают ошибки 8b/10b decode error - некое нарушение целостности сигнала. Однако опять же они возникают строго в одинаковых местах, что не похоже просто на плохой прием - ведь в других местах я, к примеру, всегда вижу как root complex отправляет link number, а плис через некоторое время отсылает его назад в качестве подтверждения (вот здесь я приводил осциллограммы проблемного момента, )
Jack_of_Shadows
Так, сорри, но я ввел вас в заблуждение.
Мне таки позволили расковырять рабочий PC, и я вставил плату с плисом туда (производитель для этого специальную переходную плату дает). Загрузилось сразу же - дефолтная прошивка с установленными в системе драйверами даже объявила о себе в диспетчере устройств, прошивка сгенерированная core generator вроде как тоже (по крайней мере она теперь висит в состоянии L0, как обнаружить ее в системе пока не допер. Все найденные для сканирования pci-шины проги (pcitree, pcidirect) под win7 не запустились).

Получается дело в рут комплексе - MSM945. Но это уже не совсем к этому топику относится
dmitry-tomsk
Цитата(Jack_of_Shadows @ Dec 19 2011, 16:11) *
Так, сорри, но я ввел вас в заблуждение.
Мне таки позволили расковырять рабочий PC, и я вставил плату с плисом туда (производитель для этого специальную переходную плату дает). Загрузилось сразу же - дефолтная прошивка с установленными в системе драйверами даже объявила о себе в диспетчере устройств, прошивка сгенерированная core generator вроде как тоже (по крайней мере она теперь висит в состоянии L0, как обнаружить ее в системе пока не допер. Все найденные для сканирования pci-шины проги (pcitree, pcidirect) под win7 не запустились).

Получается дело в рут комплексе - MSM945. Но это уже не совсем к этому топику относится

Попробуйте bios покопать, power save и прочее.
Корегенераторная прошивка ставится как memory controller.
Попробуйте мою прошивку, надо только jungo поставить сначала.
Jack_of_Shadows
Появились еще вопросы к знатокам PCI Express Block Plus:

Если я создаю прошивку скажем PCIe x2, однако на плате физически только одна из этих линий соединена с процессором, возможно ли чтобы прошивка с процессором правильно договорились о ширине шины и сами переключились на х1 ? Подсознательно понимаю что такое должно быть возможно, однако на практике работы не вижу.

В виртексе каждый GTX трансивер имеет тактовый вход. Но если вдруг мне понадобилось использовать определенный трансивер, но тактовый сигнал брать с другого (из-за ошибочной разводки платы), ISE выдает ошибку что-то вроде
"When using a GTP/GTX with a REFCLK coming from anIBUFDS element near another GTP/GTX, each GTP in between the source and destination must be instantiated in the correct manner (See AR 33473). If you don't instantiate these other GTP tiles the software tools will route the REFCLK correctly, but the design may not work in hardware."
В указанном AR мало чего понял. Если кто сталкивался, подскажите от чего оттолкнуться
Andrew Su
[quote name='Jack_of_Shadows' date='Dec 20 2011, 14:20' post='1007945']
Появились еще вопросы к знатокам PCI Express Block Plus:

Если я создаю прошивку скажем PCIe x2, однако на плате физически только одна из этих линий соединена с процессором, возможно ли чтобы прошивка с процессором правильно договорились о ширине шины и сами переключились на х1 ? Подсознательно понимаю что такое должно быть возможно, однако на практике работы не вижу.

Добрый день.
Реально сталкивался с ситуацией, когда устройство на базе PCI Express Block Plus х4 в некоторых материнках в слотах х16 работает как х4, а в некоторых, как х1.
Проверить как опознал ХОСТ устройство можно с помощью программки pci32.exe. Архив в прикрепленном файле.
Запуск программы из командной строки pci32.exe > pcicfg.txt запишет информацию обо всех найденных pci и pcie устройствах в файл pcicfg.txt.
Удачи.
Jack_of_Shadows
Andrew Su, спасибо за програмку, но дело у меня в другом. На данном этапе наконец полностью понял суть проблемы: единственный корректный х1 линк от процессора подается на второй порт в одном из сдвоенных трансиверов виртекса. Если я пытаюсь назначить в корке х1 линк на этот порт, ise ругается что это можно делать только на первый из портов трансивера. Вообще единственное что я могу присвоить моему правильному порту, это нечетный номер в соединении (1, 3 и т. д.). Однако как написано в мануале, если я создал в виртексе шину скажем на 4 линии, то он может ее самостоятельно обрубить до х1 только в том случае, если рабочей будет нулевая линия в этой шине (а не просто одна из линий). На форуме xilinx проскакивала информация о том, что в сдвоенных трансиверах можно инвертировать их номера (нулевой станет первым, первый станет нулевым) поменяв их назначение в одном из файлов корки (pcie_gt_wrapper), однако пока не смог понять как. Так получается, что для моих неудачно выбранных покупных плат это единственный вариант заработать - повесить нулевую линию шины pcie на первый трансивер в сдвоенном блоке.

Прошу прощения за сбивчивое объяснение. Как и раньше буду рад подсказкам, хотя проблема и достаточно редкая.
dmitry-tomsk
Цитата(Jack_of_Shadows @ Dec 26 2011, 10:58) *
Andrew Su, спасибо за програмку, но дело у меня в другом. На данном этапе наконец полностью понял суть проблемы: единственный корректный х1 линк от процессора подается на второй порт в одном из сдвоенных трансиверов виртекса. Если я пытаюсь назначить в корке х1 линк на этот порт, ise ругается что это можно делать только на первый из портов трансивера. Вообще единственное что я могу присвоить моему правильному порту, это нечетный номер в соединении (1, 3 и т. д.). Однако как написано в мануале, если я создал в виртексе шину скажем на 4 линии, то он может ее самостоятельно обрубить до х1 только в том случае, если рабочей будет нулевая линия в этой шине (а не просто одна из линий). На форуме xilinx проскакивала информация о том, что в сдвоенных трансиверах можно инвертировать их номера (нулевой станет первым, первый станет нулевым) поменяв их назначение в одном из файлов корки (pcie_gt_wrapper), однако пока не смог понять как. Так получается, что для моих неудачно выбранных покупных плат это единственный вариант заработать - повесить нулевую линию шины pcie на первый трансивер в сдвоенном блоке.

Прошу прощения за сбивчивое объяснение. Как и раньше буду рад подсказкам, хотя проблема и достаточно редкая.


Странное что-то. Два канала GTP обозначаются одним констрейнтом, а канал выбирается по распиновке клока и данных самим исе. У Вас что ucf был неправильный?
Jack_of_Shadows
Констрейнт для сдвоенного GTP один и клок на него один. А вот данные строго определены - на нулевой трансивер четные линии шины, на первый нечетные. Вот по этому поводу рисунок из мануала:

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

Да и как канал может быть выбран по распиновке данных, если данные самим ise разрешается вешать только на нулевые трансиверы (в остальных случаях вылазит ошибка).
dmitry-tomsk
Цитата(Jack_of_Shadows @ Dec 26 2011, 17:27) *
Констрейнт для сдвоенного GTP один и клок на него один. А вот данные строго определены - на нулевой трансивер четные линии шины, на первый нечетные. Вот по этому поводу рисунок из мануала:

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

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

Действительно, странно выбрана распиновка плис. В таблице 5-3 вообще сказано, что для FX30T можно использовать только трансивер X0Y3 для PCIEx1. В Вашем ucf пины указаны только для тактовой, как на схеме подключены пины rx tx пары?
Jack_of_Shadows
По поводу таблицы с поддерживаемыми трансиверами, в пункте перед ней "Relocating the Endpoint Block Plus Core" сказано, что они являются рекомендуемыми ввиду их максимальной близости к физическому блоку PCI Express, переход к другим трансиверам возможен, однако в этом случае xilinx не предоставляет техническую поддержку sm.gif (в итоге максимальная частота проекта получалась в районе 239 МГц, и он отлично работал при 100 МГц опоры в обычном PC. Предполагаю, что с X0Y3 он бы и на 250 МГц завелся, однако в моей плате этот GTP занят SATA интерфейсом).

Вообще на моей плате распиновка такова:

Единственная возможная для использования x1 линия:
X0Y2, RX - MGTRXP1_112 (M1) & MGTRXN1_112 (L1), TX - MGTTXP1_112 (N2) & MGTTXN1_112 (M2)

Возможные тактовые линии:
X0Y1, T4 & T3 (идут через драйверную микросхему с PEx16_x8_x4_Clkp/n)
X0Y0, AB4 & AB3 (идут напрямую с PEx1_3Clkp/n).

Я понимаю что нет ничего хорошего в том, что данные подключены к одному GTP, а клоки к другому, но уж что имею. Линии которые предполагались к использованию как основные, со стороны процессора подключены к шине PEG (PCI Express Graphics, заточена исключительно под работу с видеокартами, не может масштабироваться на меньше чем х16). Пока моя основная идея возможного костыля в такой ситуации это делать шину х4, захватывая оба нужных трансивера, и заставить ее завестись как х1. И здесь пока я упираюсь в ограничения приведенной мною выше таблицы.
Jack_of_Shadows
И снова спасибо всем кто пытался помочь, наконец-то добился связи своих двух плат. В итоге заработал вариант, который я описал в предыдущем посте. Трансиверы в сдвоенном GTX_DUAL блоке удалось поменять местами с помощью правки соответствующего файла корки - pcie_gtx_wrapper.v, путем изменения в списке подключения всех 0 и 1 местами (например .RXN0(GT_RXN[i+0]), и .RXN1(GT_RXN[i+1]), на .RXN1(GT_RXN[i+0]), и .RXN0(GT_RXN[i+1]),)
Lixlex
Здравствуйте. Я пытаюсь разобраться с кодом PIO от Xilinx, который присутствует в корке PCIe. В этом примере вся память разбита на области по 2 Кб(всего 4 области). С компа обращаюсь к этой памяти через прогу RW-Everything.
из даташита на эту корку вычитал следующее:
Each space is implemented with a 2 KB memory. If the corresponding BAR is
configured to a wider aperture, accesses beyond the 2 KB limit wrap around and
overlap the 2 KB memory space.
Попробовал записать произвольные значения в память начиная с адреса, содержащегося в BAR. Действительно, как сказано в даташите, значения повторяются каждые 2 Кб. Но не как не пойму каким образом обращаться к остальным областям? В исходниках выбор области осуществляется исходя из значения двухбитового префикса адреса, который поступает в блок PIO_RX_ENGINE по шине AXI. Но как его задавать я так и не понял.
Может каждая область должна привязываться к своему BARу? При конфигурировании корки я активировал только один BAR
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.