Skip to content

Видеовывод: развёртка, знакогенератор, кадровый буфер

Паспорт модуля

ПараметрЗначение
Аудитория🔴; пройдены М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).

Уровни

Глоссарий