HDMI Adapter for MCU on FPGA — это простейший видеоадаптер с HDMI выходом в разрешении 640×480, построенный на тайловой графике для экономии видеопамяти (всего 16 КБ). В основе адаптера лежит FPGA (например, Altera Cyclone IV EP4CE6 или Gowin Tang Nano 9k). Управление адаптером осуществляется через параллельную 8-битную шину от внешнего микроконтроллера (STM32, Arduino и др.).
Организация видеопамяти
Весь экран разбит на плитки (тайлы, знакоместа) размером 8×8 пикселей: 60 строк × 80 знакомест = 4800 знакомест. Изображение цветное (палитра 16 цветов), но ограничено двумя цветами на знакоместо.| Адрес | Размер | Назначение |
|---|---|---|
| 0x0000 – 0x12BF | 4800 байт | Номера тайлов для каждого знакоместа |
| 0x12C0 – 0x257F | 4800 байт | Атрибуты цвета для каждого знакоместа |
| 0x2580 – 0x27FF | 640 байт | Не используется |
| 0x2800 – 0x2FFF | 2048 байт | Банк тайлов №1 (знакогенератор ASCII) |
| 0x3000 – 0x37FF | 2048 байт | Банк тайлов №2 |
| 0x3800 – 0x3FFF | 2048 байт | Банк тайлов №3 |
Примечание: Память номеров тайлов и атрибутов идёт непрерывно. Банки тайлов начинаются с небольшим промежутком для выравнивания. Одномоментно на экран проецируется только один банк тайлов.
Цвета и атрибуты
- Старший полубайт атрибута (4 бита) — цвет символа.
- Младший полубайт атрибута (4 бита) — цвет фона знакоместа.
- Цвета берутся из палитры RGB888 (до 16 цветов, настраиваемых в проекте).
- Можно уменьшить количество бит атрибута фона (вплоть до 0), увеличив количество бит атрибута символа (до 256 цветов символов при фиксированном фоне).
Управление видеоконтроллером
Используется параллельная 8-битная шина и управляющие сигналы:- AD[7:0] — мультиплексированная шина адреса/данных.
- CMD[2:0] — номер команды.
- STROBE — стробирующий импульс (положительной полярности).
- 000 — запись байта данных во временный регистр данных.
- 001 — запись младшего байта адреса во временный регистр адреса.
- 010 — запись старшего байта адреса во временный регистр адреса.
- 011 — запись данных в видеопамять по адресу из временного регистра адреса.
- 100 — выбор номера банка тайлов (1–3) из линии данных AD[1:0].
Инициализация
При запуске FPGA видеопамять инициализируется:- Номера тайлов — случайные байты.
- Атрибуты — фиксированные цвета (серебристый на белом фоне).
- Банк тайлов №1 — знакогенератор ASCII (первые 128 байт — латиница, вторые 128 — кириллица).
- Банки №2 и №3 — пустые, для пользовательских тайлов.
Проект для STM32
Для управления адаптером автор использовал Black pill (STM32F411CEU) и написал демонстрационный проект с библиотекой для работы с адаптером (вывод текста, работа с тайлами). Проект поддерживает:- Вывод текста с использованием знакогенератора.
- Конвертацию монохромных BMP-изображений (160×120) в тайловое представление (утилита в папке Software).
Перспективы
В планах — добавление поддержки спрайтов (значительно усложнит проект, но будет интересно для саморазвития).Версия для Gowin Tang Nano 9k
Проект адаптирован для Gowin Tang Nano 9k (требуется замена кварцевого генератора на 50 МГц и небольшие доработки кода).Файлы для загрузки
| Название файла / Папка | Описание | GitHub | Yandex.Диск |
|---|---|---|---|
| Firmware (папка) | Проекты для Altera (Quartus) и Gowin, демонстрационный проект для STM32 | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Images (папка) | Изображения (фото, скриншоты) | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Software (папка) | Утилита для конвертации BMP в тайловое представление | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Скачать все файлы | Все файлы находятся в одном архиве | Ссылка на GitHub | Ссылка на Яндекс.Диск |
Полезные ссылки проекта:
- Репозиторий проекта — GitHub