В настоящее время я работаю над Super OSD - проектом на экране. http://code.google.com/p/super-osd содержит все подробности.
На данный момент я использую MCU dsPIC для выполнения этой работы. Это очень мощный DSP (40 MIPS при 80 МГц, трехканальные одноцикловые операции и блок MAC), и, что немаловажно, он поставляется в DIP-пакете (потому что я использую макет для его прототипирования). Я действительно получаю все до последней части производительности, используя OSD - чип имеет около 200 нс или 10 циклов на пиксель на этапе вывода, поэтому код должен быть очень оптимизирован в этой части (по этой причине он всегда будет записываться в сборка.)
Теперь я рассматривал возможность использования FPGA для этого, потому что из-за параллельной архитектуры такого чипа возможно иметь простую логическую программу, работающую на OSD. Такие вещи, как рисование линий и алгоритмический код, будут обрабатываться MCU, но фактический вывод будет сделан с помощью FPGA. И некоторые простые вещи, такие как установка пикселей или рисование горизонтальных и вертикальных линий, которые я хотел бы интегрировать в FPGA, чтобы улучшить скорость.
У меня есть несколько вопросов:
- Это будет стоить значительно больше? Самые дешевые ПЛИС, которые я нашел, составляли ~ 5 фунтов стерлингов каждая, а dsPIC - 3 фунта стерлингов каждый. Так это будет стоить дороже, но на сколько?
- DsPIC помещается в корпус SO28. Я не хотел бы идти больше, чем SO28 или TQFP44. Большинство FPGA, которые я видел, поставляются в пакетах BGA или TQFP> 100, которые на данный момент недоступны из-за размера ножниц и сложности их пайки самостоятельно.
- Какой ток используется ПЛИС? В настоящее время решение dsPIC потребляет около 55 мА +/- 10 мА, что на данный момент нормально. Будет ли FPGA потреблять больше или меньше? Это переменная или она в значительной степени статична, как dsPIC?
- Мне нужно как минимум 12 КБ графической памяти для хранения графики OSD. Есть ли у FPGA этот вид памяти, доступный на чипе, или это доступно только с внешними чипами?
источник
Я бы хотел использовать что-то для буферизации времени между процессором и дисплеем. Наличие оборудования, которое может показывать весь кадр видео без вмешательства процессора, может быть хорошим, но, возможно, излишним. Я бы предположил, что лучшим компромиссом между аппаратной и программной сложностью, вероятно, было бы создание чего-то с двумя или тремя независимыми 1024-битными сдвиговыми регистрами (два бита на пиксель, чтобы обеспечить черный, белый, серый или прозрачный) и средством переключения между ними. Пусть PIC загрузит сдвиговый регистр, а затем заставит аппарат начать сдвигать его, пока он устанавливает флаг, чтобы PIC мог загрузить следующий. С двумя сдвиговыми регистрами у PIC было бы 64us между временем, когда было сказано, что сдвиговый регистр доступен, и временем, когда все данные должны быть сдвинуты. С тремя сменными регистрами,
Обратите внимание, что хотя 1024-битный FIFO будет так же хорош, как два 1024-битных сдвиговых регистра, а в CPLD FIFO стоит только одну макросоту на бит, плюс некоторая логика управления, в большинстве других типов логики два бита сдвигового регистра будет дешевле, чем один бит FIFO.
Альтернативный подход заключается в подключении CPLD к SRAM и создании простой видеоподсистемы с этим. Эстетически мне нравится генерация видео «на лету», и если кто-то сделает хорошие дешевые 1024-битные микросхемы сдвигового регистра, я бы предпочел этот подход, но использование внешней SRAM может быть дешевле, чем использование FPGA с достаточным количеством ресурсов для сделать несколько 1024-битных сдвиговых регистров. Для вашего выходного разрешения необходимо будет синхронизировать данные со скоростью 12 Мбит / с или 3 МБ / с. Должна быть возможность упорядочить вещи так, чтобы обеспечить синхронизацию данных со скоростью до 10 Мбит / с без особых затруднений путем чередования циклов памяти; самая большая хитрость была бы в том, чтобы предотвратить повреждение данных, если импульс синхронизации не приходит в ожидаемый момент.
источник