Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Короткие TLP
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
otv116
Изучаю PCIe на ките альтеры с Cyclone-IV. В качестве основы для прошивки использую то, что генерит бесплатный IP compiler for PCI Express.
Написал простейший драйвер под WinXP, который мапит бары в user space и отдает эти виртуальные адреса приложению Win32 (вернее, приложение у драйвера их запрашивает). DMA не использую.
В приложении я просто делаю записи по этим адресам. Указатели объявил типа __int64 *.
В ПЛИСине с помощью SignalTap смотрю, что из корки сыпется в обработчик TLP.
Вот что мне не понятно:
Если я делаю запись по виртуальному адресу, например : *pBuffer = 0xBEEFCAFEDEADFACE, то вижу, что из корки летит 2 TLP. Один со старшей частью, а второй с младшей.
Если в указатель буду пихать больше данных, например с помощью memcpy, то из корки прилетит столько TLP, сколько 32-битных слов я запишу в указатель.
Я расчитывал, что все данные будут в одном единственном TLP.
Подскажите, в какую сторону копать?
novartis
Описанное вами много раз уже обсуждалось. Например, у нас не удалось заставить ОС (у нас линукс используется) описанными вами способами самостоятельно посылать длинные пакеты. Выход - формировать со стороны ПЛИС запрос на чтение из памяти ПК большого блока. А ПК уже ответит на этот запрос кучкой пакетов (разобъет на пакеты, размеры которых не превышают параметр MAX_PAYLOAD_SIZE).
otv116
Спасибо за информацию.

Обычно я стараюсь не плодить тем, которые уже обсуждась много раз. Но сейчас просто не хватает фантазии сочинить разумную строку, чтобы вбить в поиск.
Если не сложно, дайте ссылку на Вашу тему.
novartis
Я вам не в укор сказал, что это много раз обсуждалось, а в том смысле, что многие с этим сталкиваются, я тоже никак не мог понять, как пк заставить гнать большие блоки данных. Вот нашел тему с таким же вопросом как у вас http://electronix.ru/forum/index.php?showtopic=44551

Вы написали про "бесплатный IP compiler for PCI Express". А в Qsys вы можете pcie ядро сгенерить? Я вот сейчас как раз занимаюсь переводом нашего проекта PCIE+DMA+DDR3+(еще всякая логика) под Qsys. Раньше все генерил мегавизардом, потом руками состыковывал на vhdl, если что-то менялось, добавлялся новый блок - столько кода приходилось перелопачивать. А qsys позволяет всё кубиками соединить, потом квартус интерконнекты сам вставляет. Есть небольшие заморочки, но они решаются. Так что если вы только начали работать с PCIE и в последствии придется добавить другие ядра/блоки, посмотрите в сторону Qsys.
SM
Цитата(otv116 @ Jan 22 2015, 17:20) *
Подскажите, в какую сторону копать?


Делать busmaster (DMA), и вариантов почти нет. Да и PCIe это не PCI - разницы, генерировать TLP в ответ, или инициировать транзакцию самому, нет.

PC, в подавляющем своем большинстве, не умеет общаться с PCI устройствами данными, больше, чем 32 бита за транзакцию. Можно попытаться использовать MMX инструкции, чтобы получить 64 или 128 битные пакеты, и то, вероятность, что чипсет их оставит таковыми, крайне низка. Если это получится, то ОЧЕНЬ повезло с чипсетом.
otv116
-> SM
Сегодня решил немного поэкспериментировать. Стал писать в девайс не через виртуальные адреса, выдаваемые драйвером, а с помощью IOCTL закидывал в драйвер данные, а в нем с помощью WRITE_REGISTER_BUFFER_ULONG64 кидал в девайс. Результат такой: TLP стали содержать по одному 64-битному слову. Но это прокатит только для 64-битных операционок. Но все равно, это не та скорость, о которой так долго говорили большевики sm.gif
Хотел попробовать через виртуальные адреса, но из Win64 приложения. Но тот код, что работал под 32, не поехал. Второй вызов SetupDiGetDeviceInterfaceDetail постоянно выдает ошибку 1784. Но это уже не по теме.

-> novartis
Спасибо за ссылку.
С QSys я как раз и хотел начать, чтобы не заморачиваться с разбором TLP. Но ничего не получилось. Делал все по инструкции из UG_pci_express, только подправляя под свою плату (она 1х, а не 4х). Скомпилилось нормально, TQ не ругался, но устройсво виндой не обнаруживалось вообще. ltssm никаких признаков жизни не демонстрировали, оставаясь все время в 0. В общем, не дожал я это дело. Да и не лежит как то душа к этим "кубикам".
SM
Цитата(otv116 @ Jan 23 2015, 22:35) *
Но все равно, это не та скорость, о которой так долго говорили большевики sm.gif

Да даже и не заморачивайтесь, не будет пакетных передач в slave, несмотря даже на "prefetchable" бит. Как я уже сказал - максимум, что, может быть, добьетесь, это по 128 бит, и то вряд-ли, и то на отдельных чипсетах. Так что, сразу делайте мастера.
otv116
Понял. Спасибо.
Ближайшее будущее мне видится в синих тонах. Видимо, из - за экранов. sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.