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

 
 
> PCI в ПЛИС, не работает пакетная передача данных
Katrisha
сообщение May 3 2012, 18:08
Сообщение #1


Участник
*

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



Здравствуйте.
мне необходимо реализовать интерфейс PCI в ПЛИС. Все вроде как работает, но очень медленно. Передается только по одному слову. Не подскажете ли, в чем может быть причина, что PCI не читает более одного слова за одну передачу?
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Katrisha
сообщение Jul 31 2012, 14:09
Сообщение #2


Участник
*

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



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


Знающий
****

Группа: Свой
Сообщений: 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   PCI в ПЛИС   May 3 2012, 18:08
- - eugen_pcad_ru   1 Почитайте про интерфейс (хотя бы в википедии), т...   May 3 2012, 18:22
- - Boris_TS   Опишите более подробно: 1. Какой именно PCI вы реа...   May 3 2012, 18:26
- - Katrisha   Цитата(eugen_pcad_ru @ May 3 2012, 22:22)...   May 4 2012, 14:29
|- - Boris_TS   Цитата(Katrisha @ May 4 2012, 18:29) Согл...   May 4 2012, 15:35
- - vitan   Еще дешевый способ - попробовать использовать DMA....   May 4 2012, 17:35
- - Katrisha   На разных РС пробовалось, везде одно и тоже, где т...   May 4 2012, 18:03
|- - Boris_TS   Цитата(Katrisha @ May 4 2012, 22:03) На р...   May 4 2012, 18:55
|- - XVR   Цитата(Katrisha @ May 4 2012, 22:03) Хоте...   May 7 2012, 07:47
- - Katrisha   Цитата(XVR @ May 7 2012, 11:47) Не умеет ...   May 7 2012, 08:12
|- - Джеймс   Цитата(Katrisha @ May 7 2012, 12:12) если...   May 7 2012, 13:09
- - nckkm   скажу по своему опыту (правда было давно). при исп...   May 7 2012, 17:20
- - Katrisha   Сигнал STOP не появляется. За frame передается оди...   May 8 2012, 12:11
|- - nckkm   Цитата(Katrisha @ May 8 2012, 15:11) Сигн...   May 8 2012, 13:04
- - Katrisha   У меня memory space. Что конкретно в конфигурации ...   May 8 2012, 13:14
|- - nckkm   Цитата(Katrisha @ May 8 2012, 16:14) У ме...   May 8 2012, 17:51
- - Katrisha   Это можно будет попробовать, только, боюсь, linux ...   May 9 2012, 05:45
|- - Victor®   Цитата(Katrisha @ May 9 2012, 08:45) Это ...   May 9 2012, 06:04
- - Katrisha   Сейчас у меня стоит HWDirect. Может писать/читать ...   May 9 2012, 06:10
- - Kuzmi4   2 Katrisha Если хотите мастера на PCIE - нужен физ...   Jul 31 2012, 14:56
|- - Kuzmi4   Цитата(Kuzmi4 @ Jul 31 2012, 17:56) ..На ...   Aug 2 2012, 15:28
- - Katrisha   А в WinDriver-е нужно где-то указать что хочешь DM...   Aug 2 2012, 14:03
- - Flood   Цитата(Katrisha @ Aug 2 2012, 18:03) А в ...   Aug 2 2012, 16:41


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

 


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


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