alcrux 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Используется ADSP-BF561 EZ-KIT. Видео сигнал с помощью ADV7183 преобразуется в ITU и передается в SDRAM буфер , который перезаписывается по кругу. Для преобразования ITU в Yuv420 используется DMA с 2D буферами. Yuv буфер тоже находится в SDRAM и тоже перезаписывается по кругу. Тестирование дало следующие 1 если DMA ADV7183 -> Itu буфер остановлен, то преобразование одного кадра ITU -> Yuv420 выполняется приблизительно за 20 миллисекунд 2 если DMA ADV7183 -> Itu буфер работает, то преобразование одного кадра ITU -> Yuv420 выполняется приблизительно за 200 миллисекунд Что нужно сделать, чтобы во втором случае преобразование ITU -> Yuv420 занимало бы примерно тоже время что и в первом? Возможно ли это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Как у вас буфера в sdram-е размещены? Очень похоже на то, что у вас все буфера свалены в один (внутренний) банк sdram. Разнесите буфера так, чтобы к одному банку шли обращения только от одного источника/приемника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alcrux 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Как у вас буфера в sdram-е размещены? Очень похоже на то, что у вас все буфера свалены в один (внутренний) банк sdram. Разнесите буфера так, чтобы к одному банку шли обращения только от одного источника/приемника. В описанном варианте Itu и Yuv буферы находились в одно банке памяти MEM_SDRAM_BANK3. Если поместить Yuv буфер в другой банк, то время уменьшается до 82 мс. Тем не менее это все равно много, т.к. чтобы успевать обрабатывать каждый Itu фрейм время преобразования Itu в Yuv должно быть меньше 40 мс. Полностью выполнить вашу рекомендацию довольно сложно, т.к. Itu является одновременно приемником для данных от ADV7183 и источником для преобразования Itu в Yuv. Если буфер для ADV7183 находиться в одном банке, Itu буфер в другом, Yuv в третьем, то тогда Itu -> Yuv выполняется за 28 мс. Это время приемлемо, но требует довольно странного расределения буферов и организации их использования. Может есть вариант по проще? В любом случае спасибо за подсказку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Используется ADSP-BF561 EZ-KIT. Видео сигнал с помощью ADV7183 преобразуется в ITU и передается в SDRAM буфер , который перезаписывается по кругу. Для преобразования ITU в Yuv420 используется DMA с 2D буферами. Yuv буфер тоже находится в SDRAM и тоже перезаписывается по кругу. Что нужно сделать, чтобы во втором случае преобразование ITU -> Yuv420 занимало бы примерно тоже время что и в первом? Возможно ли это? А нельзя ли сделать так: завести два буфера во _внутренней_ памяти на 6 строк (или сколько там надо для преобразования в YUV 4:2:0) каждый дма кладет из данные из adv7183 в один из этих буферов, в это время процессор конвертит данные во втором буфере, (при этом он не лазит во внешнюю память). после того как данные сконвертились, мдма начинает перекладывать их в sdram, и потом после заполнения первого буфера данными, они меняются местами, и т.д. у аналога вроде аппноут про это был. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alcrux 0 25 октября, 2009 Опубликовано 25 октября, 2009 · Жалоба А нельзя ли сделать так: завести два буфера во _внутренней_ памяти на 6 строк (или сколько там надо для преобразования в YUV 4:2:0) каждый дма кладет из данные из adv7183 в один из этих буферов, в это время процессор конвертит данные во втором буфере, (при этом он не лазит во внешнюю память). после того как данные сконвертились, мдма начинает перекладывать их в sdram, и потом после заполнения первого буфера данными, они меняются местами, и т.д. у аналога вроде аппноут про это был. Спасибо, попытаюсь найти аппноте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bve 1 26 октября, 2009 Опубликовано 26 октября, 2009 · Жалоба SDRAM представляет собой "набор" строк по N байт. По команде активации от контроллера с заданным адресом строка считывается в промежуточный буфер. На это тратится 3-5 тактов частоты SDRAM. Зависит от микросхемы памяти. Далее по каждому такту частоты производится чтение или запись из/в буфера. Когда буфер кончается, требуется подача команды на его "закрытие" и активацию новой строки. Поэтому, потери времени максимальны, если Ваши данные лежат не в пределах одной строки или Вы одновременно запускаете несколько процессов обмена с разными строками. У AD есть специальные статьи - толи в аппноутах, толи в ЕЕ. Ищется по слову SDRAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться