|
SGDMA почему-то байты пропускает, Что делаю не так? |
|
|
|
Jan 10 2011, 09:04
|
Профессионал
    
Группа: Свой
Сообщений: 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 выведенные наружу. Поделитесь пожалуйста идеями как победить, свои кончились.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jan 11 2011, 03:36
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 11 2011, 05:20
|

Гуру
     
Группа: Свой
Сообщений: 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 все-таки интересно глянуть
|
|
|
|
|
Jan 11 2011, 06:13
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 11 2011, 13:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(vadimuzzz @ Jan 11 2011, 16:06)  да нет, возьмите сигналы именно мегафункции фифо, нафиг арбитраторы Вывел все что относится к фифо. Но че-то не похоже что в нем проблемы. На второй картинке видно что данные с него на вход дма попадают через несколько тактов (пайплайн думаю). Потом время от входа в фифо до попадания в дма постепенно увеличивается (фифо заполняется). А вот адрес начальный- 0х13352С (512 слов фифо) -беда. Может конечно такое быть: Фифо при конфигурировании считается заполненной, как только запускаем транзакцию - мусор вываливается сразу, потом ждем правильных данных. Как только появляются правильные данные (по сигналу valid) они не задерживаясь проходят в память, но уже с адреса на размер фифо больше и соответственно транзакция заканчивается раньше чем данные перестают поступать. Оставшиеся данные заполняют фифо и до запуска следующей транзакции. Как запускается - старые данные фифы вываливаются сразу, в начало области памяти дма, потом ждем новых, как появляются - дописываются в конец области памяти дма. Все таки беда то тогда в синхронизации получается. Вот бы как-то фифу сбросить перед открытием транзакции. Не подскажете? UPD:О! такой вариант: данные то сразу валятся, даже когда инициализируется процессор,вся система, а транзакций дма нет. Поэтому фифа и заполняется под завязку. И как только открываем транзакцию - сначала вываливается то что накопилось. Надо синхронизировать однозначно! Но как?
Сообщение отредактировал alexPec - Jan 11 2011, 13:35
Эскизы прикрепленных изображений
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|