Последний раз редактировалось s_kosorev; 16.06.2015 в 20:19.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
s_kosorev, клэшингу нас тут атрибутный, а не цветовой и связан с тем, что мы не можем в 128м экране рисовать в цвете с точностью до точки, только до знакоместа. а дизеринг или иной способ эмуляции большего числа цветов, это слегка другое.
---------- Post added at 23:34 ---------- Previous post was at 23:26 ----------
Т.е. мы можем сразу оперировать спрайтами и картинками не 8 бит, а сразу 15 (16) бит?! интересно конечно, но тогда памяти для буферов в 4метра будет маловато. мне на спринтере памяти для 8ми битных не хватает, а ты для 16битных хочешь. 16 метров резервируй, не меньше.Конечно, если все уже 15-битное - ничего преобразовывать не надо.
---------- Post added at 23:46 ---------- Previous post was at 23:34 ----------
и ещё один не понятный момент - если карта умеет работать с данными 15бит, тогда для чего нужно делать гору палитр для горы спрайтов? мы и так можем грузить 15бит спрайты без извратов. В том и прикол, что 8бит спрайты, это набор индексов в палитре, а 15юит и выше спрайты, это и есть сама палитра. вместо индекса от 0 до 255 мы указываем данные rgb в формате (15:5:5.
Последний раз редактировалось Valen; 16.06.2015 в 21:21.
V6Z80P - Back for Good
Надо выбрать режим работы SDRAM. Как известно, SDRAM работает так:
Вся область памяти внутри этого устройства делится на блоки (ROW) по 256 ячеек. Чтобы прочитать или записать данные из ячейки нужно сначала включить (ACTIVE) нужный блок. Потом подать команду чтения (READ) или записи (WRITE), указав одновременно номер ячейки (COL) в блоке. Если надо затем обратиться к ячейке в другом блоке этот блок надо выключить (PRECHARGE), а новый включить (ACTIVE) и т.д.
Команды и данные подаются синхронно тактовой частоте CK. После команды включения блока или чтения нужно подождать 1 или 2 такта (подавать 1 или 2 команды NOP ). Число зависит от частоты тактов и быстродействия памяти. Раньше на древних компьютерах (в BIOS) выбирали частоту тактов на память (например, 100 или 133 MHz) и режим работы (2-2-2, 3-3-3). Но раньше мы не знали, что это за числа. Так вот сейчас мы это посчитаем и выберем нужный режим.
Частота смены точек на экране TV 7 MHz, на экране VGA 14 MHz. Тактовую для ПЛИС и SDRAM выберем 14*6=84 MHz. tCK=1/84 MHz = 12 nS. Время между включением блока и подачей команды чтения или записи tRCD должно быть не менее 20 nS. При CL=2 tRCD будет равно 24 nS, что соответствует требованиям. То есть выберем режим работы SDRAM 2-2-2. Это значит, что после команды включения блока мы можем пропустить только один такт (подавать команду NOP). После этого получаем данные из памяти. Как видим, SDRAM очень медленно и неудобно работает, но в ней большой объем памяти, который нам нужен для видеокарты. Что же делать? Как ускорить работу ?
SDRAM позволяет читать и писать данные пакетами (BURST). Для нашей видеокарты подходит пакет длиной 8. Причем выберем режим чтения с автоотключением (AUTO PRECHARGE) блока после чтения 8 точек. Т.е. чтобы прочитать 8 точек из буфера спрайтов нужно будет подать следующие команды:
1 такт - ACTIVE (включение нужного блока памяти)
2 такт - NOP (ожидание включения блока)
3 такт - READ с A10=1 (чтение пакета длиной 8 с автоотключением блока)
4 такт - NOP (ожидание из буфера спрайтов первой точки спрайта)
5 - 12 такты - NOP (данные из памяти - последовательно 8 точек спрайта)
Чтение пакетами по 8 точек и организация памяти блоками по 256 ячеек накладывает ограничение на структору видеокарты - размеры спрайтов должны быть кратны 8, иначе может возникнуть ситуация перехода спрайта в другой блок. А SDRAM не может читать последовательно данные из разных блоков.
Последний раз редактировалось zx-kit; 18.06.2015 в 22:01.
"L-256"
Не обязательно NOP, можно другому банку подавать команду, сигналы BAxx выбирают номер банка которому команду отдают
---------- Post added at 21:43 ---------- Previous post was at 21:40 ----------
плохой режим, надо будет после каждого цикла, ждать отключение строки, регенерацию эффективней делать к примеру во время строчного гашения
Видеокарта будет работать так - чтение 8 точек из буфера спрайтов в ПЛИС, запись 8 точек из ПЛИС (с учетом прозрачного цвета) в буфер экрана и т.д. Иногда надо будет прочитать 8 точек из буфера экрана в ПЛИС для отображения на TV или VGA. И все эти данные лежат в разных блоках памяти SDRAM. Выключать и включать блоки (STRINGS) все равно придется после чтения или записи 8 точек.
"L-256"
Ну так положить в разные банки, буфер кадров, данные графики спрайтов, а что бы меньше переключать строки, распологать спрайт в памяти последовательно, тогда к примеру при чтении спрайта, нужно будет ACTIVE выдавать только при смене строки. Опять же, чтение видео данных можно сделать к примеру по 4-8 BURST циклов, вообще с SDRAM по максимуму надо оптимизировать последовательные чтения, при произвольном доступе SDRAM не намного быстрее обычной DRAM
SDRAM имеет аж 4 конвеера, к тому же пока выдает 8 циклов данных, можно опять же подавать команды
---------- Post added at 22:09 ---------- Previous post was at 22:01 ----------
Отключение строки можно всегда послать в командах чтения записи, а вот если включен Auto Precharge - уже не отменить отключение, даже если чтение идет следующих байт в той же строке
Последний раз редактировалось s_kosorev; 18.06.2015 в 22:08.
Если бы спрайт был размером 16х16 точек, то он занял бы весь блок 256 ячеек. Тогда теоретически можно было бы за один пакет прочитать в ПЛИС весь спрайт. Это было бы максимально быстрое чтение.
"L-256"
Можно было бы и стоку из буфера экрана для вывода на TV или VGA (256 точек) читать одним пакетом. Тем более на VGA строку надо показывать дважды. Для таких чтений нужно статическую память и ПЛИС или внутреннюю память FPGA.
Кто за то, чтобы для ускорения работы до приемлемой скорости размеры спрайтов внутри видеокарты были размером 16х16 точек ?
Записывать в буфер экрана можно было бы пакетами по 16 точек.
Последний раз редактировалось zx-kit; 18.06.2015 в 22:28.
"L-256"
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)