|
|
  |
Короткие TLP |
|
|
|
Jan 22 2015, 14:20
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 25-04-05
Пользователь №: 4 466

|
Изучаю PCIe на ките альтеры с Cyclone-IV. В качестве основы для прошивки использую то, что генерит бесплатный IP compiler for PCI Express. Написал простейший драйвер под WinXP, который мапит бары в user space и отдает эти виртуальные адреса приложению Win32 (вернее, приложение у драйвера их запрашивает). DMA не использую. В приложении я просто делаю записи по этим адресам. Указатели объявил типа __int64 *. В ПЛИСине с помощью SignalTap смотрю, что из корки сыпется в обработчик TLP. Вот что мне не понятно: Если я делаю запись по виртуальному адресу, например : *pBuffer = 0xBEEFCAFEDEADFACE, то вижу, что из корки летит 2 TLP. Один со старшей частью, а второй с младшей. Если в указатель буду пихать больше данных, например с помощью memcpy, то из корки прилетит столько TLP, сколько 32-битных слов я запишу в указатель. Я расчитывал, что все данные будут в одном единственном TLP. Подскажите, в какую сторону копать?
|
|
|
|
|
Jan 22 2015, 19:04
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 25-04-05
Пользователь №: 4 466

|
Спасибо за информацию.
Обычно я стараюсь не плодить тем, которые уже обсуждась много раз. Но сейчас просто не хватает фантазии сочинить разумную строку, чтобы вбить в поиск. Если не сложно, дайте ссылку на Вашу тему.
|
|
|
|
|
Jan 23 2015, 15:01
|

Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845

|
Я вам не в укор сказал, что это много раз обсуждалось, а в том смысле, что многие с этим сталкиваются, я тоже никак не мог понять, как пк заставить гнать большие блоки данных. Вот нашел тему с таким же вопросом как у вас http://electronix.ru/forum/index.php?showtopic=44551Вы написали про "бесплатный IP compiler for PCI Express". А в Qsys вы можете pcie ядро сгенерить? Я вот сейчас как раз занимаюсь переводом нашего проекта PCIE+DMA+DDR3+(еще всякая логика) под Qsys. Раньше все генерил мегавизардом, потом руками состыковывал на vhdl, если что-то менялось, добавлялся новый блок - столько кода приходилось перелопачивать. А qsys позволяет всё кубиками соединить, потом квартус интерконнекты сам вставляет. Есть небольшие заморочки, но они решаются. Так что если вы только начали работать с PCIE и в последствии придется добавить другие ядра/блоки, посмотрите в сторону Qsys.
|
|
|
|
|
Jan 23 2015, 15:08
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(otv116 @ Jan 22 2015, 17:20)  Подскажите, в какую сторону копать? Делать busmaster (DMA), и вариантов почти нет. Да и PCIe это не PCI - разницы, генерировать TLP в ответ, или инициировать транзакцию самому, нет. PC, в подавляющем своем большинстве, не умеет общаться с PCI устройствами данными, больше, чем 32 бита за транзакцию. Можно попытаться использовать MMX инструкции, чтобы получить 64 или 128 битные пакеты, и то, вероятность, что чипсет их оставит таковыми, крайне низка. Если это получится, то ОЧЕНЬ повезло с чипсетом.
|
|
|
|
|
Jan 23 2015, 19:35
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 25-04-05
Пользователь №: 4 466

|
-> SM Сегодня решил немного поэкспериментировать. Стал писать в девайс не через виртуальные адреса, выдаваемые драйвером, а с помощью IOCTL закидывал в драйвер данные, а в нем с помощью WRITE_REGISTER_BUFFER_ULONG64 кидал в девайс. Результат такой: TLP стали содержать по одному 64-битному слову. Но это прокатит только для 64-битных операционок. Но все равно, это не та скорость, о которой так долго говорили большевики  Хотел попробовать через виртуальные адреса, но из Win64 приложения. Но тот код, что работал под 32, не поехал. Второй вызов SetupDiGetDeviceInterfaceDetail постоянно выдает ошибку 1784. Но это уже не по теме. -> novartis Спасибо за ссылку. С QSys я как раз и хотел начать, чтобы не заморачиваться с разбором TLP. Но ничего не получилось. Делал все по инструкции из UG_pci_express, только подправляя под свою плату (она 1х, а не 4х). Скомпилилось нормально, TQ не ругался, но устройсво виндой не обнаруживалось вообще. ltssm никаких признаков жизни не демонстрировали, оставаясь все время в 0. В общем, не дожал я это дело. Да и не лежит как то душа к этим "кубикам".
|
|
|
|
|
Jan 23 2015, 19:45
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(otv116 @ Jan 23 2015, 22:35)  Но все равно, это не та скорость, о которой так долго говорили большевики  Да даже и не заморачивайтесь, не будет пакетных передач в slave, несмотря даже на "prefetchable" бит. Как я уже сказал - максимум, что, может быть, добьетесь, это по 128 бит, и то вряд-ли, и то на отдельных чипсетах. Так что, сразу делайте мастера.
|
|
|
|
|
Jan 24 2015, 18:18
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 25-04-05
Пользователь №: 4 466

|
Понял. Спасибо. Ближайшее будущее мне видится в синих тонах. Видимо, из - за экранов.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|