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

 
 
 
Reply to this topicStart new topic
> Вопрос по DMA
Arlleex
сообщение Feb 20 2015, 16:26
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Как-то не задавался особо этим вопросом, но все же интересно.
Вот DMA якобы работает независимо от процессора, и процессор может работать сам в свое удовольствие. Но при захвате контроллером DMA шины адреса и шины данных, о какой работе процессора может идти речь? Ведь ему в общем случае нужно ОЗУ для работы... А он отключился от этих шин, отдав их в распоряжение контроллеру DMA. Получается, что процессор стоит или выполняет какие-то операции простейшие, не требующие доступа к ОЗУ?

Сообщение отредактировал Arlleex - Feb 20 2015, 16:27
Go to the top of the page
 
+Quote Post
ASN
сообщение Feb 20 2015, 18:11
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



Arlleex
Для копирования ЦП блока данных необходимо (считаем, что система команд содержит автоинкремент/декремент):
1. Считать команду "чтение источника";
2. Считать слово (адресуемую единицу) источника в регистр;
3. Считать команду "запись приёмника";
4. Записать слово из регистра в приёмник;
5. Проверить на условие окончания цикла;
А ПДП делает это аппаратно за такт.
То есть даже в простейшем случае выигрыш значительный.
А если у ЦП есть кеш данных и инструкций (а он даже в современных ОМЭВМ есть), да многоканальный ПДП, да пакетный режим работы с арбитражем от периферии и ЦП к контроллеру ОЗУ?
Тут выигрыш на порядок.

Go to the top of the page
 
+Quote Post
Семин
сообщение Feb 20 2015, 18:14
Сообщение #3


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

Группа: Участник
Сообщений: 142
Регистрация: 27-04-12
Пользователь №: 71 608



Тут особенно парится не стоит. В классическом случае, процессор отдал команду на копирование блока данных и просто ждёт когда эта команда будет выполнена.
Так запись блока в память происходит намного быстрее, чем если бы процессор сам учавствовал в пересылке данных. Но в зависимости от системы, возможна параллельная
работа. Эт уже нужно конкретную систему изучать.
А вообще, если хочется понимать как всё там происходит, нужно изучать работу процессора, ПДП(DMA) и пр.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 21 2015, 03:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ASN @ Feb 21 2015, 00:11) *
Arlleex
Для копирования ЦП блока данных необходимо (считаем, что система команд содержит автоинкремент/декремент):
1. Считать команду "чтение источника";
2. Считать слово (адресуемую единицу) источника в регистр;
3. Считать команду "запись приёмника";
4. Записать слово из регистра в приёмник;
5. Проверить на условие окончания цикла;
А ПДП делает это аппаратно за такт.

И для какого это CPU Вы привели? Для AVR?
Даже в обычном Cortex-M имеются prefetch-буфера, тогда никаких "считать команду" не будет и вообще это может идти по другой шине. И копирования массивов могут выполняться по неск. слов за проход.
А ещё можно вспомнить про DSP, который всё описанное выполнит за такт. И даже неск. слов может скопировать за такт.
Go to the top of the page
 
+Quote Post
ASN
сообщение Feb 21 2015, 09:27
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



jcxz
Не только AVR, но и 8051, 8086, ARM, MIPS и другие.
И даже при гарвардской архитектуре внешние ОЗУ и ПЗУ могут находится на одной шине.
С DSP тоже не всё однозначно. Например, семейство С6000 имеет представителей с тактовой выше 1 ГГц, а семейство с командой rpt, достигло только 300 МГц.
И это при том, что у VLIWа плотность кода меньше, чем у С55 (то есть "засасывать" содержимое памяти команд ему надо больше).
Поскольку память медленнее, чем ЦП, а также блочная (пакетная) пересылка по шине быстрее, чем одиночное обращение, в С6000 используются кеши.
Содержимое кеша считывается строками (линиями) без участия процессора. А это фактически уже ПДП.
Go to the top of the page
 
+Quote Post
kan35
сообщение Mar 1 2015, 11:55
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



В кортексах для распараллеливания помогает матрица шин. Обратите внимание так же на разбиение SRAM на 2 и более блоков в современных MCU. Так же бывает память на ядре, так же код может крутиться в кэше большую часть времени (если кэш есть конечно). Если же и ДМА и процессор работают с одной шиной, то они ее делят, для STM32 в частности на сколько я помню по карусельному типу, конечно портят картину циклы переключения между мастерами, но есть такие примочки как burst передачи, когда гарантируется большая пропускная способность.

Поэтому не ленивые программисты смотрят сперва в reference manual и распределяют грамотно буферы и т п. Ну а все остальные программисты занимаются этим распределением когда не хватает ресурсов, я ближе ко вторым)))
Go to the top of the page
 
+Quote Post

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

 


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


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