Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разработка PCIe
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
NikSave
Все добрый день.
Понимаю, что тема не нова, но тем неменее.
Есть желание сделать устройство управляемое по PCIExpress. А отсуда возникает ряд вопросов:
Что использовать ПЛИС или готовый контроллер?
Если ПЛИС, то нужны ли какие либо покупные ядра? Насколько сделать на плис трудоемко и гемморойно?
Если микросхему контроллера, то посоветуйте какую (название) желательно чтобы были стандартные драйвера.
Заранее спасибо за ответы.
Alexey_Rostov
Цитата(NikSave @ Jun 20 2015, 09:15) *
Что использовать ПЛИС или готовый контроллер?
Если ПЛИС, то нужны ли какие либо покупные ядра?

Делал на ПЛИС, ml605 board. Использовал стандартное ядро. На ПК работал с крякнутым windrive.
NikSave
Цитата(farbius @ Jun 20 2015, 09:30) *
Делал на ПЛИС, ml605 board. Использовал стандартное ядро. На ПК работал с крякнутым windrive.


что за стандартное ядро? В ИСЕ вроде ядра конечных точек платные? или к данной плате было бесплатным?
Alexey_Rostov
Цитата(NikSave @ Jun 20 2015, 09:49) *
что за стандартное ядро? В ИСЕ вроде ядра конечных точек платные? или к данной плате было бесплатным?

Собирал в XPS. А потом добавлял в PLAN ahead. У меня задача была обмен данными плата-пк
NikSave
Цитата(farbius @ Jun 20 2015, 10:44) *
Собирал в XPS. А потом добавлял в PLAN ahead. У меня задача была обмен данными плата-пк

Впринципе у меня та же задача. Записать в регистр, прочитать из регистра.
Как по Вашему? Было геморойно разобраться? Может стоит сделать на какой либо микросхеме контроллере?
Alexey_Rostov
Цитата(NikSave @ Jun 20 2015, 13:54) *
Впринципе у меня та же задача. Записать в регистр, прочитать из регистра.
Как по Вашему? Было геморойно разобраться? Может стоит сделать на какой либо микросхеме контроллере?

В XPS все довольно просто: собирается проект где мастер pcie, слейв например leds. Мапировал leds на bar pcie. На ПК запускал программу pcie tree , с её помощью зажигал диоды на плате.
Посмотрите форум, я выкладывал даже скриншот проекта
gerber
Цитата(NikSave @ Jun 20 2015, 10:15) *
Есть желание сделать устройство управляемое по PCIExpress. А отсуда возникает ряд вопросов:
Что использовать ПЛИС или готовый контроллер?

Посмотрите в сторону мостов с PCIe на что-либо более "удобоваримое" (PCIe bridge), на PCI или Local Bus.
А уж PCI Target много проще поднять, да и ПЛИС для PCI нужна куда более дешевая, чем для PCIe, какой-нибудь Spartan-2 вполне потянет.
NikSave
Цитата(gerber @ Jun 20 2015, 20:20) *
Посмотрите в сторону мостов с PCIe на что-либо более "удобоваримое" (PCIe bridge), на PCI или Local Bus.
А уж PCI Target много проще поднять, да и ПЛИС для PCI нужна куда более дешевая, чем для PCIe, какой-нибудь Spartan-2 вполне потянет.


PCI не нужен. Именно PCIe. Кстати какой мост порекомендуете? (название микросхемы, чтобы было от чего отталкиваться).
dmitry-tomsk
Цитата(NikSave @ Jun 21 2015, 10:28) *
PCI не нужен. Именно PCIe. Кстати какой мост порекомендуете? (название микросхемы, чтобы было от чего отталкиваться).

Всё от плис зависит, какая плис то?
gerber
Цитата(NikSave @ Jun 21 2015, 10:28) *
PCI не нужен. Именно PCIe. Кстати какой мост порекомендуете? (название микросхемы, чтобы было от чего отталкиваться).

Я использовал XIO2001 от Texas Instruments, это PCIe-PCI мост, далее ставил Spartan-2 с простейшим PCI Target, и через регистры PCI уже можно делать, что нужно. Если нет огромных потоков данных в PC, требующих мастер-режима от PCI устройства, то достаточно более чем.
NikSave
Цитата(dmitry-tomsk @ Jun 21 2015, 09:54) *
Всё от плис зависит, какая плис то?


Впринципе любая от xilinx. Ориентировочно виртекс7. Только я непонял причем здесь плис если рассматривается вариант внешней микоросхемы моста. Или вы рекомендуете сделать контроллер на плис?

Цитата(gerber @ Jun 21 2015, 13:35) *
Я использовал XIO2001 от Texas Instruments, это PCIe-PCI мост, далее ставил Spartan-2 с простейшим PCI Target, и через регистры PCI уже можно делать, что нужно. Если нет огромных потоков данных в PC, требующих мастер-режима от PCI устройства, то достаточно более чем.


А с драйвером как дела особенно под win? Имеются?
dmitry-tomsk
На Xilinx 7-й серии всё просто, ip-ядро моста + axi central dma controller. Есть xapp по этому поводу. Там только драйвер писать надо. Зато скорость любая.
Внешний мост такую скорость не даст.
Если есть деньги, покупаете ip-ядро от plda и вообще никаких проблем не имеете.
gerber
Цитата(NikSave @ Jun 21 2015, 17:06) *
А с драйвером как дела особенно под win? Имеются?

Для моста особый драйвер не нужен, его регистры стандартизованы спецификацией и поэтому типовой драйвер подходит.
А для своего устройства за мостом, безусловно, драйверок написать придется.
doom13
Цитата(farbius @ Jun 20 2015, 17:01) *
В XPS все довольно просто: собирается проект где мастер pcie, слейв например leds. Мапировал leds на bar pcie. На ПК запускал программу pcie tree , с её помощью зажигал диоды на плате.

А pcie tree будет работать только под 32-х разрядной системой?

Цитата(dmitry-tomsk @ Jun 21 2015, 16:23) *
На Xilinx 7-й серии всё просто, ip-ядро моста + axi central dma controller. Есть xapp по этому поводу. Там только драйвер писать надо. Зато скорость любая.

Есть задача, данные приходят по 10G Ethernet (используется Virtex 7) и надо их запихнуть в ПК (скорее всего под управлением Linux). Для ядра 10G Ethernet user-интерфейс - это AXI4 Stream. Что лучше в данном случае использовать: ядро AXI4 to PCIe bridge или "голое" ядро Gen3 Integrated Block for PCI Express, где интерфейсы AXI4 Stream? Пока только начинаю разбираться, буду рад совету.
Alexey_Rostov
Цитата(doom13 @ Jun 22 2015, 21:33) *
А pcie tree будет работать только под 32-х разрядной системой?

pcie tree только для 32-х разрядной системы. Данную программу использовал исключительно для отладки PCIe моста на ПЛИС, чтобы программист мог начать работать с winDrive.

Цитата(doom13 @ Jun 22 2015, 21:33) *
Есть задача, данные приходят по 10G Ethernet (используется Virtex 7) и надо их запихнуть в ПК (скорее всего под управлением Linux). Для ядра 10G Ethernet user-интерфейс - это AXI4 Stream. Что лучше в данном случае использовать: ядро AXI4 to PCIe bridge или "голое" ядро Gen3 Integrated Block for PCI Express, где интерфейсы AXI4 Stream?


Для bridge PCIe вам необходимо будет делать переход из stream в memory mapped. Data mover вам в помощь. По поводу Gen3 Integrated Block for PCI Express сказать ничего не могу.
iosifk
Цитата(NikSave @ Jun 20 2015, 09:15) *
Что использовать ПЛИС или готовый контроллер?
Если ПЛИС, то нужны ли какие либо покупные ядра? Насколько сделать на плис трудоемко и гемморойно?

Посмотрите ПЛИС Акроникс. В них аппаратные контроллеры интерфейсов. И они как раз для телекома подходят...
doom13
Цитата(farbius @ Jun 22 2015, 22:45) *
pcie tree только для 32-х разрядной системы. Данную программу использовал исключительно для отладки PCIe моста на ПЛИС, чтобы программист мог начать работать с winDrive.

Спасибо, думал у Вас какой-то другой pcie tree.

Цитата(farbius @ Jun 22 2015, 22:45) *
Для bridge PCIe вам необходимо будет делать переход из stream в memory mapped. Data mover вам в помощь. По поводу Gen3 Integrated Block for PCI Express сказать ничего не могу.

Спасибо. Пока читаю про AXI4 to PCIe bridge, но, возможно, Gen3 Integrated Block for PCI Express для моего случая подойдёт больше?
dmitry-tomsk
Цитата(doom13 @ Jun 22 2015, 23:15) *
Спасибо, думал у Вас какой-то другой pcie tree.


Спасибо. Пока читаю про AXI4 to PCIe bridge, но, возможно, Gen3 Integrated Block for PCI Express для моего случая подойдёт больше?

Не подойдёт, там уровень транзакций, надо пакеты формировать, чем мост и занимается. Мост к тому же мастером работает, удобно управление делать через регистры на AXI4Lite
doom13
Цитата(dmitry-tomsk @ Jun 21 2015, 16:23) *
На Xilinx 7-й серии всё просто, ip-ядро моста + axi central dma controller. Есть xapp по этому поводу. Там только драйвер писать надо. Зато скорость любая.

Подскажите номер этого xapp.
toshas
Цитата(doom13 @ Jun 24 2015, 10:13) *
Подскажите номер этого xapp.

xapp1171-pcie-central-dma-subsystem.pdf
doom13
Цитата(toshas @ Jun 24 2015, 10:58) *
xapp1171-pcie-central-dma-subsystem.pdf

Спасибо.
EugeneS
QUOTE (toshas @ Jun 24 2015, 10:58) *
xapp1171-pcie-central-dma-subsystem.pdf


Немного дегтя:
"To test this targeted design platform in hardware, you need a host machine capable of
PCI Express Gen1 x4, and the appropriate drivers and software that allow you to initiate
PCI Express traffic to the FPGA endpoint. The drivers and software are not provided with this
application note, and must be custom developed."

И скорость похоже не меряли.

doom13
Посоветуйте какую-нибудь прогу под Windows 7 x64, чтоб можно было помониторить PCIe. Чтоб была возможность писать/читать данные из памяти на плате и чтоб можно было посмотреть, что плата записала в память ПК. Есть ли такое?
krux
Цитата(doom13 @ Jun 29 2015, 10:09) *
Посоветуйте какую-нибудь прогу под Windows 7 x64, чтоб можно было помониторить PCIe. Чтоб была возможность писать/читать данные из памяти на плате и чтоб можно было посмотреть, что плата записала в память ПК. Есть ли такое?

rweverything
doom13
Цитата(krux @ Jun 29 2015, 10:28) *
rweverything

Спасибо, слил и установил. Если я воткну мою плату в комп при наличии ядра PCIe-AXI bridge - она появится в перечне устройств? А как правильно задаются адреса и адреса перехода? Как система выделит адресное пространство под мою плату?
dmitry-tomsk
Цитата(doom13 @ Jun 29 2015, 10:58) *
Спасибо, слил и установил. Если я воткну мою плату в комп при наличии ядра PCIe-AXI bridge - она появится в перечне устройств? А как правильно задаются адреса и адреса перехода? Как система выделит адресное пространство под мою плату?

Поставьте jungo windriver, мастер там всё за Вас сделает.
doom13
Цитата(dmitry-tomsk @ Jun 30 2015, 08:45) *
Поставьте jungo windriver, мастер там всё за Вас сделает.

Спасибо попробуем.
Может кто пояснит правило задания параметров для PCIe:BARs и AXI:BARs для ядра AXI to PCIe bridge? Что-то никак не могу понять, как это правильно делается.
Как понимаю, для PCIe:BARs надо ещё память в системе создать, куда ядро будет писать данные полученные по PCIe или читать по запросу PCIe. Но как адрес и размер данной памяти увязать с параметрами PCIe:BARs?
doom13
Цитата(dmitry-tomsk @ Jun 30 2015, 08:45) *
Поставьте jungo windriver, мастер там всё за Вас сделает.

Немного bb-offtopic.gif . Вопрос по работе с jungo windriver. Скачал версию 10.10 + кейген и всё класно работало. После перепрошивки FPGA создавал и устанавливал свой драйвер всё работало. Если заливалась новая прошивка в ПЛИС, то сносил созданный ранее драйвер, создавал и устанавливал новый и можно было работать. Т.е. перезагрузка ПК не требовалась.
Сейчас пришлось переустановить Windows 7 и всё работает как-то совсем не так. Плата вставлена в слот PCIe, заливаю прошивку в FPGA, создаю и устанавливаю драйвер - всё работает. Если перепрошить FPGA то при чтении получаю все FFFF (т.е. ничего не читается и не пишется). Если перезагрузить комп, то всё вернётся в работоспособное состояние. Пробую снести ранее установленный драйвер, он удаляется и комп виснет (пробовал сносить из менегера устройств и windriver-визарда, виснет в обоих случаях). После ресета и создания/переустановки драйвера опять могу писать/читать память в FPGA.
Может посоветуете, что тут можно поправить, чтоб работало без перезагрузки компа? Думаю сносить и переустанавливать систему, не понятно, как раньше работало.
Alexey_Rostov
Цитата(doom13 @ Jun 30 2015, 11:14) *
Может кто пояснит правило задания параметров для PCIe:BARs и AXI:BARs для ядра AXI to PCIe bridge? Что-то никак не могу понять, как это правильно делается.

Я все параметры оставил по умолчанию, за исключением адресов.
Для axi:bar все просто. В параметрах для адреса прописываете адреса мапируемых областей вашей axi системы (Вы так делали на скриншотах).

Цитата
Как понимаю, для PCIe:BARs надо ещё память в системе создать, куда ядро будет писать данные полученные по PCIe или читать по запросу PCIe. Но как адрес и размер данной памяти увязать с параметрами PCIe:BARs?

Создаете память физическую с начальным адресом например AddrPhys (адрес возвращает функция из драйвера windrive). Далее в соответствующие контрольные регистры моста пишете адрес следующий AddrPhys & (Buffersize - 1), где Buffersize - размер выделяемого буфера.
Если необходимо читать из PCIe:BARs с помощью ДМА, то в регистр источника ДМА пишете адрес PCIe:BAR в системе с axi + AddrPhys & (Buffersize - 1)
doom13
Цитата(farbius @ Jul 7 2015, 11:54) *

Спасибо, тут я более-менее разобрался. С PCIe:BARs уже всё понятно и уже затестил, как работает. Остаётся проверить работу AXI:BARs, но тут, как понял, без написания драйвера не прокатит (драйвер должен выделить адреса и размеры для буферов на которые ссылаются AXI:BARs + прописать эти параметры в настройки моста).

Сейчас наиболее актуально
Цитата(doom13 @ Jul 7 2015, 10:54) *
Немного bb-offtopic.gif . Вопрос по работе с jungo windriver. Скачал версию 10.10 + кейген и всё класно работало. После перепрошивки FPGA создавал и устанавливал свой драйвер всё работало. Если заливалась новая прошивка в ПЛИС, то сносил созданный ранее драйвер, создавал и устанавливал новый и можно было работать. Т.е. перезагрузка ПК не требовалась.
Сейчас пришлось переустановить Windows 7 и всё работает как-то совсем не так. Плата вставлена в слот PCIe, заливаю прошивку в FPGA, создаю и устанавливаю драйвер - всё работает. Если перепрошить FPGA то при чтении получаю все FFFF (т.е. ничего не читается и не пишется). Если перезагрузить комп, то всё вернётся в работоспособное состояние. Пробую снести ранее установленный драйвер, он удаляется и комп виснет (пробовал сносить из менегера устройств и windriver-визарда, виснет в обоих случаях). После ресета и создания/переустановки драйвера опять могу писать/читать память в FPGA.
Может посоветуете, что тут можно поправить, чтоб работало без перезагрузки компа? Думаю сносить и переустанавливать систему, не понятно, как раньше работало.

Не знаю что делать, то ли сносить Windows и пробовать всё переустановить?
doom13
После переустановки Windows ситуация не изменилась. Windriver устанавливает INF-файл, в системе появляется созданное устройство, но при попытке выполнить для данного INF-файла uninstall комп виснет.
Alexey_Rostov
Цитата(doom13 @ Jul 8 2015, 09:01) *
После переустановки Windows ситуация не изменилась. Windriver устанавливает INF-файл, в системе появляется созданное устройство, но при попытке выполнить для данного INF-файла uninstall комп виснет.

Пересоберите проект, проверьте параметры ядра
doom13
А как это поможет? Заливаю один и тот же бинарник. После перезаливки FPGA драйвер перестаёт писать/читать память FPGA. Перезагружаю комп и работает. Вот комп каждый раз перезагружать не хочется, поэтому удаляю установленный драйвер, создаю и устанавливаю новый и работаю дальше (раньше именно так работало, пока не сломал и не переустановил систему). Сейчас при удалении драйвера комп всё время виснет, уже переставил систему, но не помогло. Т.е. если менять прошивку FPGA, то дальнейшая работа возможна только с перезагрузкой компа. Хочется как-то исправить это.
dmitry-tomsk
Цитата(doom13 @ Jul 8 2015, 09:59) *
А как это поможет? Заливаю один и тот же бинарник. После перезаливки FPGA драйвер перестаёт писать/читать память FPGA. Перезагружаю комп и работает. Вот комп каждый раз перезагружать не хочется, поэтому удаляю установленный драйвер, создаю и устанавливаю новый и работаю дальше (раньше именно так работало, пока не сломал и не переустановил систему). Сейчас при удалении драйвера комп всё время виснет, уже переставил систему, но не помогло. Т.е. если менять прошивку FPGA, то дальнейшая работа возможна только с перезагрузкой компа. Хочется как-то исправить это.

После смены прошивки стирается конфиг пространство PCIE - прописывает его windows при загрузке, так что придётся каждый раз перезагружать
Golikov A.
может удалять драйвер до прошивки FPGA поможет? Ну и если уж совсем беда, я бы попробовал виртуальную машину, ее куда легче передернуть....
doom13
Цитата(dmitry-tomsk @ Jul 8 2015, 10:19) *
После смены прошивки стирается конфиг пространство PCIE - прописывает его windows при загрузке, так что придётся каждый раз перезагружать

Это 100%?
Хорошо, тогда ситуация такая - всё происходит в первый раз. Залили FPGA, драйвера в системе ещё нет. Запускаем Windriver-wizard, создаём и устанавливаем драйвер. Система видит новое устройство и может по PCIe писать/читать адресное пространство в ПЛИС.
Пару дней назад после перепрошивки FPGA помогал снос старого и создание/установка нового драйвера. Что-то изменилось и теперь так не работает (при сносе драйвера ОС виснет). Уже начинаю сомневаться, работало ли оно вообще по этому принципу (тогда только-только всё запустил и проверил, что пишет/читает данные в ПЛИС), но работало.

Цитата(Golikov A. @ Jul 8 2015, 10:33) *
может удалять драйвер до прошивки FPGA поможет? Ну и если уж совсем беда, я бы попробовал виртуальную машину, ее куда легче передернуть....

Хорошо, счас ещё раз всё с нуля установлю и попробую. А по поводу виртуальной машины, что-то мне кажется, что там будет ещё больше проблем (с доступом к PCIe).
doom13
Цитата(Golikov A. @ Jul 8 2015, 10:33) *
может удалять драйвер до прошивки FPGA поможет? Ну и если уж совсем беда, я бы попробовал виртуальную машину, ее куда легче передернуть....

Такой способ также не проходит. Windows чистая, пока поставил только Vivado и Jungo Windriver.
doom13
Нашёл волшебную последовательность действий при которой всё работает:
1. Удаляем установленное PCIe устройство в менеджере устройств (ставим галку Delete the driver software for this device).
2. Перезаливаем прошивку FPGA.
3. Обновляем конфигурацию оборудования в менеджере устройств.
4. Запускаем Jungo WinDriver (Driver Wizard), создаём и устанавливаем драйвер для нового устройства.
5. Получаем рабочую систему без перезапуска ПК (установленный драйвер пишет/читает память в FPGA).
gosh74
Делал на Spartan6, у которого аппаратный Endpoint. Поддержку прерываний и DMA контроллер писал сам, правда DMA только в одну сторону - от устройства в систему. Драйвер сделал в Jungo Windriver. Если интересно, схемку вышлю, опытом поделюсь.

Цитата(doom13 @ Jul 8 2015, 16:45) *
Нашёл волшебную последовательность действий при которой всё работает:
...


Тоже с таким приходится сталкиваться. Win7 помнит все что в нее втыкали, поэтому иногда приходится делать так:

1) Запустить командную строку командой cmd
2) В командной строке выполнить команду set devmgr_show_nonpresent_devices=1
3) затем start devmgmt.msc и запустить Диспетчер устройств
4) В Диспетчере устройств в меню Вид поставить галку Показать скрытые устройства
5) Раскрыть нужную ветку, найти отсутсвующее устройство (оно будет затемненным) и удалить его.

Можно в батник оформить.

Еще бывает полезно включить Write filter, чтобы ничего не приходилось чистить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.