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

 
 
> PCI Express: Как правильно реализовать систему?
doom13
сообщение Aug 11 2015, 06:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
Подскажите, как правильно реализовать систему?
Есть плата HTG-V7-G3, принимает данные по 10G Ethernet и надо запихнуть эти данные в ПК под управлением Linux.

Пока добавил в проект FPGA ядро AXI Bridge for PCI Express Gen3 Subsystem, GPIO (повесил на светодиод), Timer (прерывание
от таймера завёл на PCIe bridge). Всё это повесил на PCIe:BAR0. Под Linux сделал простенький драйвер для PCI,
который умеет писать регистры периферии. На прерывание от PCIe (таймера) повесил обработчик который "моргает" GPIO.
Драйвер выделяет буфер памяти, адрес буфера записываю в регистры моста AXIBAR2PCIEBAR_0U, AXIBAR2PCIEBAR_0L -
могу писать данные с FPGA в буфер выделенный драйвером. Т.е. умею писать/читать данные и со стороны AXI и со стороны PCIe.

Посмотрел как работает символьный драйвер. Выделяется буфер памяти, его могу писать/читать из user space.
Счас нужно добавить DMA, хочу использовать ядро CDMA от Xilinx (уже посмотрел, как оно работает).

Не совсем понимаю, как лучше собрать все эти куски вместе? Кто должен выступать инициатором передачи?
Пока вижу такой путь. Система стартует и драйвер настраивает всю периферию. По заполнению буфера в FPGA на PCIe bridge идёт прерывание.
Драйвер видит, что пришло прерывание, и запускает CDMA. CDMA должен успеть перебросить данные в выделенный драйвером буфер.
В user space используются: fopen() - для доступа к файлу драйвера, fread() - для чтения данных из буфера драйвера, fclose() -
при завершении работы user application. fread() будет работать в пуле, пытаться прочитать нужный объём данных.
Возможно, что-то понимаю неправильно и есть верный путь реализации системы?

Нужно ли иметь доступ к управлению периферией в FPGA из user space или достаточно будет все настройки осуществлять из kernel space?
Видел, что есть ещё какие-то ioctl, но пока не разобрался, что это такое. Нужно ли оно для моего случая?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
карамболь
сообщение Aug 13 2015, 08:37
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 25-08-08
Из: Санкт-Петербург
Пользователь №: 39 813



спрашивайте если что
Go to the top of the page
 
+Quote Post
doom13
сообщение Aug 13 2015, 09:30
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(карамболь @ Aug 13 2015, 11:37) *
спрашивайте если что

Может быть Вы могли бы ответить на вопрос про прерывания (вот тут спрашивал, но так и не понял всех ньюансов)?
1) Как происходит назначение линии прерывания устройству?
2) Если это определяет операционка или BIOS, почему отличается номер в конфиг-спейсе устройства и в системе, когда прерывание работает?
3) Почему, когда поменял местами видеокарту и мою плату номера линий прерываний для данных устройств не изменились? Потому ли, что драйвер видеокарты стартует при запуске системы, а для моего устройства запускается уже позже?
4) Если для устройства (в железе) разрешаю MSI и задаю вектор из 4-х MSI (например), почему операционка видит, что устройство поддерживает 4 MSI, а выделяет под устройство только одну линиию? Если жёстко говорю выделить больше выкидывает ошибку.
Как тогда должен строиться драйвер, если устройство поддерживает 4 MSI, а система выделяет одну линию?
Go to the top of the page
 
+Quote Post
карамболь
сообщение Aug 13 2015, 12:17
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 25-08-08
Из: Санкт-Петербург
Пользователь №: 39 813



Цитата(doom13 @ Aug 13 2015, 13:30) *
Может быть Вы могли бы ответить на вопрос про прерывания (вот тут спрашивал, но так и не понял всех ньюансов)?
1) Как происходит назначение линии прерывания устройству?
2) Если это определяет операционка или BIOS, почему отличается номер в конфиг-спейсе устройства и в системе, когда прерывание работает?
3) Почему, когда поменял местами видеокарту и мою плату номера линий прерываний для данных устройств не изменились? Потому ли, что драйвер видеокарты стартует при запуске системы, а для моего устройства запускается уже позже?
4) Если для устройства (в железе) разрешаю MSI и задаю вектор из 4-х MSI (например), почему операционка видит, что устройство поддерживает 4 MSI, а выделяет под устройство только одну линиию? Если жёстко говорю выделить больше выкидывает ошибку.
Как тогда должен строиться драйвер, если устройство поддерживает 4 MSI, а система выделяет одну линию?

Не знаю как это реализовано на уровне Биос. А надо ли ? Я сначала разрешаю msi (pci_enable_msi) а уже потом request_irq и номер прерывания не меняется до перезагрузки драйвера, смотрю в /interrupts.
Go to the top of the page
 
+Quote Post
doom13
сообщение Aug 13 2015, 12:20
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(карамболь @ Aug 13 2015, 15:17) *
Не знаю как это реализовано на уровне Биос. А надо ли ? Я сначала разрешаю msi (pci_enable_msi) а уже потом request_irq и номер прерывания не меняется до перезагрузки драйвера, смотрю в /interrupts.

Так же сделано, но хотелось бы знать, как оно назначилось.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- doom13   PCI Express: Как правильно реализовать систему?   Aug 11 2015, 06:41
- - карамболь   скачайте xapp1052.zip (?) там уж сами разберетесь,...   Aug 11 2015, 10:41
|- - doom13   Цитата(карамболь @ Aug 11 2015, 13:41) ск...   Aug 11 2015, 11:24
|- - карамболь   Цитата(doom13 @ Aug 11 2015, 15:24) Спаси...   Aug 12 2015, 06:38
- - doom13   Пока читаю xapp1052 и разбираюсь с содержимым архи...   Aug 12 2015, 06:39
- - doom13   Посмотрел пример драйвера и приложения в xapp1052....   Aug 14 2015, 06:59
|- - карамболь   Цитата(doom13 @ Aug 14 2015, 10:59) Посмо...   Aug 14 2015, 10:55
|- - doom13   Цитата(карамболь @ Aug 14 2015, 13:55) Др...   Aug 14 2015, 11:24
- - карамболь   3. считали данные, изменили позицию в буфере 4. Юз...   Aug 14 2015, 11:34
|- - doom13   Спасибо, понял - надо ещё читать книгу. Тут хочу ...   Aug 14 2015, 11:55
- - карамболь   читайте про отложенные процессы, семафоры. Метод p...   Aug 14 2015, 13:02
- - doom13   Цитата(карамболь @ Aug 14 2015, 16:02) чи...   Aug 14 2015, 18:55
- - карамболь   Цитата(doom13 @ Aug 14 2015, 22:55) Спаси...   Aug 15 2015, 07:36


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:03
Рейтинг@Mail.ru


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