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

 
 
> Передача данных с ПЛИС через 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
Ответов
habenskiy
сообщение Jan 29 2015, 16:29
Сообщение #2





Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819



Здравствуйте.
Так же столкнулся с задачей реализации PCI Express на плате Xilinx.
Как понимаю вы так же запускали пример контроллера памяти на основе Integrated Block for PCI Express. Разбирались ли вы что там к чему? Уже какой день не могу понять как и что в нем работает...
Как я понимаю на сам ip возлагается задача инициализации в системе, фильтрация запросов (пропускает только то, что относится к нашей плате, и не пропускает то, что относиться к другим устройствам подключеным по PCIe), а так же преобразование в пользовательский AXI-интерфейс. Так ли это?
Просто я запустил тестбенч от этого примера и вижу следующую картину:
1) сперва появляются данные на дифпарах pci_exp_rx и pci_exp_tx. На AXI - тишина. Предполагаю что в этот момент как раз и идет инициализация платы.
2) затем появляются данные на axis_rx_tdata, такого вида:
Код
01a0_010f_0400_0001 (04 - конфигурационное чтение?)
d538_d087_01a0_0064 (судя по axis_rx_tkeep=0f  d538_d087 нам безразлично)

01a0_000f_4400_0001 (44 - конфигурационная запись?)
ffff_ffff_01a0_0010
01a0_010f_0400_0001
8881_01bb_01a0_0010 (аналогично axis_rx_tkeep=0f)

01a0_020f_4400_0001
ffff_ffff_01a0_0014
01a0_030f_0400_0001
d151_f891_01a0_0014 (аналогично axis_rx_tkeep=0f)

так повторяется еще для адресов 18, 1с, 20, 24, 30 (если я правильно понял что в ffff_ffff_01a0_00[14] это адрес).
Затем начинается следующая группа данных:
01a0_000f_4400_0001
0000_0000_01a0_0010

01a0_010f_4400_0001
0000_0000_01a0_0014

так повторяется для тех же самых адресов и добавляется следющие:
01a0_0701_4400_0001
0300_0000_01a0_0004

01a0_0801_4400_0001
5f00_0000_01a0_0068

но при этом сигнал валидности axis_rx_tvalid в нуле.
3) вместе с данными появляется сигнал валидности:
Код
axis_rx_tdata:
01a0_090f_4000_0001 (40 - запись?)
0403_0201_01a0_0010

axis_rx_tdata:
01a0_0a0f_0000_0001 (00 - чтение?)
de03_7320_0000_0010 (tkeep = 0f)

axis_[b]tx[/b]_tdata:
01a0_0004_4a00_0001 (4a - завершение чтения?)
0403_0201_01a0_0a10


Вот и не могу понять что за данные передаются без сигнала валидности, что за данные [15:0] во-втором DW и что за данные в третьем DW на axis_tx_tdata...
Если разбирать по полям правильно ли я понимаю на примере:
01a0_0a0f_0000_0001
de03_7320_0000_0010

01a0 - Requester ID
0a - Tag
0f - BE
0000_0001 - атрибуты и порядковый номер
de03_7320 - данные
0000_0010 - адрес
?

Попробовали ли вы действовать по этому сценарию? Получилось ли что то?
Цитата
Сценарий:
1) Сделайте железку с Slave I/O портом, который зажигает светодиод.
2) Сделайте простейший драйвер для нее.
3) Добавьте в железо, например, таймер с прерыванием.
4) Сделайте в драйвере мигалку в прерывании.
5) Сделайте простой мастер - передачу в DMA 4096 байт данных в комп.
6) Сделайте драйвер для этого.
7) ... Ну тут уже сами всем все советовать будете ...
Go to the top of the page
 
+Quote Post
spbroma
сообщение Jan 29 2015, 17:30
Сообщение #3


Участник
*

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



Добрый вечер, добро пожаловать в наше уютное обсуждение:)

Во-первых, да, именно этот проект я и зашил.

Сперва я запустил тестовый драйвер от виндрайвера, убедился, что устройство определяется в системе, что в память можно записывать и считывать. То есть, работающая болванка есть. На этом этапе я решил отложить часть ПЛИС и заняться драйвером.

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

Судя по описанию API действительно, всё радужно и хорошо. Тем более, что пример собирается и работает, а код его не выглядит пугающе. Как я понимаю работу дальше, необходимо научиться создавать на плате прерывания и тут мы погружаемся в пучину корки.

Тестбенч, о котором вы говорите, как-то не попадался мне на глаза, так что ничего прокомментировать не могу. Пока с трудом понимаю, как можно использовать готовый пример для создания собственного проекта. Однако обрабатывать и генерить все сигналы вручную представляется ещё большим мраком и я немного в растерянности. Еще хотелось бы отойти от AXI, а то разбираться ещё и в нём надо.

Вообще, мне достаточно научиться выкидывать прерывания, по которым драйвер читал бы определенную область памяти и всё. А переход от PIO к DMA, видимо, возможен не скоро, так как вообще не понимаю, как сейчас его реализовать.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 29 2015, 18:36
Сообщение #4


Гуру
******

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



Цитата(spbroma @ Jan 29 2015, 20:30) *
А переход от PIO к DMA, видимо, возможен не скоро, так как вообще не понимаю, как сейчас его реализовать.

Если вернетесь на рельсы WDM - то смогу объяснить все пошагово, как и что. Так как у меня реализованы и прерывания, и бусмастер.
Go to the top of the page
 
+Quote Post
spbroma
сообщение Jan 29 2015, 18:41
Сообщение #5


Участник
*

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



Спасибо sm.gif
Надо будет, все-таки собраться духом. Сейчас я вообще временно на другую задачу переключился.

Но, я так понимаю, что вы говорите об обработке прерываний драйвером. А это меньшая из зол, как создавать эти прерывания - вот где проблема.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- spbroma   Передача данных с ПЛИС через PCIe на ПК   Dec 11 2014, 13:26
- - SM   Самое главное - с точки зрения драйвера нет разниц...   Dec 11 2014, 14:15
|- - spbroma   Спасибо за быстрый отклик :) SM, насчет стандарто...   Dec 11 2014, 15:20
|- - SM   Цитата(spbroma @ Dec 11 2014, 18:20) SM, ...   Dec 11 2014, 16:18
|- - spbroma   Спасибо за разъяснения! 7 пункт воодушевляет :...   Dec 11 2014, 19:33
|- - SM   Цитата(spbroma @ Dec 11 2014, 22:33) А чт...   Dec 11 2014, 19:53
|- - spbroma   ЦитатаЯ же не настаиваю... Это лишь мой опыт. Я пр...   Dec 11 2014, 20:29
|- - SM   Цитата(spbroma @ Dec 11 2014, 23:29) Тогд...   Dec 11 2014, 20:48
|- - spbroma   Ну хоть направление движения стало чуть яснее, еще...   Dec 11 2014, 21:10
|- - spbroma   Я правильно понимаю, что на данный момент есть три...   Dec 12 2014, 08:28
|- - SM   Цитата(spbroma @ Dec 12 2014, 11:28) Я пр...   Dec 12 2014, 13:53
|- - spbroma   ЦитатаWDM == Legacy - это одно и то же. Вот здесь ...   Dec 12 2014, 15:27
|- - 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 30 2015, 07:39


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 09:37
Рейтинг@Mail.ru


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