Добрый день Всем.Думал, что разобрался с 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 выведенные наружу.
Поделитесь пожалуйста идеями как победить, свои кончились.