Видеовывод: развёртка, знакогенератор, кадровый буфер
Паспорт модуля
| Параметр | Значение |
|---|---|
| Аудитория | 🔴; пройдены М15–М17 |
| Аутентичная задача | получить экран для Тетриса: текстовый/тайловый режим, в который CPU пишет символы как в память |
| Объём | 5 занятий × 90 мин |
| Оборудование | Tang Primer 25K + док с видеовыходом (DVI-сигнал по HDMI-разъёму), монитор; PLL под пиксельклок (генерируется средствами Gowin; параметры — из документации платы и стандарта выбранного режима) |
| Ограничения | режим выбирать консервативно (классический VGA-тайминг 640×480@60, пиксельклок 25,175 МГц — эталон курса); ТБ: HDMI-кабель подключать при выключенном питании |
Аутентичная задача. После модуля обучающиеся смогут: объяснить каждый сигнал видеотракта от счётчика пикселей до символа на мониторе и дать процессору М17 «печатать» в экранную память.
Цели
| № | Обучающиеся … | Блум—Андерсон | Миллер | Проверка |
|---|---|---|---|---|
| 1 | объясняют развёртку: видимая область, фронт/тыл, синхроимпульсы | понимать | знает | схема таймингов от руки + квиз |
| 2 | реализуют счётчики hcnt/vcnt и тестовую таблицу (градиент, сетка) | применять | показывает как | картинка на мониторе |
| 3 | строят текстовый режим: экранная BRAM 80×30 + шрифт 8×8 в ROM | создавать | делает | вывод строки |
| 4 | подключают видеопамять вторым портом к CPU | создавать | делает | программа на ассемблере М14 печатает символ |
Ядро модуля
flowchart LR
PLL[PLL: пиксельклок] --> CNT[Счётчики hcnt, vcnt]
CNT --> SYNC[hsync, vsync, видимая область]
CNT --> ADDR[Адрес символа = f строки/колонки]
ADDR --> VRAM[(Экранная BRAM\nпорт B: CPU М17)]
VRAM --> FONT[(ROM шрифта 8×8\n= знакогенератор М2, выросший)]
FONT --> PIX[Бит пикселя] --> OUT[Видеовыход]
Тракт символа (worked example, прослеживается для конкретного пикселя на доске): символ = VRAM[(vcnt>>3)*80 + (hcnt>>3)], строка_глифа = FONT[{символ, vcnt[2:0]}], пиксель = строка_глифа[7 - hcnt[2:0]]. Три уровня косвенности — и каждый уже знаком: адресация (М9), ПЗУ-таблица (М2/М12), счётчики (М8).
Конвейерная задержка как закон жанра: VRAM и FONT — синхронные памяти, данные приходят на такт позже адреса; без выравнивания картинка «съезжает» на символ. Обучающиеся уже били этот такт в М17 — теперь он виден глазами на мониторе: редкий случай, когда баг тайминга буквально нарисован.
Оценивание
Контрольные точки: схема таймингов и квиз (зан. 1); тестовая таблица стабильна, монитор распознал режим (зан. 2); строка «YADRO-74» из VRAM (зан. 4); итог — программа CPU заполняет экран инкрементирующимися символами (совместная работа М17+М18, приёмка по трассе и по экрану).
Типичные ошибки: полярность синхроимпульсов не по стандарту режима — монитор молчит или плывёт; счётчики сравниваются с «магическими числами» в десяти местах — параметры вынести в localparam (санитария кода = снижение посторонней нагрузки будущего себя); цвета/пиксель вне видимой области не обнулены — артефакты по краям; попытка «печатать» из CPU в одноportовую память во время чтения развёрткой — вспоминаем шинный конфликт М7: у той же проблемы здесь другое решение (второй порт BRAM).