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

Группа: Участник
Сообщений: 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. Что почитать?
Буду благодарен за любой совет.
|
|
|
|
|
 |
Ответов
|
Jan 29 2015, 16:29
|
Группа: Участник
Сообщений: 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) ... Ну тут уже сами всем все советовать будете ...
|
|
|
|
|
Jan 29 2015, 17:30
|
Участник

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

|
Добрый вечер, добро пожаловать в наше уютное обсуждение:)
Во-первых, да, именно этот проект я и зашил.
Сперва я запустил тестовый драйвер от виндрайвера, убедился, что устройство определяется в системе, что в память можно записывать и считывать. То есть, работающая болванка есть. На этом этапе я решил отложить часть ПЛИС и заняться драйвером.
Как можно заметить по другим моим топикам на этом форуме, я пошел против системы и SM-а :) и соблазнился на рекламируемые прелести WDF. На данный момент это закончилось тем, что отладчик подключается к рабочему компьютеру только когда моё устройство не подключено, что странно и бесполезно. На этой ноте я отчаялся и решил посмотреть и вовсе в сторону Виндрайвера и разобраться в том, что же такого удобного и классного у них есть.
Судя по описанию API действительно, всё радужно и хорошо. Тем более, что пример собирается и работает, а код его не выглядит пугающе. Как я понимаю работу дальше, необходимо научиться создавать на плате прерывания и тут мы погружаемся в пучину корки.
Тестбенч, о котором вы говорите, как-то не попадался мне на глаза, так что ничего прокомментировать не могу. Пока с трудом понимаю, как можно использовать готовый пример для создания собственного проекта. Однако обрабатывать и генерить все сигналы вручную представляется ещё большим мраком и я немного в растерянности. Еще хотелось бы отойти от AXI, а то разбираться ещё и в нём надо.
Вообще, мне достаточно научиться выкидывать прерывания, по которым драйвер читал бы определенную область памяти и всё. А переход от PIO к DMA, видимо, возможен не скоро, так как вообще не понимаю, как сейчас его реализовать.
|
|
|
|
|
Jan 29 2015, 18:41
|
Участник

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

|
Спасибо  Надо будет, все-таки собраться духом. Сейчас я вообще временно на другую задачу переключился. Но, я так понимаю, что вы говорите об обработке прерываний драйвером. А это меньшая из зол, как создавать эти прерывания - вот где проблема.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|