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

 
 
 
Reply to this topicStart new topic
> SGDMA в двумерном режиме, Как то можно извернуться?
alexPec
сообщение May 26 2011, 19:36
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день. Вот такая задача, можно ли такое сделать с помощью ДМА:

Нужно отправлять поток в стрим из памяти, но не линейно а так: есть общий массив, который нужно выкинуть в дма. Допустим длина 20000 байт. В этом массиве будет целое число блоков, в данном случае 4. Располагаются так: байты с индексами 0-4999 это 1 блок, 5000-9999 это 2 блок, 10000-14999 это 3 блок, 15000-19999 это 4 блок. Так вот надо байты выкидывать не попорядку, сначала первые байты всех блоков, затем вторые, затем третие и т.д. Т.е. в таком порядке (указываю индексы батов в исходном массиве):
0,5000,10000,15000,1,50001,10001,15001,2,5002,10002,...,4999,9999,14999,19999.
Вроде как очевидное решение - создать еще один массив и туда переупорядочить байты, чтоб дма попорядку выкидывал, но ниос уже это не успеет сделать. Забивать массив изначально в другом порядке тоже не получается. Может поскажет кто как быть?

Спасибо!
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение May 27 2011, 00:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



по-моему самый простой вариант - сделать свой компонент DMA, который сможет несколько дескрипторов параллельно обрабатывать и распределять поток на всех. а какого типа память? если SDRAM, то скорость сильно просядет
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 27 2011, 05:57
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ May 27 2011, 04:56) *
по-моему самый простой вариант - сделать свой компонент DMA, который сможет несколько дескрипторов параллельно обрабатывать и распределять поток на всех. а какого типа память? если SDRAM, то скорость сильно просядет

Не, не SDRAM, обычная аснхронная, 100Мгц. Вообще так и думал, что нельзя так сгдма завести, просто спросил, а вдруг да кто исхитрился уже такое сделать... biggrin.gif
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение May 27 2011, 07:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(alexPec @ May 27 2011, 12:57) *
Вообще так и думал, что нельзя так сгдма завести, просто спросил, а вдруг да кто исхитрился уже такое сделать... biggrin.gif

ну, при желании можно. но не будет никакой экономии ни по ресурсам, ни по времени. лучше нормальный компонент наваять, параметризуемый.
Go to the top of the page
 
+Quote Post
murmel1
сообщение May 28 2011, 11:31
Сообщение #5


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

Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331



Пусть DMA выкидывает адреса чтения подряд. Дальше адрес пропустить через компонент, который будет переставлять биты (если блоки длиной 2^N), либо пересчитывать.
Т.е. на выходе DMA адреса:
0
1
2
3
4
5
6
7
8
...
А на входе контроллера памяти:
0
5 000
10 000
15 000
1
5 001
10 001
15 001
...
+++: Стандартный DMA и несложный компонент.
Go to the top of the page
 
+Quote Post
alexPec
сообщение May 28 2011, 19:14
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата
Пусть DMA выкидывает адреса чтения подряд. Дальше адрес пропустить через компонент, который будет переставлять биты (если блоки длиной 2^N), либо пересчитывать.

Да, тоже вариант. Спасибо
Go to the top of the page
 
+Quote Post

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

 


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


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