Давайте пока отложим способы формирования сцены игры в буфере экрана. Надо время все обдумать. Наверно найдем приемлемый вариант. А пока спроектируем вывод из буфера экрана в регистр RGB. Для начала будем считать, что у нас один буфер экрана с картинкой 320х240 точек по 15 бит на цвет. Потом доработаем для 4х буферов с врезанием экрана с динамической графикой в экран со статической графикой.
Для хранения информации о цвете точек в строке организуем во внутренней памяти FPGA буфер VGA размером 320 ячеек по 15 бит. Из SDRAM будем читать данные пакетами по 8 точек (1 точка за такт) с паузами (по 6 и более тактов) и записывать в буфер VGA. После записи каждой точки в буфер VGA счетчик записи увеличивается на 1. Как только сделано 320 записей - буфер полон. Больше читать из буфера экрана не надо.
Для адресации в буфере VGA во время чтения используем счетчик чтения. Так как читать из буфера VGA можно только тогда, когда он свободен от записи из SDRAM - нужно добавить между буфером VGA и регистром RGB небольшой буфер FIFO. Из регистра RGB будем отправлять данные о цвете точки через HDMI или аналоговые ЦАПы типа R-2R на монитор. Это уже будет зависеть от реализации конкретной видеокарты или девборды. В остальном, кроме типа выхода на монитор, новый видеорежим должен работать одинаково на всех устройствах.
Во время строчного синхроимпульса VGA будем сбрасывать счетчики записи и чтения из буфера VGA, а также проводить регенерацию SDRAM. Достаточно сделать 3 цикла AUTO REFRESH в начале каждой строки VGA. Затем, во время левого бордера в строке начинаем заполнение буфера VGA данными о цвете точек из буфера экрана в SDRAM. К моменту вывода видимой части строки его начало уже будет заполнено.
Так как для экрана 320х240 каждая вторая строка VGA в режиме 640x480@60Hz дублируется, то буфер загружать надо только 1 раз на 2 строки. В начале второй строки нужно сделать только 3 цикла AUTO REFRESH, а остальное время доступ к SDRAM будет в основном у блиттера. Аналогично нужно вывести все 240 строк изображения, сформированного в буфере экрана. Во время бордера в кадре VGA данные из SDRAM читать не надо.
Вот и все. Для простоты частоту точек VGA выбрать 25 MHz, а FGPA и SDRAM 125 MHz.