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

 
 
> SG-DMA в режиме Stream To Memoy
Acvarif
сообщение Aug 25 2012, 07:49
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Есть необходимость перегружать кучу байт из пользовательской двухпортовой памяти в SDRAM+NIOS. Для этой цели в пользовательсой логике имеются импульсы периодом ~ 100 нс по фронтам которых предполагается организовать пересылку данных (16 бит) в SDRAM. Далее все компонуется и по Ethernet должно идти далее в комп.
Для этого попытался сворганить в SOPC SG-DMA (Stream To Memory) + Avalon Straming Source. Получил непонятные ошибки. Разрядность нин в SG-DMA и Avalon Straming Source поставил 16 бит.
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

Подскажите пожалуйста как правильно. Пробовал по разному (менял оличество бит источника приемника и др.) Не получается. Помог бы простой пример реализации в SOPC подобной схемы.
Нужен ли для этой цели еще и FIFO? Или можно будет обойтись только Avalon Straming Source+пользовательская логика полагаясь на внутреннюю FIFO SG-DMA?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Копейкин
сообщение Jan 30 2013, 10:22
Сообщение #2


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

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Прошу подсказать, где ошибся...
Использую аналогичный SG-DMA stream-to-memory.
QII 9.1sp2
Идея: SG-DMA пишет постоянно из потока в память, дескрипторы (16 шт) закольцованы и нужны прерывания каждые 8 пройденых дескрипторов.
Дескрипторы указывают на память, выделенную под область данных в отправляемых далее пакетах. Т.е. память не сплошная, поэтому 16 дескрипторов, по числу пакетов.
Пока 8 заполняются, 8 передаются. Такой вот пинг-понг...
CODE

int AD7760_prepare_sgdma()
{
ad7760_sgdma = alt_avalon_sgdma_open(SGDMA_1_NAME);

// check
if( ad7760_sgdma == NULL)
{
//TRACE_STR("--> Failed to open SG_DMA_1 Stream-to-memory!\r\n");
return (-1);
}

alt_avalon_sgdma_register_callback(
ad7760_sgdma,
AD7760_callback,
(ALTERA_AVALON_SGDMA_CONTROL_PARK_MSK |
ALTERA_AVALON_SGDMA_CONTROL_IE_GLOBAL_MSK |
ALTERA_AVALON_SGDMA_CONTROL_IE_MAX_DESC_PROCESSED_MSK |
(8<<ALTERA_AVALON_SGDMA_CONTROL_MAX_DESC_PROCESSED_OFST) ),
NULL);

return 0;
}

Дескрипторы:
CODE

void AD7760_prepare_loop_descr_chain()
{
int i;

for( i = 0; i<16; i++ )
{
alt_avalon_sgdma_construct_stream_to_mem_desc(
adchi_desc[i],
(i < 15) ? adchi_desc[i+1] : adchi_desc[0],
(alt_u32*)pFastPacket[i]->data, // Area in external SRAM
FAST_PACKET_BODY_SIZE_BYTES, // in bytes
0 ); // non-fixed write address
}

adchi_desc[0]->control |= ALTERA_AVALON_SGDMA_DESCRIPTOR_CONTROL_OWNED_BY_HW_MSK; // Last-first descriptor
}

Стартуем
CODE

void AD7760_start_sgdma()
{
alt_avalon_sgdma_do_async_transfer( ad7760_sgdma, adchi_desc[0] );
}


Функция AD7760_callback() только устанавливает флаги для главного цикла приложения.
Проблема в том, что прерывание приходит, но (судя по времени) когда всё кольцо из 16 дескрипторов выполнится 16 раз.

Сейчас переделал под обработку одного выполненного дескриптора и процессором отсчитываю 8 прерываний, всё работает но некрасиво, самому не нравится.
Где промахнулся,а ???
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Jan 30 2013, 15:05
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(Копейкин @ Jan 30 2013, 14:22) *
Дескрипторы указывают на память, выделенную под область данных в отправляемых далее пакетах. Т.е. память не сплошная, поэтому 16 дескрипторов, по числу пакетов.
Пока 8 заполняются, 8 передаются. Такой вот пинг-понг...

Если далее отправляются Ethernet пакеты то не нужен пинг-понг и прерывания. Нужно организовать всего-лишь задержку начала передачи пакетов после начала заполнения памяти, тоесть после выполнения команды
Код
alt_avalon_sgdma_do_async_transfer( ad7760_sgdma, adchi_desc[0] );

Все будет крутиться почти одновременно. Единственное, скорость заполнения должна быть в районе скорости передачи. Если это Ethernet 100Base то скорость заполнения должна быть примерно такая-же

Сообщение отредактировал Acvarif - Jan 30 2013, 15:05
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Acvarif   SG-DMA в режиме Stream To Memoy   Aug 25 2012, 07:49
- - barabek   Прошу прощенья, немного не в тему. А Вам точно нуж...   Aug 26 2012, 22:48
|- - Acvarif   Цитата(barabek @ Aug 27 2012, 01:48) Прош...   Aug 27 2012, 09:23
|- - ISK   Цитата(Acvarif @ Aug 27 2012, 12:23) У ме...   Aug 28 2012, 06:11
|- - Acvarif   Цитата(ISK @ Aug 28 2012, 09:11) У вас зд...   Aug 28 2012, 10:59
|- - alexPec   Цитата(Acvarif @ Aug 28 2012, 14:59) Сраз...   Aug 28 2012, 12:09
|- - Acvarif   Цитата(alexPec @ Aug 28 2012, 15:09) Ну н...   Aug 28 2012, 12:31
|- - alexPec   Цитата(Acvarif @ Aug 28 2012, 16:31) Да, ...   Aug 28 2012, 19:11
|- - Acvarif   Спасибо. Попробую разобраться.   Aug 29 2012, 07:45
|- - Acvarif   Собрал систему с SGDMA, но без FIFO в надежде на в...   Sep 2 2012, 15:46
|- - alexPec   В мануале же все написано. Реди - это сигнал готов...   Sep 3 2012, 05:56
|- - Acvarif   Цитата(alexPec @ Sep 3 2012, 08:56) В ман...   Sep 3 2012, 07:46
|- - ISK   ЦитатаПо приходу ready пользовательская логика выс...   Sep 3 2012, 11:00
|- - alexPec   Если есть фифо - то 100нс конечно не проблема ( пр...   Sep 3 2012, 17:12
|- - Acvarif   ЦитатаДанные должны подаваться на шину вместе с си...   Sep 4 2012, 06:14
|- - Acvarif   Виноват. Ошибка вышла. Попутал sgdma и dma. Пытаюс...   Sep 5 2012, 07:39
|- - alexPec   Штатными функциями все делается. (с небольшим допи...   Sep 5 2012, 08:20
|- - Acvarif   Спасибо. У Вас в коде несколько дисрипторов, тое...   Sep 5 2012, 12:09
|- - alexPec   Цитата(Acvarif @ Sep 5 2012, 16:09) Спаси...   Sep 6 2012, 05:03
|- - Acvarif   Цитата(alexPec @ Sep 6 2012, 08:03) Буфер...   Sep 7 2012, 13:21
|- - alexPec   Код не смотрел, но первое что в голову приходит: ...   Sep 7 2012, 14:15
|- - Acvarif   Цитата(alexPec @ Sep 7 2012, 17:15) Код н...   Sep 7 2012, 15:47
|- - alexPec   ЦитатаСудя по диаграмме от SOPC в моем случае 16 б...   Sep 7 2012, 19:46
|- - Acvarif   Спасибо за клок. Сделал все по правилам. Поставил...   Sep 11 2012, 07:26
|- - alexPec   ЦитатаНо всеравно есть непонятности. Не пойму как ...   Sep 11 2012, 20:49
|- - Acvarif   Цитата(alexPec @ Sep 11 2012, 23:49) Возм...   Sep 12 2012, 05:53
|- - alexPec   Цитата(Acvarif @ Sep 12 2012, 09:53) Спас...   Sep 12 2012, 06:16
|- - Acvarif   Цитата(alexPec @ Sep 12 2012, 09:16) Став...   Sep 12 2012, 11:25
|- - Acvarif   Большое Спасибо alexPec за поддержку. Заработало ...   Sep 12 2012, 17:20
|- - alexPec   Цитата(Acvarif @ Sep 12 2012, 15:25) В об...   Sep 12 2012, 19:29
|- - Acvarif   Выкладываю то, что получилось и вроде работает. Мо...   Sep 18 2012, 19:57
|- - alexPec   Цитата1. Не всегда последовательно сменяются буфер...   Sep 19 2012, 16:15
|- - Acvarif   Цитата(alexPec @ Sep 19 2012, 19:15) А у ...   Sep 19 2012, 17:29
|- - alexPec   Цитата(Acvarif @ Sep 19 2012, 21:29) Но E...   Sep 19 2012, 19:27
|- - Acvarif   Цитата(alexPec @ Sep 19 2012, 22:27) Ну т...   Sep 20 2012, 06:40
|- - alexPec   Цитата(Acvarif @ Sep 20 2012, 10:40) Тепе...   Sep 21 2012, 11:39
|- - Acvarif   Цитата(alexPec @ Sep 21 2012, 14:39) Я бы...   Sep 21 2012, 13:48
|- - alexPec   Цитата(Acvarif @ Sep 21 2012, 17:48) Да, ...   Sep 21 2012, 14:24
|- - Acvarif   При наращивании количества данных поступающих на s...   Sep 28 2012, 07:44
|- - alexPec   Регистр статуса и контрола в каком состоянии после...   Sep 28 2012, 09:37
|- - Acvarif   Цитата(alexPec @ Sep 28 2012, 12:37) Реги...   Sep 28 2012, 10:33
|- - alexPec   А покажите дамп сформированных дескрипторов   Sep 28 2012, 12:43
|- - Acvarif   Цитата(alexPec @ Sep 28 2012, 15:43) А по...   Sep 28 2012, 13:17
|- - Acvarif   С дампом (как вывести на консоль) так и не разобра...   Sep 28 2012, 19:42
|- - alexPec   Цитата(Acvarif @ Sep 28 2012, 23:42) С да...   Sep 29 2012, 09:23
|- - Acvarif   Цитата(alexPec @ Sep 29 2012, 12:23) Дамп...   Oct 1 2012, 18:50
|- - alexPec   Написано же : slide the pointer until 32 byte bo...   Oct 1 2012, 20:09
|- - Acvarif   ЦитатаТут выравнивается начало дескриптора по 32-Б...   Oct 2 2012, 07:17
|- - Acvarif   Все работает. С одним буфером. С двумя буферами н...   Oct 3 2012, 14:06
|- - alexPec   Честно говоря, не помню из-за чего, 2 года назад б...   Oct 3 2012, 17:14
|- - Acvarif   Спасибо. Примерно так и сделал. Вроде работает. Но...   Oct 4 2012, 17:11
|- - alexPec   Max_desc_proccessed - это если вам надо прерывание...   Oct 4 2012, 20:15
|- - Acvarif   Цитата(alexPec @ Oct 4 2012, 23:15) Max_d...   Oct 5 2012, 06:47
|- - alexPec   Цитата(Acvarif @ Oct 5 2012, 10:47) Спаси...   Oct 5 2012, 07:57
|- - Acvarif   Цитата(alexPec @ Oct 5 2012, 10:57) Похож...   Oct 9 2012, 16:00
|- - alexPec   ЦитатаС дескрипторами так толком и не понял почему...   Oct 9 2012, 18:30
- - gosu-art   У меня тоже есть вопросики Имею 2 буфера по 8к....   Nov 19 2012, 09:32
|- - alexPec   Цитата(gosu-art @ Nov 19 2012, 13:32...   Nov 20 2012, 05:29
- - gosu-art   Т.е. последовательность такая?: 1. Создаю дескрипт...   Nov 20 2012, 06:09
|- - alexPec   Цитата(gosu-art @ Nov 20 2012, 10:09...   Nov 21 2012, 10:04
|- - gosu-art   Цитата(alexPec @ Nov 21 2012, 14:04) Поче...   Nov 23 2012, 06:48
|- - alexPec   В коде долго разбираться, можете чего-то не замети...   Nov 23 2012, 16:25
|- - gosu-art   Цитата(alexPec @ Nov 23 2012, 19:25) Поче...   Nov 26 2012, 08:25
|- - alexPec   Чего-то не совсем все ясно, вы, когда дескрипторы ...   Nov 26 2012, 10:10
- - gosu-art   Вот созданные дескрипторы до вызова alt_avalon_sgd...   Nov 26 2012, 12:37
|- - alexPec   Первое что в голову приходит - а почему размер-то ...   Nov 26 2012, 14:45
|- - gosu-art   Цитата(alexPec @ Nov 26 2012, 17:45) Перв...   Nov 27 2012, 04:06
|- - alexPec   И все же, почему количество передаваемых байт в де...   Nov 27 2012, 16:00
- - gosu-art   В общем я тут поковырял alt_avalon_sgdma_construct...   Nov 28 2012, 06:50
|- - alexPec   Цитата(gosu-art @ Nov 28 2012, 10:50...   Nov 28 2012, 09:39
- - gosu-art   Теперь работает прием и передача (256 байт) без уч...   Nov 29 2012, 10:42
|- - alexPec   Цитата(Копейкин @ Jan 30 2013, 14:22) Где...   Jan 30 2013, 14:17
- - Копейкин   Acvarif, там всё сложнее. DMA заполняет только час...   Jan 30 2013, 15:16
|- - alexPec   Цитата(Копейкин @ Jan 30 2013, 19:16) Пре...   Jan 30 2013, 18:30
- - Копейкин   Мне хотелось по минимуму задействовать процессор, ...   Jan 31 2013, 07:43
- - Копейкин   Посмотрел внимательно на Альтере: ссылка там анг...   Jan 31 2013, 12:51
|- - alexPec   Цитата(Копейкин @ Jan 31 2013, 16:51) Пол...   Jan 31 2013, 16:30
- - Копейкин   Я сейчас, как и описывал, сделал бесконечный цикл ...   Jan 31 2013, 16:45
- - prussta   Добрый день! Хочу запустить SGDMA в режиме mem...   Feb 1 2014, 17:38


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

 


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


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