|
SG-DMA в режиме Stream To Memoy |
|
|
|
Aug 25 2012, 07:49
|
Знающий
   
Группа: Участник
Сообщений: 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?
|
|
|
|
|
 |
Ответов
|
Jan 30 2013, 10:22
|
Частый гость
 
Группа: Участник
Сообщений: 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 прерываний, всё работает но некрасиво, самому не нравится. Где промахнулся,а ???
|
|
|
|
|
Jan 30 2013, 15:05
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|