|
PCI Express_DMA_SRam, проблемы конфигурации |
|
|
|
Jan 18 2010, 14:24
|
Частый гость
 
Группа: Участник
Сообщений: 106
Регистрация: 1-06-05
Из: Подольск
Пользователь №: 5 629

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

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
|
|
|
|
|
Jan 19 2010, 13:04
|
Частый гость
 
Группа: Участник
Сообщений: 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"); скорость чтения и записи заставляют желать лучшего. Поэтому и хочу построить приложение равноценное тому которое Альтера поставляет с платой (в котором формируются массивы дескрипторов и реализуется доступ к памяти посредством ДМА)
Причина редактирования: Оформление кода
|
|
|
|
|
Jan 19 2010, 14:40
|

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
|
|
|
|
|
Jan 19 2010, 15:05
|

Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 19 2010, 15:24
|

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
|
|
|
|
|
Jan 19 2010, 15:33
|

Частый гость
 
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 20 2010, 09:05
|
Местный
  
Группа: Свой
Сообщений: 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 контроллер получает указатель на новый блок из дексриптора без участия процессора. В первую очередь это нужно для обеспечения максимальной скорости обмена.
|
|
|
|
|
Jan 20 2010, 10:16
|

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
|
|
|
|
|
Jan 20 2010, 10:34
|

Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 20 2010, 13:54
|

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
|
|
|
|
|
Jan 20 2010, 14:03
|

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