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

 
 
> SGDMA почему-то байты пропускает, Что делаю не так?
alexPec
сообщение Jan 10 2011, 09:04
Сообщение #1


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

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



Добрый день Всем.Думал, что разобрался с SGDMA, ан нет! Непонятные для меня вещи с этой штукой происходят, помогите прояснить, в чем дело. На рисунке диаграммы сигнал-тапа, фрагмент сопца (что касается этого ДМА) и дамп памяти в которую этот дма пишет данные.
Суть такая. Внешнее к сопцу устройство выдает отсчеты сигнала (четвертая строка сверху в сигнал-тапе) и сигнал Valid (пятая строка сверху), заведенный на одноименный сигнал стриминг-дма. Данные проходят через фифо на 1024 байта и попадают на вход SGDMA stream to memory (третья строка сверху).Зелеными линиями показано соответствие потока данных. До этого места как видно все ок, какие данные пришли, такие и попали на вход ДМА. Еще показаны адрес m_write_address (первая строка) и данные m_write_data (вторая строка). Если я правильно понял, это как раз адрес памяти куда дма пишет и данные, которые он пишет.Еще выведен строб записи m_write_write. Так вот по графику видно, что данные на выходе ДМА появляются все, но не все почему-то записываются в память. Синим выделено слово, которое например не записалось в память (на дампе это тоже видно, серым выделена клетка, где идет FD9A и сразу 008F, а должно быть FD9A,0000,008F). Опытным путем замечено, что такие пропуски появляются когда сигнал m_write_write затягивается, т.е. похоже когда шина загружается. Но при этом фифо для дма не переполняется (сигнал wrful_from_the_fifo_1, последняя строчка).
Я то думал фифо для того и нужно, чтоб если шина загружена - буферизировать данные, разгрузится - заталкивать в память. А получается шина загрузилась - пропустили байты и дальше.

Ну и детали. Клок для процессора, дма и сигнал-тапа - 80 МГц (pll0_c1 в сопце), клок для входных данных - 20 МГц (clk1 в сопце). Данные валятся пачками (пачка выделяется сигналом valid) по 2048 16 битных слов с периодичностью примерно раз в 1,5 мс. Мастеров на шине 3 - собственно процессор, дма дисплея (вытаскивает из памяти 16-разрядные слова с частотой 5 МГц) и упомянутый выше дма. Память у проца внешняя, асинхронная, программа, буфер видео, буфер для дма описанного и все остальное в ней лежит. Настройки компонентов дма в рисунках приложены. компонент ADC - просто сигналы avalon-st выведенные наружу.

Поделитесь пожалуйста идеями как победить, свои кончились.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение


Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vadimuzzz
сообщение Jan 10 2011, 23:57
Сообщение #2


Гуру
******

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



а как вы определяете момент начала DMA-транзакции в сигналтапе? мне кажется, проблема в том, что либо длина в дескрипторе неверно выставлена, либо несколько транзакций в последовательные сегменты памяти проходит
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 11 2011, 03:36
Сообщение #3


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

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



Цитата(vadimuzzz @ Jan 11 2011, 05:57) *
а как вы определяете момент начала DMA-транзакции в сигналтапе? мне кажется, проблема в том, что либо длина в дескрипторе неверно выставлена, либо несколько транзакций в последовательные сегменты памяти проходит

В сигнал тапе ставлю условие записи когда сигнал стрима Valid в 1 и когда m_write_write в 1. Как раз когда нажимаю кнопку (перезапускаю DMA) сигнал тап вываливает картинку, и там вот эти адреса. И с дампом памяти все вяжется
Длина в дескрипторе верная, на самом деле чуть больше 2048 слов: 2592.
А как можно отловить несколько транзакций последовательных или из-за чего может быть такое? Дело в том, что когда сигнал тап ставишь на авто перезапуск, то картинка меняется только по нажитю на кнопку (перезапуск ДМА). Дескриптор у меня один.

Вот такая мысль появилась: могут ли данные через фифо проходить как через сдвиговый регистр, т.е. на выходе первый байт появится не раньше чем через длину фифо тактов?
Если так, то более менее все вяжется: фифо на 1024х(8bitpersymbol x 2 symbolperbeat), т.е. на 2048 байт. тогда при начальном адресе 0х133128 получаем первый байт 0х133128+2048=0х133928 (у меня получается 0х13392С). Если сокращаем фифо в 2 раза то получаем первый байт 0х133128+1024=0х133528 (у меня получается 0х13352С).
В добавок к этому заметил, что при первом запуске дма (после реконфигурирования) память с 0х133128 по 0х133928 (или по 0х133528 если фифо 512 элементов) забита ерундой, а с 0х13392С до конца буфера - начало пакета. При повторном запуске что-то правдоподобное появляется в начале (то что с прошлого раза осталось в фифо).
Если действительно так, то лечится ли это? И как?

Сообщение отредактировал alexPec - Jan 11 2011, 03:38
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 11 2011, 05:20
Сообщение #4


Гуру
******

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



Цитата(alexPec @ Jan 11 2011, 12:36) *
В добавок к этому заметил, что при первом запуске дма (после реконфигурирования) память с 0х133128 по 0х133928 (или по 0х133528 если фифо 512 элементов) забита ерундой, а с 0х13392С до конца буфера - начало пакета.

такая фигня происходит, если фифа сконфигурирована в "Show Ahead" режиме, покажите настройки. Упс, просмотрел в начале. Настроек не видно, надо HDL поглядеть. а можно и не глядеть, сделать в начале программы транзакцию размером с фифо, чтобы хлам выбросить. хотя HDL все-таки интересно глянуть
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 11 2011, 06:13
Сообщение #5


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

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



Цитата(vadimuzzz @ Jan 11 2011, 11:20) *
такая фигня происходит, если фифа сконфигурирована в "Show Ahead" режиме, покажите настройки. Упс, просмотрел в начале. Настроек не видно, надо HDL поглядеть. а можно и не глядеть, сделать в начале программы транзакцию размером с фифо, чтобы хлам выбросить. хотя HDL все-таки интересно глянуть

Написан параметр lpm_showahead = "OFF", ну может не то посмотрел, хдл от фифы прилагаю. А без синхронизации как то стремно. Один байт туда или сюда (мало ли, всякие случаи бывают) и все, пропали данные. А нельзя фифу чистить сигналом например startofpacket или за такт-два до него, ну или хоть как-то синхронизировать с сигналом начала пакета? Фиг бы с ним что не сначала данные, лишь бы всегда одинаково было. Ато получается один раз синхронизировали, а потом что-нибудь сместилось и данные не те совсем.

И ЕЩЕ РАЗ СПАСИБО!!!

UPD:Стоп!!! Хрен с ним с фифо, пусть там и мусор может быть, а сигнал тап-то почему показывает первый адрес, по которому записывает 0x13392C(0x13352C)??? И почему этот адрес зависит от размера фифо? В дескрипторе же русским по белому: 0х133128 ???

Сообщение отредактировал alexPec - Jan 11 2011, 06:23
Прикрепленные файлы
Прикрепленный файл  fifo_1.v ( 7.96 килобайт ) Кол-во скачиваний: 196
 
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 11 2011, 06:22
Сообщение #6


Гуру
******

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



Цитата(alexPec @ Jan 11 2011, 15:13) *
Написан параметр lpm_showahead = "OFF"

хм, странно. может она не сбрасывается? давайте все ее входные/выходные сигналы в сигналтап, включая aclr. интересно глянуть на нее во время транзакции
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 11 2011, 08:27
Сообщение #7


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

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



Цитата(vadimuzzz @ Jan 11 2011, 12:22) *
хм, странно. может она не сбрасывается? давайте все ее входные/выходные сигналы в сигналтап, включая aclr. интересно глянуть на нее во время транзакции

А там два арбитратора фифо, один фифо1. От кого сигналы брать? На все у меня памяти не хватит. И aclr там нигде нет. Видел только rdreset_n, wrreset_n.Смотрел в пресинтезе.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 11 2011, 10:06
Сообщение #8


Гуру
******

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



Цитата(alexPec @ Jan 11 2011, 17:27) *
А там два арбитратора фифо, один фифо1. От кого сигналы брать? На все у меня памяти не хватит. И aclr там нигде нет. Видел только rdreset_n, wrreset_n.Смотрел в пресинтезе.

да нет, возьмите сигналы именно мегафункции фифо, нафиг арбитраторы
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 11 2011, 13:30
Сообщение #9


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

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



Цитата(vadimuzzz @ Jan 11 2011, 16:06) *
да нет, возьмите сигналы именно мегафункции фифо, нафиг арбитраторы

Вывел все что относится к фифо. Но че-то не похоже что в нем проблемы. На второй картинке видно что данные с него на вход дма попадают через несколько тактов (пайплайн думаю). Потом время от входа в фифо до попадания в дма постепенно увеличивается (фифо заполняется). А вот адрес начальный- 0х13352С (512 слов фифо) -беда.
Может конечно такое быть: Фифо при конфигурировании считается заполненной, как только запускаем транзакцию - мусор вываливается сразу, потом ждем правильных данных. Как только появляются правильные данные (по сигналу valid) они не задерживаясь проходят в память, но уже с адреса на размер фифо больше и соответственно транзакция заканчивается раньше чем данные перестают поступать. Оставшиеся данные заполняют фифо и до запуска следующей транзакции. Как запускается - старые данные фифы вываливаются сразу, в начало области памяти дма, потом ждем новых, как появляются - дописываются в конец области памяти дма.
Все таки беда то тогда в синхронизации получается. Вот бы как-то фифу сбросить перед открытием транзакции. Не подскажете?

UPD:О! такой вариант: данные то сразу валятся, даже когда инициализируется процессор,вся система, а транзакций дма нет. Поэтому фифа и заполняется под завязку. И как только открываем транзакцию - сначала вываливается то что накопилось.

Надо синхронизировать однозначно! Но как?

Сообщение отредактировал alexPec - Jan 11 2011, 13:35
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexPec   SGDMA почему-то байты пропускает   Jan 10 2011, 09:04
- - vadimuzzz   у фифы не стоит галочка "Allow backpressure...   Jan 10 2011, 11:37
|- - alexPec   Цитата(vadimuzzz @ Jan 10 2011, 17:37) у ...   Jan 10 2011, 14:32
|- - vadimuzzz   Цитата(alexPec @ Jan 11 2011, 22:30) Надо...   Jan 11 2011, 14:29
|- - alexPec   Цитата(vadimuzzz @ Jan 11 2011, 20:29) вы...   Jan 11 2011, 16:52
- - vadimuzzz   пока инфы маловато.. вытащите сигналы модуля fifo_...   Jan 11 2011, 20:49
|- - alexPec   Цитата(vadimuzzz @ Jan 12 2011, 02:49) по...   Jan 12 2011, 04:24
- - vadimuzzz   1. нетлист называется "SignalTap Pre-Synthesi...   Jan 12 2011, 05:08
- - alexPec   Цитата(vadimuzzz @ Jan 12 2011, 11:08) 2....   Jan 12 2011, 07:36
- - alexPec   Все, победил! Уважаемый Vadimuzzz! У Вас...   Jan 12 2011, 16:56


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

 


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


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