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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> PCI в ПЛИС, не работает пакетная передача данных
nckkm
сообщение May 8 2012, 17:51
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-04-10
Пользователь №: 56 623



Цитата(Katrisha @ May 8 2012, 16:14) *
У меня memory space.
Что конкретно в конфигурации сейчас не скажу, смогу посмотреть позже.

Драйвер написан с помощью NUMEGA, и какую функцию использует нумега сложно сказать.

Когда драйвер был написан через WinDriver, там использовались функции WDC_ReadAddrBlock() - для чтения и WDC_WriteAddrBlock() - для записи.


еще одна фишка.
для отладки оборудования гораздо удобнее пользоваться linux.
вот как в виндовсе посмотреть configuration space устройств? это целое дело.
а в linux - консольная команда "sudo lspci -x"
в виндовс нужно писать драйвер для доступа к памяти.
в линукс можно легко обойтись без драйвера.
можно написать простую C-программу которая откроет файл
int fd = open("/dev/mem",O_RDWR|O_SYNC);
потом сделает mmap и сразу получает указатель на память устройства.
потом сам пишешь цикл for(int i=0; i<16; i++) который читает из устройства.
20 строчек С кода делают все что нужно для отладки.
в интернете полно примеров. только запускать с правами администратора.

Что хорошо в этом случае - точно знаешь "как" идет доступ к оборудованию.
А в случае с windriver или numega - кто его знает что там скрыто в его функциях врапперах.
Go to the top of the page
 
+Quote Post
Katrisha
сообщение May 9 2012, 05:45
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 19-06-08
Пользователь №: 38 430



Это можно будет попробовать, только, боюсь, linux не отыщится ни на одном из компов )
Завтра пойду на поиски )
Go to the top of the page
 
+Quote Post
Victor®
сообщение May 9 2012, 06:04
Сообщение #18


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Katrisha @ May 9 2012, 08:45) *
Это можно будет попробовать, только, боюсь, linux не отыщится ни на одном из компов )
Завтра пойду на поиски )


Поставьте PCIScope под Windows - будет Вам счастье.
Увидите всю PCI подсистему - и сможете читать\писать без драйвера.
Для отладки очень помогает.
Успехов!


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Katrisha
сообщение May 9 2012, 06:10
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 19-06-08
Пользователь №: 38 430



Сейчас у меня стоит HWDirect. Может писать/читать без драйвера. Но читает и пишет точно так же по одному dwowdу, эта программа - что то подобное?
Go to the top of the page
 
+Quote Post
Katrisha
сообщение Jul 31 2012, 14:09
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 19-06-08
Пользователь №: 38 430



А если реализовывать мастер, то как узнать адрес по которому надо записыватьинформацию?
Надо каким-то образом через приложение выделить память, узнать ее физический адрес и писать, или это можно реализовать как-то проще, т.к. пока что все попытки узнать физический адрес провалились sm.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 31 2012, 14:56
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Katrisha
Если хотите мастера на PCIE - нужен физический адрес, без него никак - нужно же одному знать куда ложить данные а другому откуда их выгребать потом.
На сколько я помню, там в виндовом MSDN-е есть хорошее описание к специальной ф-ции, даже в названии "DMA" у неё присутствует. Она по идее решит все ваши траблы с буфером, физ.адресом и так далее..
Go to the top of the page
 
+Quote Post
Flood
сообщение Jul 31 2012, 18:50
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(Katrisha @ Jul 31 2012, 18:09) *
А если реализовывать мастер, то как узнать адрес по которому надо записыватьинформацию?
Надо каким-то образом через приложение выделить память, узнать ее физический адрес и писать, или это можно реализовать как-то проще, т.к. пока что все попытки узнать физический адрес провалились sm.gif


Физический адрес - забота драйвера. Под Windows помочь в реализации могут как WinDriver, так и NuMega, хотя последняя уже устарела и лучше бы ею не пользоваться. Наилучший инструмент написания драйверов под Windows - родной Windows Driver Kit (WDK), но он же и самый сложный в освоении. На первых порах можно реализовать драйвер на WinDriver, затем переписать его на WDK.

Забота железа (PCI BM-а) - реализация Scatter-Gather DMA, т.к., в общем случае, непрерывный буфер в пользовательском пространстве памяти не является непрерывным в физической памяти. У WinDriver есть особые функции выделения памяти для DMA, не помню, возможно там есть опция выделения цельного физического куска. Но, в общем случае, такое предполагается невозможным, и нужно реализовывать SG DMA. Непрерывный буфер в пользовательском пространстве - это целый список адресов физических страниц памяти, который должен обрабатываться аппаратным DMA как цепочка заданий с общим завершением. Если железо не поддерживает SG DMA - можно обрабатывать этот список программно, анализируя завершение DMA после каждой страницы, но это резко отрицательно скажется на скорости.

Вот список основных проблем, с которым придется разбираться, реализуя DMA:
- трансляция адресов и реализация Scatter-Gather DMA;
- (опционально) выравнивание некратных адресов (в вашем случае, проще и лучше просто запретить работу с невыровненными адресами);
- обеспечение кэш-когерентности DMA буферов (т.е. выполнение сброса-очистки (flush и invalidate) соответствующих участков процессорного кэша в нужные моменты времени);
- обработка признаков завершения DMA-операции (обработка прерываний).

Что касается скорости, теоретические 133МБ/с на PCI 33Mhz 32bit не получатся никогда, но на цифру порядка 100 Мбайт/сек, наверное, можно рассчитывать. Пиковая пропускная способность, кроме особенностей Вашего железа, будет зависеть еще и от архитектуры ПК, в.т.ч. от того, насколько далеко (логически) от системной памяти находится PCI-слот. В современных ПК это неблизкий путь через несколько мостов, впрочем, на операцию записи (т.е. прием данных из внешнего BM-устройства в системную память) это влияет не так сильно, как на операцию чтения.
Go to the top of the page
 
+Quote Post
Katrisha
сообщение Aug 2 2012, 14:03
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 19-06-08
Пользователь №: 38 430



А в WinDriver-е нужно где-то указать что хочешь DMA?
Попыталась сегодня сделать там драйвер, но такого пункта не нашла
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 2 2012, 15:28
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(Kuzmi4 @ Jul 31 2012, 17:56) *
..На сколько я помню, там в виндовом MSDN-е есть хорошее описание к специальной ф-ции..

Вот собственно статейка
Там всё просто и разжёвано - для начала самое оно думаю
Go to the top of the page
 
+Quote Post
Flood
сообщение Aug 2 2012, 16:41
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(Katrisha @ Aug 2 2012, 18:03) *
А в WinDriver-е нужно где-то указать что хочешь DMA?
Попыталась сегодня сделать там драйвер, но такого пункта не нашла

Самые базовые вещи упоминаются тут:
http://www.jungo.com/st/support/tech_docs/td76.html

Подробности - в доках и примерах, устанавливаемых с WinDriver.
Там есть более-менее полное описание и готовые примеры работы с DMA.
Go to the top of the page
 
+Quote Post

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

 


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


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