Перейти к содержанию
    

Добрый день !

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

куда писать параметры конфигурации DMA и где забирать данные (в соответствие с прикрепленной схемой)? Кто сталкивался с подобным проектом, взятым из описания на ядро ?

 

Заранее благодарен !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день !

...

 

Ну... теретически (абстрактно) так:

в области какого-то из БАР-ов имеем 4 регистра (DMA_READ_BEGIN, DMA_READ_END, DMA_WRITE_BEGIN, DMA_WRITE_END)

которые определяют области памяти хоста с которой работает PCI как мастер. Эти области выделяет драйвер. Ваш DMA контроллер должен взять эти адреса

и на их основе управлять транзакциями на PCI. Можно обойтись, конечно без DMA_READ_END, DMA_WRITE_END, если конечно заранее известны объемы памяти.

 

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

Изменено пользователем Omen_13
Нарушение п.3.4 Правил

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Victor®

я давненько в спецификацию на PCI Express не заглядывал, но вроде бы Endpoint в Express-е не может уже себя вести как мастер (ну всмысле шариться через PCI Express в областях памяти на ПК).

Хотя могу быть неправ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Kuzmi4

Инициировать запрос Endpoint может, значит может быть мастером. Иначе бы никакой девайс не мог в память ПК ничего положить, используя свой собственный DMA контроллер. Это если я правильно понял вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Принцип мне понятен. Не ясно как из набора функций входящи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");

скорость чтения и записи заставляют желать лучшего. Поэтому и хочу построить приложение равноценное тому которое Альтера поставляет с платой (в котором формируются массивы дескрипторов и реализуется доступ к памяти посредством ДМА)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-хорошему, надо в плате иметь 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую подробнее описать, что обозначается словами 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую подробнее описать, что обозначается словами 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".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что словом 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

Я не согласен просто с Вашим определением 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 контроллер получает указатель на новый блок из дексриптора без участия процессора. В первую очередь это нужно для обеспечения максимальной скорости обмена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. перекатывается по блокам данных, разбросанным в памяти ПК, и собирает в единую транзакцию общения с программой-драйвером.

 

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

 

Вообщем для себя я решил, что скатер - способ сбора данных из разных областей в одну транзакцию.

А как эти области организованы - MemBased или RegBased - это уже из другой оперы, другой признак классификации.

Естественно, что наиболее природно смотрится скатер с MemBased DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Вообщем для себя я решил, что скатер - способ сбора данных из разных областей в одну транзакцию.

А как эти области организованы - 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все они вполне однозначно используют термин scatter-gather для обозначения именно того варианта, о котором я говорил выше.

 

О каком варианте из Ваших двух идет речь?

Вы сами сначала определитесь - SG-DMA собирает ВСЕ данные и делает ОДНУ транзакцию

или берет адрес из блока текущей транзакции для ПОСЛЕДУЮЩЕЙ. В первом случае - ОДНА

транзакция, во втором НЕСКОЛЬКО.

 

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

 

-- успехов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О каком варианте из Ваших двух идет речь?

Вы сами сначала определитесь - SG-DMA собирает ВСЕ данные и делает ОДНУ транзакцию

или берет адрес из блока текущей транзакции для ПОСЛЕДУЮЩЕЙ. В первом случае - ОДНА

транзакция, во втором НЕСКОЛЬКО.

 

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

 

-- успехов

В обоих случаях мой вариант один и тот же.

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

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

 

Когда я говорил транзакция - имелась в виду транзакция общения контроллера DMA с программой-драйвером. Комбинацию слов "последующая транзакция" я не употреблял. Прошу не передёргивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...