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

 
 
> 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
Ответов
gosu-art
сообщение Nov 20 2012, 06:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Т.е. последовательность такая?:
1. Создаю дескрипторы зацикленные друг на друга.
2. Выставляю бит PARK
3. вызываю alt_avalon_sgdma_do_async_transfer и забываю, что у меня есть SGDMA rolleyes.gif
Поток контролируется логикой, прерывание выставляется если будут какие либо ошибки, либо переполнения.

И почему один дескриптор может описать передачу максимум 0xFF00 байт? этот момент я не понял.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Nov 21 2012, 10:04
Сообщение #3


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

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



Цитата(gosu-art @ Nov 20 2012, 10:09) *
Т.е. последовательность такая?:
1. Создаю дескрипторы зацикленные друг на друга.
2. Выставляю бит PARK
3. вызываю alt_avalon_sgdma_do_async_transfer и забываю, что у меня есть SGDMA rolleyes.gif
Поток контролируется логикой, прерывание выставляется если будут какие либо ошибки, либо переполнения.

И почему один дескриптор может описать передачу максимум 0xFF00 байт? этот момент я не понял.


Все вроде верно, не забудьте что бит OWEND_BY_HW во всех дескрипторах должен быть в 1. Повторюсь, что для индикации текущего буфера можно включить прерывания через нцать дескрипторов (видел где-то там такую возможность).

Почему максимум 0xff00? Да ХЗ, не задумывался, может с большими разрядностями счетчиков (а там похоже 16) скорость просаживается, или еще какие проблемы. Вобщем, раз написано так- так и делал.
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Nov 23 2012, 06:48
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Цитата(alexPec @ Nov 21 2012, 14:04) *
Почему максимум 0xff00? Да ХЗ, не задумывался, может с большими разрядностями счетчиков (а там похоже 16) скорость просаживается, или еще какие проблемы. Вобщем, раз написано так- так и делал.

Я имел в виду, что в доке такую цифру не нашел rolleyes.gif

Ну вроде начинает получаться:

1. память под дескрипторы и данные

Код
alt_sgdma_descriptor *desc = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE;
unsigned char* pkt  = MEM_RX_BASE


2. создаю дескрипторы
Код
alt_avalon_sgdma_register_callback(sgdma_rx_dev,(alt_avalon_sgdma_callback)&tse_sgdmaRx_isr,(alt_u16)ALTERA_AVALON_SGDMA_CONTROL_IE_DESC_COMPLETED_MSK | ALTERA_AVALON_SGDMA_CONTROL_IE_GLOBAL_MSK,sgdma_rx_dev);
    alt_u32 *uncached_packet_payload;
    uncached_packet_payload = pkt; //(void *)alt_remap_cached ((volatile void*) pkt, 4);

    alt_avalon_sgdma_construct_stream_to_mem_desc(
            (alt_sgdma_descriptor *) &desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST],  // descriptor I want to work with
            (alt_sgdma_descriptor *) &desc[ALTERA_TSE_SECOND_RX_SGDMA_DESC_OFST],  // pointer to "next"
            uncached_packet_payload,            // starting write_address
            0,                                  // read until EOP
            0);
   while ( (IORD_ALTERA_AVALON_SGDMA_STATUS(S_SGDMA_RX_BASE) & ALTERA_AVALON_SGDMA_STATUS_BUSY_MSK) );
    uncached_packet_payload = pkt+(256);

alt_avalon_sgdma_construct_stream_to_mem_desc(
        (alt_sgdma_descriptor *) &desc[ALTERA_TSE_SECOND_RX_SGDMA_DESC_OFST],  // descriptor I want to work with
        (alt_sgdma_descriptor *) &desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST],  // pointer to "next"
        (uncached_packet_payload),            // starting write_address
        0,                                  // read until EOP
        0);


3. Запускаю последний созданный дескриптор

Код
IOWR_ALTERA_AVALON_SGDMA_CONTROL(S_SGDMA_RX_BASE, ALTERA_AVALON_SGDMA_CONTROL_PARK_MSK);

desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST].control=128; //выставляю OWNED_BY_HW для первого дескриптора

while ( (IORD_ALTERA_AVALON_SGDMA_STATUS(S_SGDMA_RX_BASE) & ALTERA_AVALON_SGDMA_STATUS_BUSY_MSK) );

alt_avalon_sgdma_do_async_transfer(sgdma_rx_dev, &desc[ALTERA_TSE_SECOND_RX_SGDMA_DESC_OFST]);


условие на прерывание
Код
#define ALTERA_TSE_SGDMA_INTR_MASK              ALTERA_AVALON_SGDMA_CONTROL_IE_CHAIN_COMPLETED_MSK | ALTERA_AVALON_SGDMA_CONTROL_IE_GLOBAL_MSK |
ALTERA_AVALON_SGDMA_CONTROL_IE_EOP_ENCOUNTERED_MSK |
ALTERA_AVALON_SGDMA_CONTROL_IE_ERROR_MSK |
ALTERA_AVALON_SGDMA_CONTROL_IE_DESC_COMPLETED_MSK


В прерывании проверяю ошибки, статусы. в конце делаю
Код
if(n_desc==0)
     {
         t2=alt_avalon_sgdma_do_async_transfer(sgdma_rx_dev, &desc[ALTERA_TSE_FIRST_RX_SGDMA_DESC_OFST]);
         n_desc=1;
     }
         else
         {

         alt_avalon_sgdma_do_async_transfer(sgdma_rx_dev, &desc[ALTERA_TSE_SECOND_RX_SGDMA_DESC_OFST]);
          n_desc=0;
         }


Все работает. Но мне теперь нужно убрать прерывание и что бы SGDMA молотил поток сам по себе.
Убираю..., в результате выполняется один дескриптор (п.3) и все, дальше ничего crying.gif
Как их зациклить друг на друга в бесконечном цикле?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Nov 23 2012, 16:25
Сообщение #5


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

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



В коде долго разбираться, можете чего-то не заметить, вы посмотрите на результат - найдите адрес дескрипторов (dma->buffer_ptrs->buffer_ptrs[0]->desc_base, если несколько буферов, то у каждого дескрипторы посмотрите). На примере mem to stream (под рукой просто был, Ваш по аналогии) такая картинка должна быть (прил). Зеленый - источник(у вас д.б. ноль, зато получатель - не ноль), синий - след. дескриптор, размер - 0xff00, дальше desc_control, desc_status, actual bytes transferred. Нас интересует в основном desc_control (байт красным выделен) - видно, что ВЕЗДЕ owned by HW равно 1 (старший бит), там в первом дескрипторе 84 - четверка генерирует сигнал SOP, в последнем - 81, однерка генерирует EOP, пусть вас это не смущает, т.е. везде desc_control одинаковый. Отображена память под 5 дескрипторов, последний видно что закольцован на первый. Крутится постоянно, это дма на дисплей, без вмешательства и прерываний, только данные в буфере меняю, они на экране отображаются.

Почему только в первом-то OWNED_BY_HW? Везде поставьте, должно работать

Про 0xff00 - чет сходу тоже не могу найти, когда курил внимательно - точно помню, где-то было сказано.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
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   Цитата(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
- - Копейкин   Прошу подсказать, где ошибся... Использую аналогич...   Jan 30 2013, 10:22
|- - alexPec   Цитата(Копейкин @ Jan 30 2013, 14:22) Где...   Jan 30 2013, 14:17
|- - Acvarif   Цитата(Копейкин @ Jan 30 2013, 14:22) Дес...   Jan 30 2013, 15:05
- - Копейкин   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 08:11
Рейтинг@Mail.ru


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