bychkov_vladimir 0 18 января, 2010 Опубликовано 18 января, 2010 · Жалоба Добрый день ! Разрабатываю в Квартус систему взаимодействия PCI express , SRAM , DMA. (картинку взаимодействия прикрепляю). Под все это написан драйвер и создано тестовое ПО в Jungo Win Driver. После установки платы и подвязки драйвера в системных ресурсах вижу BAR0,1,2. Путем обращения к BAR0 пишу и читаю данные из памяти в Альтере. Теперь хочу реализовать канал DMA. И вопросы... куда писать параметры конфигурации DMA и где забирать данные (в соответствие с прикрепленной схемой)? Кто сталкивался с подобным проектом, взятым из описания на ядро ? Заранее благодарен ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 18 января, 2010 Опубликовано 18 января, 2010 (изменено) · Жалоба Добрый день ! ... Ну... теретически (абстрактно) так: в области какого-то из БАР-ов имеем 4 регистра (DMA_READ_BEGIN, DMA_READ_END, DMA_WRITE_BEGIN, DMA_WRITE_END) которые определяют области памяти хоста с которой работает PCI как мастер. Эти области выделяет драйвер. Ваш DMA контроллер должен взять эти адреса и на их основе управлять транзакциями на PCI. Можно обойтись, конечно без DMA_READ_END, DMA_WRITE_END, если конечно заранее известны объемы памяти. Вроде так, может кто дополнит. Изменено 19 января, 2010 пользователем Omen_13 Нарушение п.3.4 Правил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 18 января, 2010 Опубликовано 18 января, 2010 · Жалоба 2 Victor® я давненько в спецификацию на PCI Express не заглядывал, но вроде бы Endpoint в Express-е не может уже себя вести как мастер (ну всмысле шариться через PCI Express в областях памяти на ПК). Хотя могу быть неправ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serebr 0 18 января, 2010 Опубликовано 18 января, 2010 · Жалоба Kuzmi4 Инициировать запрос Endpoint может, значит может быть мастером. Иначе бы никакой девайс не мог в память ПК ничего положить, используя свой собственный DMA контроллер. Это если я правильно понял вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bychkov_vladimir 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба Принцип мне понятен. Не ясно как из набора функций входящи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"); скорость чтения и записи заставляют желать лучшего. Поэтому и хочу построить приложение равноценное тому которое Альтера поставляет с платой (в котором формируются массивы дескрипторов и реализуется доступ к памяти посредством ДМА) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serebr 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба По-хорошему, надо в плате иметь DMA контроллер, который умеет работать со списками заданий (scatter-gather DMA). Это когда в конце каждой DMA пачки в памяти ПК, предназначенной для пересылки, лежит список параметров для следующего DMA-обмена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба По-хорошему, надо в плате иметь 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serebr 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба Попробую подробнее описать, что обозначается словами 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба Попробую подробнее описать, что обозначается словами 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". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serebr 0 19 января, 2010 Опубликовано 19 января, 2010 · Жалоба Я думаю, что словом 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба ... Я не согласен просто с Вашим определением 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 контроллер получает указатель на новый блок из дексриптора без участия процессора. В первую очередь это нужно для обеспечения максимальной скорости обмена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Т.е. перекатывается по блокам данных, разбросанным в памяти ПК, и собирает в единую транзакцию общения с программой-драйвером. А перед этим Вы писали "... Это когда в конце каждой DMA пачки в памяти ПК, предназначенной для пересылки, лежит список параметров для следующего DMA-обмена." :-) Вообщем для себя я решил, что скатер - способ сбора данных из разных областей в одну транзакцию. А как эти области организованы - MemBased или RegBased - это уже из другой оперы, другой признак классификации. Естественно, что наиболее природно смотрится скатер с MemBased DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serebr 0 20 января, 2010 Опубликовано 20 января, 2010 (изменено) · Жалоба А перед этим Вы писали "... Это когда в конце каждой 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 все остальные дескрипторы из данной цепочки лежат во внешней памяти. Изменено 20 января, 2010 пользователем serebr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба Все они вполне однозначно используют термин scatter-gather для обозначения именно того варианта, о котором я говорил выше. О каком варианте из Ваших двух идет речь? Вы сами сначала определитесь - SG-DMA собирает ВСЕ данные и делает ОДНУ транзакцию или берет адрес из блока текущей транзакции для ПОСЛЕДУЮЩЕЙ. В первом случае - ОДНА транзакция, во втором НЕСКОЛЬКО. \читайте, пожалуйста внимательнее - специально выделяю ключевые слова\ -- успехов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serebr 0 20 января, 2010 Опубликовано 20 января, 2010 · Жалоба О каком варианте из Ваших двух идет речь? Вы сами сначала определитесь - SG-DMA собирает ВСЕ данные и делает ОДНУ транзакцию или берет адрес из блока текущей транзакции для ПОСЛЕДУЮЩЕЙ. В первом случае - ОДНА транзакция, во втором НЕСКОЛЬКО. \читайте, пожалуйста внимательнее - специально выделяю ключевые слова\ -- успехов В обоих случаях мой вариант один и тот же. 1. SG-DMA собирает все данные и делает одну транзакцию. Это означает, что SG-DMA собирает все данные из заданной цепочки пересылок и делает одну транзакцию в смысле общения с программой драйвером. Т.е. один раз толкается DMA-контроллер со стороны центрального процессора и один раз к центральному процессору приходит прерывание о завершении обслуживания всей цепочки пересылок блоков данных. 2. В конце каждого блока данных из текущей цепочки SG-DMA берёт декскриптор для пересылки следующего блока данных. Когда я говорил транзакция - имелась в виду транзакция общения контроллера DMA с программой-драйвером. Комбинацию слов "последующая транзакция" я не употреблял. Прошу не передёргивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться