Май 13 2015

Проект видеоадаптера. Часть 1

Целью проекта является разработка видеоадаптера на FPGA. Выходом видеоадаптера является VGA, на данный момент поддерживается глубина цвета 6 бит (по 2 бита на цвет RGB).
Разъём VGA подключен к FPGA по следующей схеме:

schematics

 

Резисторы R1-R6 образуют простейший ЦАП, для начала хватит такого, если нужна большая глубина цвета, то лучше использовать специализированные микросхемы видеоЦАП, например ADV7123.

На данный момент реализован генератор синхроимпульсов, который генерирует сигналы H_SYNC и V_SYNC, а также генерирует текущий номер пиксела по горизонтали и вертикали. Реализовано 4 режима:

режим 0 — (640 * 480)

режим 1 — (640 * 400)

режим 2 — (640 * 350)

режим 3 — (320 * 200)

В режимах 0, 1 и 3 монитор фактически работает в режиме 640 * 480, при этом в режиме 1 изображение имеет чёрные поля сверху и снизу, в режиме 3 каждый пиксел изображения «удваивается» по горизонтали и по вертикали, то есть фактический размер изображения получается (640 * 400), и также имеются чёрные поля сверху и снизу. В режиме 2 монитор работает непосредственно в режиме (640 * 350).

Теоретически, существует стандартный режим 640х400, но монитор отказался работать в таком режиме, поэтому пришлось его имитировать на режиме 640х480. Режим 320х200 — то же самое.

Модуль работает на тактовой частоте 50МГц, частота пикселов составляет 25МГц. По стандарту частота пикселов в режимах 640х480@60Гц и 640х350@70Гц составляет 25,175МГц, но мониторы успешно синхронизируются и на 25МГц.

Фото экрана для примера:

pic1

Код на гитхабе: https://github.com/arktur04/VideoCard/archive/master.zip

Полезная ссылка: http://tinyvga.com/vga-timing — таблица режимов VGA с таймингами.

Это первая часть проекта, один модуль. Следующей частью будет модуль двухпортовой памяти для видеобуфера.