|
Вывод видео на монитор., Организация кадровых буферов |
|
|
|
Aug 11 2017, 11:45
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 18-06-15
Пользователь №: 87 194

|
Здравствуйте! Прошу совета. Задача следующая. Требуется вывести видеоизображение с КМОП матрицы на стандартный монитор. Проект реализую на Cyclone IV. На плате также имеется SRAM 2 MB и SDRAM 64 MB. Пиксельная частота камеры 2 МГц, пиксельная частота монитора 40 МГц. Разрешение кадра 800х600. Матрица выдает кадры друг за другом без остановки. Поскольку частоты не совпадают необходимо использовать кадровый буфер. Предполагаю два варианта:
1) организовать кадровый буфер в SRAM на два кадра. При этом считывать данные из матрицы сначала в FIFO1 затем в SRAM. Когда первый кадр будет записан в SRAM начать выводить первый кадр SRAM->FIFO2->Монитор, при этом записывать второй кадр.
При такой реализации возникают вопросы. Поскольку частоты разные, что делать, в случае, если первый кадр выведен на монитор, а второй кадр еще не считан? Шина адреса и шина данных у SRAM одни для записи и чтения, поэтому придется обеспечить корректное чередование записи и чтения? Как этого добиться?
2) организовать кадровый буфер на два кадра в разных микросхемах: в SRAM первый кадр, в SDRAM второй кадр. В этом случае шины адреса и шины данных раздельные и можно одновременно писать второй кадр в SDRAM и считывать первый из SRAM.
При такой реализации возникают такие вопросы. В случае если кадр на монитор выведен, а новый еще не считался, можно будет повторить вывод старого кадра, после чего вывести новый кадр. Но вот в чем проблема, матрица выдает кадры друг за другом без остановки, и если новый кадр не считался (не успел) точно к моменту, когда старый закончил выводиться на монитор, то будет постоянно выводиться старый кадр. Как добиться этой синхронности? или необходимо считывать кадры с матрицы не постоянно, а только по требованию? типа считал первый кадр, начинаешь выводить первый и считывать второй, выводишь первый кадр несколько раз, до тех пор, пока не считается второй, когда считался второй, начинаем выводить второй и писать третий и так по кругу.
Сообщение отредактировал LAS9891 - Aug 11 2017, 11:59
|
|
|
|
|
 |
Ответов
|
Aug 14 2017, 05:12
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 18-06-15
Пользователь №: 87 194

|
Цитата(Burenkov Sergey @ Aug 12 2017, 00:58)  У вас с матрицы идет 8 или 10 бит? И Bayer filter вы делаете сами или контроллер матрицы? Какая SDRAM на плате установлена, на какой частоте вы ее запускаете? C матрицы идёт 8 бит. На счёт Bayer filter - матрица монохромная. Пока пробую использовать асинхронную SRAM:
61WV102416ALL_ISSI_1M_x_16_SRAM_.pdf ( 162.83 килобайт )
Кол-во скачиваний: 23Цитата(_pv @ Aug 11 2017, 17:37)  если доступ к памяти быстрее 80МГц, значит в каждый цикл чтения данных для монитора можно ещё впихнуть цикл записи, если очередной пиксель с камеры пришёл. даже если цикл доступа медленнее 80МГц, но быстрее чем 42, то в 21 цикл обращения к памяти можно впихнуть 20 чтений и одну запись, но так как чтение теперь не совпадает по частоте с частотой монитора, читать надо через небольшое фифо, откуда монитор с частотой 40МГц данные будет забирать. Возможно ли использовать такой алгоритм с вот такой памятью:
61WV102416ALL_ISSI_1M_x_16_SRAM_.pdf ( 162.83 килобайт )
Кол-во скачиваний: 36
|
|
|
|
|
Aug 14 2017, 08:37
|
Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 10-01-13
Пользователь №: 75 145

|
[quote name='LAS9891' date='Aug 14 2017, 08:12' post='1513239'] C матрицы идёт 8 бит. На счёт Bayer filter - матрица монохромная. Пока пробую использовать асинхронную SRAM:
61WV102416ALL_ISSI_1M_x_16_SRAM_.pdf ( 162.83 килобайт )
Кол-во скачиваний: 23[/quote ] Можно конечно вручную высчитывать когда прочитать или записать байт в память, чтобы синхронизировать вход и выход, но по моему гораздо проще абстрагироваться от этого. Если вы работаете в Qsys, то общий доступ к памяти сделаем за вас avalon interconnect. Вам нужно взять готовые модули Avalon Master https://www.altera.com/support/support-reso...-avalon-mm.html , обернуть их в несложную логику, по алгоритму который я выше приводил. Вы просто будете запускать чтение и запись с нужных адресов выставлением всего нескольких сигналов(адрес и старт) а все остальное сделает за вас контроллер памяти и interconnect. Размера и скорости SRAM хватит в вашем случае. Вам надо около 3,84мегабита для тройной буферизации, память у вас 16М, скорость нужна 336Мб/с, если у вас память имеет время доступа 20 ns, то ее пропускная способность 800Мб/с, так что все с запасом
Сообщение отредактировал Burenkov Sergey - Aug 14 2017, 08:39
|
|
|
|
Сообщений в этой теме
LAS9891 Вывод видео на монитор. Aug 11 2017, 11:45 _pv организовать кадровый буфер на один кадр где угодн... Aug 11 2017, 12:18 LAS9891 Цитата(_pv @ Aug 11 2017, 16:18) и без до... Aug 11 2017, 13:07 Burenkov Sergey У альтеры есть такая кора - frame buffer, один из ... Aug 11 2017, 12:41 _pv если доступ к памяти быстрее 80МГц, значит в кажды... Aug 11 2017, 13:37 Volkov Тут важна кадровая частота матрицы.
Вывод лучше сд... Aug 12 2017, 11:52 novikovfb Цитата(Volkov @ Aug 12 2017, 15:52) Для б... Aug 14 2017, 08:51  Volkov Цитата(novikovfb @ Aug 14 2017, 11:51) В ... Aug 14 2017, 09:21 LAS9891 Использую мегафункцию DCFIFO. Возник вопрос. Возмо... Aug 15 2017, 06:09 Flip-fl0p Цитата(LAS9891 @ Aug 15 2017, 09:09) Испо... Aug 15 2017, 06:10  Maverick Цитата(Flip-fl0p @ Aug 15 2017, 09:1... Aug 15 2017, 06:13   Flip-fl0p Цитата(Maverick @ Aug 15 2017, 09:13) Доп... Aug 15 2017, 06:25 andrewkrot https://od.lk/fl/NDVfMzU4NzA1Xw качаете здесь файл... Aug 15 2017, 07:43 Flip-fl0p ЦитатаЗдравствуйте! Прошу совета. Задача следу... Aug 15 2017, 08:20 _pv со статической памятью конечно всё гораздо проще, ... Aug 15 2017, 08:58
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|