Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LCD DMA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
alexPec
Свои версии кончились. Гуру, взываю к Вам, помогите!!!

Собрал сопц на ките N2-DK-eval 3c25, тот который с LCD (разьем LCD в картинке). Сопц в картинках ниже (разделен на 2 части, весь в экран не влез). Собираю - все собирается, прошивается, пошагово дебажится, а на LCD нет ничего. Начал железо мерять осциллом. Методика такая: при сбросе кит загружается прошивкой и на LCD изображение выводит. Промерял все ноги разъема (когда картинка есть) - записал, что там на них. Заливаю свою систему, заливаю программу, выполняю, снова меряю осциллом ноги. Результат такой - все сигналы, включая синхронизацию, HD,VD,DEN,CLK - один в один как при рабочем экране, а на линиях данных - 0, стабильный, постоянный. Пробовал даже замкнуть 26 и 27 ноги (+3.3В и G7)разьема LCD - появился зеленый фон, сдвинутый правда по горизонтали и вертикали (че-то с бланк интервалами там видимо напутано, но это второстепенная проблема, хотя ее решение тоже пока не знаю). Из чего сделал вывод, что все что касается сопца сделано правильно, не запускается DMA. Тут и тупик. Вроде запускаю как в примере. На всякий случай исходники вложил. Где что не так, где померять, что попробовать, подскажите пожалуйста!!! 1111493779.gif

vadimuzzz
перво-наперво посмотрите в программе, в том месте где открывается устройство sgdma (display = alt_video_display_init), просмотрите все содержимое переменной display. если все нормально, цепляйте сигналтап к выходам по всей цепочке, начиная с sgdma. есть ненулевая вероятность, что один из адаптеров неправильно сконфигурирован.
alexPec
В переменной display все вроде как надо (рис. ниже). 0х1111000 - адрес csr DMA, по даресу в name лежит мой \dev\dma, буфер, который начинается с 0х01000048 - адрес в ssram, она 1мбайт, начинается с 0х01000000.
Дескрипторы похоже правильные (рис. ниже). Байты 0-3 четные - начальный адрес для чтения, нечетные - адрес след. дескриптора, размер блока данных - 0хff00, дескрипторы закольцованы. Сигналтапом прочитал (рис. ниже) - нули на выходе dma. Посмотрел у dma дескриптор рид адрес и дескриптор рид дата (8,9 сигналы сверху) - нули; дескриптор райт адрес (10 сверху) - адрес одного из дескрипторов, дескриптор райт дата (11 сверху) - говорит о том, что передано этим дескриптором 0хff00 байт. Мемори рид адрес указывает на место в дисплейном буфере (12 сверху).
Но вот беда! Данные остаются одни и теже при каждом запуске сигнал тап, т.е. вроде как dma остановлено. После сброса проца данные другие (но правильные, другой дескриптор, другой адрес памяти), но до следующего сброса не меняются.
Такое ощущение, что dma работать начинает, но останавливается, причем случайно. ЧТО ДЕЛАТЬ-ТО ??
alexPec
Еще одна странность: При выделении буфера под картинку функцией alt_uncached_malloc возвращается значение 0x81000058, а у меня память ssram с 0x01000000 по 0x010fffff. Или старший бит показывает на то что буфер некешируемый? Потому как следующее выделение памяти для дескрипторов проходит с учетом выделенной памяти для картинки, т.е.
картинка 0x81000058 - 0x8107f858 (размер 522240 байт)
дескрипторы 0x0107f860

т.е. даже если обнулить старший бит в адресе картинки, буферы не перекрываются...
В дебаге после запуска дма функцией alt_avalon_sgdma_do_async_transfer в поле actual bytes transferred первых двух дескрипторов (из 8) записывается 0xff00, у остальных дескрипторов это поле 0 и после этого в сигналтапе уже ничего не меняется.
Т.е. 2 дескриптора трансферятся, а потом все стопорится. Может тактовую уменьшить, что нибудь с таймингами не так?
alexPec
Определенно с таймингами! Снизил все частоты в 2 раза - дма крутится.
А как его заставить крутиться на 100 МГц? (сечас только на 50 крутится); в примере-то на 100 МГц дма работает и все нормально???
Где, в каком файле может какие констрейны прописаны в работающем на 100 мгц проекте?
vadimuzzz
Цитата(alexPec @ Aug 17 2010, 16:35) *
Но вот беда! Данные остаются одни и теже при каждом запуске сигнал тап, т.е. вроде как dma остановлено.

надо добавить в список сигналов какой-нибудь строб, типа data_valid, проц перевести в режим пошаговой отладки и отслеживать выполнение транзакций. если подвисает, то отследить на какой транзакции это происходит.

Цитата(alexPec @ Aug 17 2010, 18:12) *
Или старший бит показывает на то что буфер некешируемый?

да

Цитата(alexPec @ Aug 17 2010, 19:44) *
Где, в каком файле может какие констрейны прописаны в работающем на 100 мгц проекте?

обычно название_системы_в_билдере.sdc + констрейны отдельных компонентов. вообще, посмотрите отчет таймквеста
alexPec
Vadimuzzz СПАСИБО!!! ВСЕ ЗАРАБОТАЛО!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.