Techno11 0 30 июня, 2011 Опубликовано 30 июня, 2011 · Жалоба Уважаемые форумчане, буду признателен за помощь. Ведется разработка устройства на базе FPFA Virtex5. Необходимо реализовать взаимодействие данного устройства с ПК через PCI Express. ПК опознает устройство как Memory Controller и с помощью утилиты PCI Tree можно обращаться к памяти, отображаемую через BAR. Само устройство (PowerPC на плате) выполняет некоторый код по обработке входных данных, а также должно выдавать результат вычислений. У меня следующие вопросы: 1. Как "пробудить" PowerPC по приему данных от шины PCIe? 2. Как уведомить ПК о готовности результатов вычислений? В дальнейшем предполагается использовать DMA. Если можете, подскажите шаблон драйвера или что-то совсем простое, но готовое для платформы WinXP 32 bit. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elector 0 1 июля, 2011 Опубликовано 1 июля, 2011 (изменено) · Жалоба Подключите ваш PowerPC к pciexpress контроллеру по интерфейсу Lokal Link. По DMA гляньте XAPP1052 и XAPP859, так же полезно глянуть ссылку http://www.xilinx.com/member/pci_exp_kit_ref/ Изменено 1 июля, 2011 пользователем ИльяКи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Techno11 0 3 июля, 2011 Опубликовано 3 июля, 2011 · Жалоба Подключите ваш PowerPC к pciexpress контроллеру по интерфейсу Lokal Link. По DMA гляньте XAPP1052 и XAPP859, так же полезно глянуть ссылку http://www.xilinx.com/member/pci_exp_kit_ref/ PowerPC подключен к шине PLB, к которой также подключен блок PLBv46 to PCI Full Bridge. У моста установлен флаг Bus Master Enable, чтобы устройство могло выступать в роли мастера на шине PCI Express. Сконфигурированы 2 BAR. Один настроен так, что адресует 4 КБ BRAM. Второй предоставляет прямой доступ к регистрам блока Central DMA (так же на шине PLB). Но вопрос о "пробуждении" PowerPC по завершению передачи данных от ПК еще актуален. Также интересен вопрос как уведомить ПК о готовности результатов вычислений. Возможно через механизм MSI, но опыта не хватает. Подскажите, если кто знает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 3 июля, 2011 Опубликовано 3 июля, 2011 · Жалоба 2 Techno11 касательно также интересен вопрос как уведомить ПК о готовности результатов вычисленийпрерывания, бывают MSI и легаси. Там главное читайте доку на корку к вашему V5 - и всё будет работать. Примеры гляньте которые вам там приводили... касательно "пробуждении" PowerPC по завершению передачи данных от ПКчто именно вы подразумеваете под пробуждением ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Techno11 0 4 июля, 2011 Опубликовано 4 июля, 2011 · Жалоба что именно вы подразумеваете под пробуждением ? Извиняюсь за вольную трактовку. Каким образом уведомить PowerPC о появлении в памяти устройства новых данных, чтобы он мог начать их обработку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 4 июля, 2011 Опубликовано 4 июля, 2011 · Жалоба 2 Techno11 а прерывание (телепатируя вопрос: от модуля-источника на шине, в вашем случае PLB, её же средствами к процу) чем не подходит ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 4 июля, 2011 Опубликовано 4 июля, 2011 · Жалоба касательнопрерывания, бывают MSI и легаси. Там главное читайте доку на корку к вашему V5 - и всё будет работать. Примеры гляньте которые вам там приводили... Касательно MSI. Если не ошибаюсь, XP их не поддерживает. Да и линукс по умолчанию тоже, надо поддержку МСИ включать. А у микрософта что то в новых версиях(виста,7) что то с этим изменилось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 4 июля, 2011 Опубликовано 4 июля, 2011 · Жалоба 2 disel на XP не проверял, проверял на WinServer2008, SUSE, CentOs, Solaris - MSI нормально работают, так по крайней мере программисты говорят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Techno11 0 4 июля, 2011 Опубликовано 4 июля, 2011 · Жалоба 2 Techno11 а прерывание (телепатируя вопрос: от модуля-источника на шине, в вашем случае PLB, её же средствами к процу) чем не подходит ? Если использовать блок CentralDMA, то он может генерировать прерывание по окончанию передачи. Если же BAR адресовать прямо на ОЗУ, то кто будет генерировать прерывание? Если с записью в устройство стало ясно, то теперь нужно получить результаты. Заранее простите за малые познания и заблуждения про драйверы. Несколько приложений должны параллельно использовать устройство, чтобы практически в любой момент времени к нему был доступ. С помощью драйвера отправляют команды с данными в него. Что дальше? Устройство произвело вычисления и сгенерировало прерывание. Драйвер выделил буфер для приема результатов. Но как драйверу сообщить приложению о приеме данных и какому именно приложению? Есть вариант с постоянным опросом результатов каждым приложением, но он кажется менее эффективным. Может ли драйвер вести у себя таблицу обратившихся к нему процессов и использовать, например именованные события, чтобы сообщить обратившимся процессам о готовности результатов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Если же BAR адресовать прямо на ОЗУ, то кто будет генерировать прерывание? Никто, нужно добавлять свою логику. Несколько приложений должны параллельно использовать устройство, чтобы практически в любой момент времени к нему был доступ. С помощью драйвера отправляют команды с данными в него....Устройство произвело вычисления и сгенерировало прерывание. Это вы не ускоритель для софтового райда ваяете ? Но как драйверу сообщить приложению о приеме данных и какому именно приложению? Прерыванием, тут поможет MSI, но если у вас очень много приложений, тогда нужно вводить внутренний ID регистр, читая который после получения прерывания, манагер обмена данными поймёт что именно вызвало прерывание - другими словами кому оно адресовано. Может ли драйвер вести у себя таблицу обратившихся к нему процессов и использовать, например именованные события, чтобы сообщить обратившимся процессам о готовности результатов? Может, но довольно часто так получается что быстреее это сделать средствами FPGA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Techno11 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Это вы не ускоритель для софтового райда ваяете ? Нет, но в теме аппаратного ускорения определенных вычислений. Прерыванием, тут поможет MSI, но если у вас очень много приложений, тогда нужно вводить внутренний ID регистр, читая который после получения прерывания, манагер обмена данными поймёт что именно вызвало прерывание - другими словами кому оно адресовано. Приложений не так много. Под менеджером обмена данными вы имеете в виду какое-то приложение посредник между пользовательскими приложениями и драйвером? Честно говоря так и не ясен механизм отправки данных из устройства в какое-то одно конкретное приложение, если устройство является инициатором. Не вижу связи вверх от драйвера к приложению Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Несколько приложений должны параллельно использовать устройство, чтобы практически в любой момент времени к нему был доступ. С помощью драйвера отправляют команды с данными в него. Что дальше? Устройство произвело вычисления и сгенерировало прерывание. Драйвер выделил буфер для приема результатов. Но как драйверу сообщить приложению о приеме данных и какому именно приложению?Каждое приложение должно открыть ваш драйвер и зарегистрировать в нем себя (с помощью специального IOCTL, который вы должны написать в драйвере). При регистрации драйвер создает у себя Event и отдает его HANDLE приложению. Там же создается управляющий блок (со всеми данными, уникальными для приложения), в него прописывается уникальный ID. Этот ID в дальнейшем используется в обменах с FPGA. Когда FPGA присылает данные для какого то ID, драйвер взводит Event из управляющего блока, соответствующего этому ID. Приложение же тупо ждет на Event'е Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Techno11 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Каждое приложение должно открыть ваш драйвер и зарегистрировать в нем себя (с помощью специального IOCTL, который вы должны написать в драйвере). При регистрации драйвер создает у себя Event и отдает его HANDLE приложению. Там же создается управляющий блок (со всеми данными, уникальными для приложения), в него прописывается уникальный ID. Этот ID в дальнейшем используется в обменах с FPGA. Когда FPGA присылает данные для какого то ID, драйвер взводит Event из управляющего блока, соответствующего этому ID. Приложение же тупо ждет на Event'е Огромное спасибо. Буду признателен, если посоветуете литературу соответствующую вашему посту Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Буду признателен, если посоветуете литературу соответствующую вашему постуУвы, кроме MSDN, DDK/WDK и сэмплов из них ничего в голову не приходит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться