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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> PCI Express_DMA_SRam, проблемы конфигурации
bychkov_vladimir
сообщение Jan 18 2010, 14:24
Сообщение #1


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

Группа: Участник
Сообщений: 106
Регистрация: 1-06-05
Из: Подольск
Пользователь №: 5 629



Добрый день !
Разрабатываю в Квартус систему взаимодействия PCI express , SRAM , DMA. (картинку взаимодействия прикрепляю)
Прикрепленное изображение
. Под все это написан драйвер и создано тестовое ПО в Jungo Win Driver. После установки платы и подвязки драйвера в системных ресурсах вижу BAR0,1,2. Путем обращения к BAR0 пишу и читаю данные из памяти в Альтере. Теперь хочу реализовать канал DMA. И вопросы...
куда писать параметры конфигурации DMA и где забирать данные (в соответствие с прикрепленной схемой)? Кто сталкивался с подобным проектом, взятым из описания на ядро ?

Заранее благодарен !
Go to the top of the page
 
+Quote Post
Victor®
сообщение Jan 18 2010, 15:03
Сообщение #2


Lazy
******

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



Цитата(bychkov_vladimir @ Jan 18 2010, 17:24) *
Добрый день !
...


Ну... теретически (абстрактно) так:
в области какого-то из БАР-ов имеем 4 регистра (DMA_READ_BEGIN, DMA_READ_END, DMA_WRITE_BEGIN, DMA_WRITE_END)
которые определяют области памяти хоста с которой работает PCI как мастер. Эти области выделяет драйвер. Ваш DMA контроллер должен взять эти адреса
и на их основе управлять транзакциями на PCI. Можно обойтись, конечно без DMA_READ_END, DMA_WRITE_END, если конечно заранее известны объемы памяти.

Вроде так, может кто дополнит.

Сообщение отредактировал Omen_13 - Jan 19 2010, 20:27
Причина редактирования: Нарушение п.3.4 Правил


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 18 2010, 15:25
Сообщение #3


Гуру
******

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



2 Victor®
я давненько в спецификацию на PCI Express не заглядывал, но вроде бы Endpoint в Express-е не может уже себя вести как мастер (ну всмысле шариться через PCI Express в областях памяти на ПК).
Хотя могу быть неправ.
Go to the top of the page
 
+Quote Post
serebr
сообщение Jan 18 2010, 17:11
Сообщение #4


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

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



Kuzmi4
Инициировать запрос Endpoint может, значит может быть мастером. Иначе бы никакой девайс не мог в память ПК ничего положить, используя свой собственный DMA контроллер. Это если я правильно понял вопрос.
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
bychkov_vladimir
сообщение Jan 19 2010, 13:04
Сообщение #5


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

Группа: Участник
Сообщений: 106
Регистрация: 1-06-05
Из: Подольск
Пользователь №: 5 629



Принцип мне понятен. Не ясно как из набора функций входящиx в состав приложения для Jungo Win Driver (которое генерируется автоматически под различные компиляторы) сделать работоспособное приложение. Которое задает параметры ДМА и читает или пишет данные. (какие функции для этого использовать).
Приложение переработанное я набросал, но оно использует все функции которые есть в исходнике создаваемым Jungo.
Код
#include <condefs.h>
USEUNIT("../../pci_diag.c");
USEUNIT("../../pci_lib.c");
USEUNIT("../../../shared/diag_lib.c");
USEUNIT("../../../shared/wdc_diag_lib.c");
скорость чтения и записи заставляют желать лучшего. Поэтому и хочу построить приложение равноценное тому которое Альтера поставляет с платой (в котором формируются массивы дескрипторов и реализуется доступ к памяти посредством ДМА)
Причина редактирования: Оформление кода
Go to the top of the page
 
+Quote Post
serebr
сообщение Jan 19 2010, 13:30
Сообщение #6


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

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



По-хорошему, надо в плате иметь DMA контроллер, который умеет работать со списками заданий (scatter-gather DMA). Это когда в конце каждой DMA пачки в памяти ПК, предназначенной для пересылки, лежит список параметров для следующего DMA-обмена.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Jan 19 2010, 14:40
Сообщение #7


Lazy
******

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



Цитата(serebr @ Jan 19 2010, 17:30) *
По-хорошему, надо в плате иметь DMA контроллер, который умеет работать со списками заданий (scatter-gather DMA). Это когда в конце каждой DMA пачки в памяти ПК, предназначенной для пересылки, лежит список параметров для следующего DMA-обмена.


Что-то мне кажется, что то, что Вы описали - descriptor-based DMA.
А скатер - это когда несколько разных областей передаются в одном DMA трансфере.

Может кто поправит?

p/s
Кому интересно - смотрите
How to use Direct Memory Access (DMA), part 1-4
http://www.dspdesignline.com/TechSearch/Se...&Search.y=0


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
serebr
сообщение Jan 19 2010, 15:05
Сообщение #8


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

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



Попробую подробнее описать, что обозначается словами scatter-gather. При вычитывании блока памяти ПК, который был задан DMA контроллеру для пересылки, сразу после этого блока памяти в той же памяти ПК лежат параметры для следующего DMA обмена. Контроллер DMA грузит эти параметры в свои регистры и выполняет ещё один обмен. И так до тех пор, пока в очередном блоке параметров не встретится указание завершить цепочку DMA обменов.
В статье про DMA на википедии есть упоминание про scatter-gather и нет ни слова про descriptor.
http://en.wikipedia.org/wiki/Direct_memory_access
Descriptor-based - это более общее название, которое, в частности, может быть реализовано в разновидности linked list of descriptor, т.е. scatter-gather.
http://www.dspdesignline.com/howto/196901464
Go to the top of the page
 
+Quote Post
Victor®
сообщение Jan 19 2010, 15:24
Сообщение #9


Lazy
******

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



Цитата(serebr @ Jan 19 2010, 19:05) *
Попробую подробнее описать, что обозначается словами scatter-gather. При вычитывании блока памяти ПК, который был задан DMA контроллеру для пересылки, сразу после этого блока памяти в той же памяти ПК лежат параметры для следующего DMA обмена. Контроллер DMA грузит эти параметры в свои регистры и выполняет ещё один обмен. И так до тех пор, пока в очередном блоке параметров не встретится указание завершить цепочку DMA обменов.


Это мне как раз и понятно.
Я не согласен просто с Вашим определением SG DMA.
Scatter-gather DMA allows the transfer of data to and from multiple memory areas in a single DMA transaction.
(http://en.wikipedia.org/wiki/Direct_memory_access)

Думаю, что ключевое слово тут "single", что следует из самого названия "scatter-gather".
А то, что вы описали называется MemDMA (или Descriptor Based DMA), основное преимущество которого
рациональное использование памяти при изменяющихся объемах данных и возможность использования "дыр" в памяти.
В принципе, способ scatter-gather можно применить и к "Memоry Based DMA" и к "Register Based DMA".


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
serebr
сообщение Jan 19 2010, 15:33
Сообщение #10


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

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



Я думаю, что словом single выражается то обстоятельство, что толкается DMA контроллер один раз и прерывание выдаётся одно - по завершении всей цепочки. Слова scatter-gather я перевёл бы так: перекатывается и собирает. Т.е. перекатывается по блокам данных, разбросанным в памяти ПК, и собирает в единую транзакцию общения с программой-драйвером.
Ключевым же в понятии scatter-gather является наличие цепи, содержащей дескрипторы распределённые во внешней памяти. Register-based DMA - это минимальная реализация DMA-контроллера, когда в нём есть только внутренние регистры для хранения дескрипторов и задаются эти регистры только непосредственно программой-драйвером.

P.S. Цитата из scatter-gather DMA IP core от Альтеры:
Цитата
Comparison of SG-DMA Controller Core and DMA Controller Core

The SG-DMA controller core provides a significant performance enhancement over the previously available DMA controller core, which could only queue one transfer at a time. Using the DMA Controller core, a CPU had to wait for the transfer to complete before writing a new descriptor to the DMA slave port. Transfers to non-contiguous memory could not be linked; consequently, the CPU overhead was substantial for small transfers, degrading overall system performance. In contrast, the SG-DMA controller core reads a series of descriptors from memory that describe the required transactions and performs all of the transfers without additional intervention from the CPU.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jan 20 2010, 09:05
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(Victor® @ Jan 19 2010, 18:24) *
...
Я не согласен просто с Вашим определением SG DMA.
...
А то, что вы описали называется MemDMA (или Descriptor Based DMA), основное преимущество которого
...


Термин SCATTER-GATHER используют для своих DMA контроллеров такие фирмы как :
1. PLX Technology
2. Xilinx
3. Altera
4. Northwest Logic

Texas Instruments использует термин link-based DMA

Но суть одна - DMA контроллер получает указатель на новый блок из дексриптора без участия процессора. В первую очередь это нужно для обеспечения максимальной скорости обмена.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Jan 20 2010, 10:16
Сообщение #12


Lazy
******

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



Цитата(serebr @ Jan 19 2010, 18:33) *
Т.е. перекатывается по блокам данных, разбросанным в памяти ПК, и собирает в единую транзакцию общения с программой-драйвером.


А перед этим Вы писали "... Это когда в конце каждой DMA пачки в памяти ПК, предназначенной для пересылки, лежит список параметров для следующего DMA-обмена." :-)

Вообщем для себя я решил, что скатер - способ сбора данных из разных областей в одну транзакцию.
А как эти области организованы - MemBased или RegBased - это уже из другой оперы, другой признак классификации.
Естественно, что наиболее природно смотрится скатер с MemBased DMA.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
serebr
сообщение Jan 20 2010, 10:34
Сообщение #13


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

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



Цитата(Victor® @ Jan 20 2010, 16:16) *
А перед этим Вы писали "... Это когда в конце каждой DMA пачки в памяти ПК, предназначенной для пересылки, лежит список параметров для следующего DMA-обмена." :-)
А как по-другому назвать пересылку блока данных по загруженному из памяти дескриптору? Это и имелось в виду.

Цитата(Victor® @ Jan 20 2010, 16:16) *
Вообщем для себя я решил, что скатер - способ сбора данных из разных областей в одну транзакцию.
А как эти области организованы - MemBased или RegBased - это уже из другой оперы, другой признак классификации.
Естественно, что наиболее природно смотрится скатер с MemBased DMA.
К перечисленным выше
Цитата
1. PLX Technology
2. Xilinx
3. Altera
4. Northwest Logic
от себя в этот список добавлю ещё Lattice. Итого получим список вендоров, выпускающих 90% FPGA чипов в мире. Все они вполне однозначно используют термин scatter-gather для обозначения именно того варианта, о котором я говорил выше. Если хочется быть оригинальным и считать, что этот термин может означать что-то другое - на здоровье! Лишь бы у других людей, читающих эту тему, не сложилось превратного представления о scatter-gather.

P.S. Замечу лишь, что если DMA реализован на RegBased, то исчезает преимущество, которое указано в даташите Альтеры. А именно - возможность использовать регистры DMA контроллера центральным процессором сразу же после начала работы scatter-gather. Т.е. для scatter-gather можно иметь всего один комплект регистров для хранения декскриптора, т.к. после начала работы scatter-gather все остальные дескрипторы из данной цепочки лежат во внешней памяти.

Сообщение отредактировал serebr - Jan 20 2010, 10:44
Go to the top of the page
 
+Quote Post
Victor®
сообщение Jan 20 2010, 13:54
Сообщение #14


Lazy
******

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



Цитата(serebr @ Jan 20 2010, 13:34) *
Все они вполне однозначно используют термин scatter-gather для обозначения именно того варианта, о котором я говорил выше.


О каком варианте из Ваших двух идет речь?
Вы сами сначала определитесь - SG-DMA собирает ВСЕ данные и делает ОДНУ транзакцию
или берет адрес из блока текущей транзакции для ПОСЛЕДУЮЩЕЙ. В первом случае - ОДНА
транзакция, во втором НЕСКОЛЬКО.

\читайте, пожалуйста внимательнее - специально выделяю ключевые слова\

-- успехов


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
serebr
сообщение Jan 20 2010, 14:03
Сообщение #15


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

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



Цитата(Victor® @ Jan 20 2010, 19:54) *
О каком варианте из Ваших двух идет речь?
Вы сами сначала определитесь - SG-DMA собирает ВСЕ данные и делает ОДНУ транзакцию
или берет адрес из блока текущей транзакции для ПОСЛЕДУЮЩЕЙ. В первом случае - ОДНА
транзакция, во втором НЕСКОЛЬКО.

\читайте, пожалуйста внимательнее - специально выделяю ключевые слова\

-- успехов

В обоих случаях мой вариант один и тот же.
1. SG-DMA собирает все данные и делает одну транзакцию. Это означает, что SG-DMA собирает все данные из заданной цепочки пересылок и делает одну транзакцию в смысле общения с программой драйвером. Т.е. один раз толкается DMA-контроллер со стороны центрального процессора и один раз к центральному процессору приходит прерывание о завершении обслуживания всей цепочки пересылок блоков данных.
2. В конце каждого блока данных из текущей цепочки SG-DMA берёт декскриптор для пересылки следующего блока данных.

Когда я говорил транзакция - имелась в виду транзакция общения контроллера 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 Текстовая версия Сейчас: 19th July 2025 - 00:04
Рейтинг@Mail.ru


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