реклама на сайте
подробности

 
 
> Передача данных с ПЛИС через PCIe на ПК, Какова методология, какие подходы, что читать и что писать?
spbroma
сообщение Dec 11 2014, 13:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 23-07-14
Пользователь №: 82 337



Здравствуйте!

У меня есть задача:
Организовать передачу данных по PCIe с ПЛИС на ПК (Win7 x64).

Имеется: отладочная плача Xilinx vc709 на Virtex-7, опыт работы с ПЛИС
Отсутствует: опыт работы на уровне драйверов, работы с PCIe

Подскажите, как правильно и оптимально организовать систему?

Вместе с PCIe IP-core идет пример, в котором реализован контроллер памяти. Взяв триальный WinDriver я смог записывать и считывать байты через тестовое же, но на этот раз виндрайверское приложение. Однако виндрайвер платный, да и функционал мне нужен не то, чтобы выдающийся. Решил подумать на тему написания драйвера.

Поставил VS, WDK, настроил удалённый запуск и отладку драйвера на тестовом компьютере. Теперь настало время решить, в каком направлении двигаться и как это сделать менее болезненно.

Как я понимаю, у меня есть два варианта:
1. Определиться, устройство какого типа я буду формировать на ПЛИС: контроллер памяти, мультимедийное утсройство, что-то ещё и под него писать свой драйвер.
2. Подумать насчёт того, может уже есть драйверы, которые решают мою задачу, останется только сформировать на ПЛИС соответствующую конфигурацию устройства.

Собственно, вопросы к уважаемой публике:
1. Есть ли какие-то стандартные решения или подходы к подобной задачи? И какие?
2. Какой из вариантов лучше?
3. Что почитать?

Буду благодарен за любой совет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SM
сообщение Dec 11 2014, 14:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Самое главное - с точки зрения драйвера нет разницы, PCI это, или PCIe. Поэтому, если был опыт с PCI - то делайте все точно так же, с точки зрения софта. Если не было опыта, то... Смотрите как пример драйвер, который идет с WDK (7600), в src\general\pcidrv\wdm - там довольно сложный драйвер, сетевой карты (Intel 82557/82558 based PCI Ethernet Adapter). Но, главное, не сама работа с сетью, а базовые вещи - как получаются адреса ресурсов железки, как прицепиться к прерыванию, как писать/читать эти самые ресурсы платы. Вот на базе этого и делайте свой драйвер. На самом деле, это не сложно. Сначала отрезать от него почти все (включая обработку всех IOCTL и READ/WRITE), оставив только минимум, получение ресурсов, регистрацию девайса в системе, и пр. PnP. А затем, добавлять по чуть-чуть свое. Ну и научиться писать INF - файл.

Что касается каких-то "стандартностей", тут Вам не УСБ, нет стандартов. Да, если Вы сделаете, например, UART, совместимый по всем портам с 16550, то без проблем повесите на него микрософтовский serial.sys, но это UART. А что-то сложнее делать, уже не выйдет подделаться под какую-то чужую железяку.

В общем, сделайте сначала железяку, которая через порт в I/O Space умеет зажечь/погасить светодиод. И напишите драйвер к ней, который имеет один IOCTL, зажечь/погасить его. А дальше уже все как по маслу пойдет, когда это сделаете.
Go to the top of the page
 
+Quote Post
spbroma
сообщение Dec 11 2014, 15:20
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 23-07-14
Пользователь №: 82 337



Спасибо за быстрый отклик :)

SM, насчет стандартов я имел в виду какой-то сценарий действий, который позволит быстрее прийти к решению, не изобретая велосипедов.
Опыта ни с PCI, ни с PCIe нет, так что, пожалуй, последую вашему совету насчет разбора примера сетевой карты и мигания диодом.

Не подскажете какой-нибудь ресурс или литературу (кроме msdn и спецификации PCIe), чтобы можно было проще разобраться и въехать в тему? Нашел много книг про WDM, а сейчас, как я понимаю, WDF -- есть ли принципиальная разница или можно для начала и то почитать?

RobFPGA,
Цитата
Для начала нужно четко понять что за систему Вы строите и что от нее хотите

В первом приближении: потоковая передача данных, единицы Гб/с. В остальном жёстких требований нет.
Самый простой из приемлемых вариантов: плата всегда молотит данные, компьютер принимает, когда готов. Или он сообщает устройству, что готов и плата начинает передачу. Но в настоящий момент в приоритете скорость реализации прототипа и приемлема любая система, позволяющая с адекватной скоростью передавать данные на ПК.

Из IP-корок есть Integrated block for PCIe от Xilinx. Правда, еще предстоит понять, как подружиться с AXI, но это отдельная тема.

Цитата
Поэтому вариант у Вас один - сначала определитесь со структурой железа.

Имеет ли значение то, как сконфигурить корку (какое base class value и проч.), или если я сам буду писать драйвер, то указанный класс устройства мне не важен, так как я сам буду знать, как он отображается в дереве устройств и как к нему обращаться?



Go to the top of the page
 
+Quote Post
SM
сообщение Dec 11 2014, 16:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(spbroma @ Dec 11 2014, 18:20) *
SM, насчет стандартов я имел в виду какой-то сценарий действий, который позволит быстрее прийти к решению, не изобретая велосипедов.
Опыта ни с PCI, ни с PCIe нет, так что, пожалуй, последую вашему совету насчет разбора примера сетевой карты и мигания диодом.

Не подскажете какой-нибудь ресурс или литературу (кроме msdn и спецификации PCIe), чтобы можно было проще разобраться и въехать в тему? Нашел много книг про WDM, а сейчас, как я понимаю, WDF -- есть ли принципиальная разница или можно для начала и то почитать?


Сценарий:
1) Сделайте железку с Slave I/O портом, который зажигает светодиод.
2) Сделайте простейший драйвер для нее.
3) Добавьте в железо, например, таймер с прерыванием.
4) Сделайте в драйвере мигалку в прерывании.
5) Сделайте простой мастер - передачу в DMA 4096 байт данных в комп.
6) Сделайте драйвер для этого.
7) ... Ну тут уже сами всем все советовать будете ...

Не изобретая велосипедов... Я забыл главное! В WDK 2600 - WinDDK\2600\src\kernel\serial - драйвер UART 16C550 и иже с ними... Эту микросхемы каждый школьник знает, как она работает, какие у нее порты, и т.п. Драйвер там прост как валенок. Вот его берите, и обрезайте сначала до минимума (убрав ВЕСЬ I/O - read, write, ioctl), и потом добавляя сначала свои IOCTL, а потом, может быть, и read/write, правда, последние часто не нужны. Так что сетевую карту - отставить! Вот с чего надо начинать.

Ресурс... Я ничем, кроме msdn, спецификаций, гугля и исходников (как и serial.sys, и сетевухи, так и верилог-исходников от китов), не пользовался, поэтому не знаю... Также не знаю, что такое WDF. Не лезьте в дебри, берите WDK 7600, берите serial.sys (из 2600!!! не из 7600!), и собирайте из него свой драйвер. Не пользуйтесь всякими WDF/UMDF/KMDF и прочими гнилыми соплями C++ными. Кстати, тот же serial в 7600 - уже WDF-ный, мне лично, даже лень вникать стало в эту мутоту... Поэтому за основу - именно serial из 2600 (он БУДЕТ работать и под win 8.1 - если соберете в Win 7 build environment, и будет и под XP).

Железо отлаживайте с виндрайвером. С ним и ДМА без проблем отлаживается (проходил). А потом уже на отлаженном железе - свой драйвер. Периода evaluation на это хватит, да и если что... В личке скажу sm.gif


Цитата(spbroma @ Dec 11 2014, 18:20) *
Имеет ли значение то, как сконфигурить корку (какое base class value и проч.), или если я сам буду писать драйвер, то указанный класс устройства мне не важен, так как я сам буду знать, как он отображается в дереве устройств и как к нему обращаться?

Имеет... Винда может начать обзывать Ваш девайс PCI-PCI мостом (когда там нули), каким угодно адаптером, и т.д., так что, задайте туда нечто, близкое к реальности. Ну и VID/PID такой, чтобы не попасть на готовый драйвер в недрах микрософта...
Go to the top of the page
 
+Quote Post
spbroma
сообщение Dec 11 2014, 19:33
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 23-07-14
Пользователь №: 82 337



Спасибо за разъяснения!
7 пункт воодушевляет :)

А что не так с KMDF? Я, читая msdn, я увидел только два пути: UMDF и KMDF. Вот.

Или я чего-то не понимаю.

А насчёт виндрайвера, я пробовал то, о чем вы бы хотели мне сказать, но что-то там пошло не так. Не помню уже.

Какой тип устройства близок к реальности? Multimedia device подойдет?
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 11 2014, 19:53
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(spbroma @ Dec 11 2014, 22:33) *
А что не так с KMDF? Я, читая msdn, я увидел только два пути: UMDF и KMDF. Вот.

Возможно, это личное, но я терпеть не могу C++, и вообще, в принципе категорически против использования в драйверах чего либо, кроме API операционной системы. Все эти ***F - это внешние либы, хрен знает как что делающие.

Вот в MSDN верный путь - http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx и http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx

В общем, я предложил - брать serial.sys из DDK версии 2600, как самое простое в понимании и быстрое - но можете идти и своим путем, через *MDF. Я же не настаиваю... Это лишь мой опыт.

Цитата(spbroma @ Dec 11 2014, 22:33) *
А насчёт виндрайвера, я пробовал то, о чем вы бы хотели мне сказать, но что-то там пошло не так. Не помню уже.

Это вряд ли, что именно то. Там ничего "не так" пойти не может ни при каких условиях.

Цитата(spbroma @ Dec 11 2014, 22:33) *
Какой тип устройства близок к реальности? Multimedia device подойдет?

Я туда загнал 0x118000xx (там 24 бита, а младшие 8 - это ревизия девайса) - получилось как-то типа контроллера сбора данных, или что-то в этом смысле. В общем, от этого зависит только то, как система показывает это устройство, пока не него не установлены драйверы. Надо выбрать что-то адекватное, чтобы юзер не пугался.
Go to the top of the page
 
+Quote Post
spbroma
сообщение Dec 11 2014, 20:29
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 23-07-14
Пользователь №: 82 337



Цитата
Я же не настаиваю... Это лишь мой опыт.

Я просто не знал о том, что есть другие пути и msdn тщательно скрывает их от неофитов.

Ссылки завтра изучу, благодарю.

Цитата
Это вряд ли, что именно то.

Тогда интересно, а в ЛС я почему-то не могу писать.

Цитата
В общем, от этого зависит только то, как система показывает это устройство, пока не него не установлены драйверы.

То есть, это не более чем формальность, вроде разрешения файла в ОС? sm.gif
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 11 2014, 20:48
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(spbroma @ Dec 11 2014, 23:29) *
Тогда интересно, а в ЛС я почему-то не могу писать.

Ну, в общем, загляните в реестр в HKLM\Софтварь\Микрософт\Виндовоз NT\КаррентВершн\Network - там три явно лишних, очень характерных значения есть. Вот их удалить, и время тикает с нуля...

Вы мало еще тут натусовали сообщений, чтобы ЛС открылись...

Цитата(spbroma @ Dec 11 2014, 23:29) *
То есть, это не более чем формальность, вроде разрешения файла в ОС? sm.gif

Да. Потом оно все равно попадет в класс, GUID которого вписан в INF-файле от драйвера. Но, пока драйвера нету, оно будет числится соответственно указанному в configuration space классу.

PS.
А в MSDN что либо найти без поллитры практически невозможно. Поэтому, ставьте WDK 7600, и открывайте его хелп - через меню "Пуск" - Windows Driver Kits->WDK...->Help->... - там все это есть, куда я Вас в MSDN отправил.
Go to the top of the page
 
+Quote Post
spbroma
сообщение Dec 12 2014, 08:28
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 23-07-14
Пользователь №: 82 337



Я правильно понимаю, что на данный момент есть три варианта написания драйверов под win:

1. WDF. Продвигаемый и развивающийся МС фреймворк. Более гибко и универсально.
2. WDM. То что было до WDF, не поддерживается и не развивается, но работает.
3. Legacy. То, что вы предлагаете, с использованием функций API ядра, тогда как WDF/WDM используют более высокоуровневые обертки?

Цитата
берите serial.sys (из 2600!!! не из 7600!), и собирайте из него свой драйвер

Вы имеете в виду, брать из примеров для WDK 2600? А где их взять, MS подсовывает 8.1, максимум, 7600.

И этот драйвер ком-порта, похоже, не совсем то, что вы имели в виду. Тут С++ исходники для сборки KMDF драйвера.



Go to the top of the page
 
+Quote Post
SM
сообщение Dec 12 2014, 13:53
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(spbroma @ Dec 12 2014, 11:28) *
Я правильно понимаю, что на данный момент есть три варианта написания драйверов под win:

1. WDF. Продвигаемый и развивающийся МС фреймворк. Более гибко и универсально.
2. WDM. То что было до WDF, не поддерживается и не развивается, но работает.
3. Legacy. То, что вы предлагаете, с использованием функций API ядра, тогда как WDF/WDM используют более высокоуровневые обертки?


WDM == Legacy - это одно и то же. Оно и поддерживается, и развивается, это же API ядра! Оно не может не развиваться, все происходит из него! Вот его и предлагаю. В доказательство, что оно развивается, приведу ссылку на MSDN:
http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx
вот Вам функция нативного API, которая "Available starting with Windows 8"

WDF же - это некое извращение-надстройка над WDM, которая делает вот что:
a) Увеличивает код драйвера в размере на порядок из-за линковки этой самой WDF
б) Уменьшает скорость/производительность драйвера.
в) Усложняет жизнь программисту тем, что еще и WDF изучать надо.
г) Делает невозможным работу драйвера под XP и 2000.
д) Возможно, делает еще что-то, о чем мне неизвестно

Поэтому, я не понимаю, зачем это нужно. Видимо, чтобы подсадить людей на самые последние винды, ибо под более старым все перестанет работать. А по сути - это WDF вызывает все те же WDM функции, представляя тупую прослойку неясного назначения. В общем, это мой принцип - драйвер и железка должен работать если не на 2000, то хотя бы на XP, и везде выше. (хотя бы потому, что сам работаю только под XP, ибо, к сожалению, все остальное, что старше, совершенно непотребно для работы (не бухгалтером и не секретуткой) сделано). WDK 7600, кстати, под XP все собирает как надо... WDK 8.1 почти не нужен, нужен только signtool от него.


Цитата(spbroma @ Dec 12 2014, 11:28) *
Вы имеете в виду, брать из примеров для WDK 2600? А где их взять, MS подсовывает 8.1, максимум, 7600.


Он, тогда, не WDK, а DDK назывался... Да, из него. Собственно, мне не жалко, цепляю его сода.... Да и ссылка, где взять DDK целиком, гуглится на раз, например, https://winworldpc.com/download/3D08C50C-18...E5-7054D21A8599

Драйвер собирается и в DDK 2600, и в WDK 7600 в любом из его build environment командой build. Но, чтобы он работал и в винXP, и в 7 и 8 - его надо собирать в WDK 7600.
Прикрепленные файлы
Прикрепленный файл  serial_src.rar ( 160.58 килобайт ) Кол-во скачиваний: 37
 
Go to the top of the page
 
+Quote Post
spbroma
сообщение Dec 12 2014, 15:27
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 23-07-14
Пользователь №: 82 337



Цитата
WDM == Legacy - это одно и то же.

Вот здесь в комментариях к статье наткнулся на фразу:
"Вижу стандартный legacy драйвер, а вот ни одного признака WDM не вижу."

Я не хочу, да и не в том положении, чтобы спорить и что-то доказывать, наоборот, хочу разобраться в терминологии и собрать всё в ясную картину мира.
Там же советуют WDF, но это я как понял дело вкуса и ваше мнение я услышал :)

Главное, что, как я понял, WDM ничем не хуже WDF и с помощью WDM можно сделать то же самое, только WDF -- фреймворк над WDM? Тогда получается, что в WDF проекте можно и не использовать WDF плюшки. Так?

Цитата
Собственно, мне не жалко, цепляю его сода.... Да и ссылка, где взять DDK целиком, гуглится на раз

Для этого надо знать что именно гуглить :) С ходу сложно уловить тонкости платформы, особенно если она менялась, переназывалась и вообще. Тем более ожидал увидеть его все-таки на официальном сайте. В общем, спасибо за помощь.



Цитата(SM @ Dec 12 2014, 16:53) *
А по сути - это WDF вызывает все те же WDM функции, представляя тупую прослойку неясного назначения. В общем, это мой принцип - драйвер и железка должен работать если не на 2000, то хотя бы на XP, и везде выше.

Кстати, вот что пишет Википедия:
"KMDF также доступен для скачивания для Windows XP и даже Windows 2000, в то время, как UMDF доступен начиная только с Windows XP."

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- spbroma   Передача данных с ПЛИС через PCIe на ПК   Dec 11 2014, 13:26
|- - spbroma   Ну хоть направление движения стало чуть яснее, еще...   Dec 11 2014, 21:10
|- - SM   Цитата(spbroma @ Dec 12 2014, 18:27) Вот ...   Dec 12 2014, 16:01
|- - spbroma   Сейчас почитал в разных местах, везде пишут, мол, ...   Dec 12 2014, 16:13
|- - SM   Цитата(spbroma @ Dec 12 2014, 19:13) Сейч...   Dec 12 2014, 16:18
|- - spbroma   Они обещают более простой интерфейс в WDF. Может, ...   Dec 15 2014, 08:18
|- - SM   Цитата(spbroma @ Dec 15 2014, 11:18) Они ...   Dec 15 2014, 11:06
|- - spbroma   Как я понял, UMDF исполняется не на уровне ядра, ч...   Dec 15 2014, 12:39
|- - SM   Цитата(spbroma @ Dec 15 2014, 15:39) Как ...   Dec 15 2014, 12:55
|- - spbroma   Вообще UMDF ругают. Мол, первая версия убога, а по...   Dec 15 2014, 13:03
|- - alexunder   Цитата(spbroma @ Dec 15 2014, 17:03) Хм, ...   Dec 15 2014, 14:57
|- - SM   Цитата(alexunder @ Dec 15 2014, 17:57) В ...   Dec 15 2014, 15:02
||- - alexunder   Цитата(SM @ Dec 15 2014, 19:02) Эта часть...   Dec 15 2014, 15:05
||- - spbroma   Цитата(alexunder)С вашего позволения, господа, доб...   Dec 15 2014, 15:57
|- - SM   Цитата(alexunder @ Dec 15 2014, 17:57) По...   Dec 15 2014, 15:26
- - RobFPGA   Приветствую! Цитата(spbroma @ Dec 11 201...   Dec 11 2014, 14:32
- - otv116   Я тоже столкнулся с проблемой создания своего драй...   Jan 22 2015, 14:04
- - habenskiy   Здравствуйте. Так же столкнулся с задачей реализац...   Jan 29 2015, 16:29
|- - spbroma   Добрый вечер, добро пожаловать в наше уютное обсу...   Jan 29 2015, 17:30
|- - SM   Цитата(spbroma @ Jan 29 2015, 20:30) А пе...   Jan 29 2015, 18:36
|- - spbroma   Спасибо Надо будет, все-таки собраться духом. Сей...   Jan 29 2015, 18:41
- - habenskiy   ЦитатаТестбенч, о котором вы говорите, как-то не п...   Jan 30 2015, 07:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01515 секунд с 7
ELECTRONIX ©2004-2016