НАЧНЕМ ПРОЕКТИРОВАТЬ ПРОШИВКУ ПЛИС:
ИСХОДНЫЕ ДАННЫЕ.
Параметры экрана Спектрума.
1. Цвет точки кодируется четырьмя битами - R,G,B,I.
2. Длительность отображения точки на телевизоре - 1 / (7 МГц) ~ 143 нс.
3. В строке телевизора умещается 56 * 8 = 448 точек. Длительность строки - 64 мкс.
4. В кадре - 312/320 строк. Частота кадров - 50/48 Гц.
Входные сигналы:
1. GND - земля
2. +5V - питание
3. R - цифровой RED
4. G - цифровой GREEN
5. B - цифровой BLUE
6. I - цифровой BRIGHT
7. KSI — кадровые синхроимпульсы
8. SSI — строчные синхроимпульсы
9. F14MHz — тактовые импульсы частотой 14 МГц
Выходные разъемы:
1. DHR-15F - VGA / SCART
2. MDN-4J - S-VIDEO
3. тюльпан 103 1гн. - COMPOSITE VIDEO
Размеры платы: около 60х70 мм.
Входные сигналы ПЛИС (ТТЛ - уровень).
1. R - цифровой RED
2. G - цифровой GREEN
3. B - цифровой BLUE
4. I - цифровой BRIGHT
5. KSI - кадровые синхроимпульсы
6. SSI - строчные синхроимпульсы
7. F14MHz - тактовые импульсы частотой 14 МГц
Выходные сигналы ПЛИС для VGA (размах - 3.3 В).
1. R_VGA - цифровой RED
2. G_VGA - цифровой GREEN
3. B_VGA - цифровой BLUE
4. IR_VGA - цифровой BRIGHT для RED (состояния - 0/Z)
5. IG_VGA - цифровой BRIGHT для GREEN (состояния - 0/Z)
6. IB_VGA - цифровой BRIGHT для BLUE (состояния - 0/Z)
7. VSYNC_VGA - кадровые синхроимпульсы
8. HSYNC_VGA - строчные синхроимпульсы
Выходные сигналы ПЛИС для телевизора (размах - 3.3 В).
1. R_VIDEO - цифровой RED
2. G_ VIDEO - цифровой GREEN
3. B_ VIDEO - цифровой BLUE
4. IR_ VIDEO - цифровой BRIGHT для RED (состояния - 0/Z)
5. IG_ VIDEO - цифровой BRIGHT для GREEN (состояния - 0/Z)
6. IB_ VIDEO - цифровой BRIGHT для BLUE (состояния - 0/Z)
7. SYNC_VIDEO - синхросмесь кадровых и строчных синхромипульсов
ТРЕБУЕТСЯ ПОЛУЧИТЬ.
Сигналы для монитора VGA:
1. Цвет точки кодируется шестью битами - R,G,B,RI,GI,BI.
2. Длительность отображения точки на мониторе - 1 / (14 МГц) ~ 71 нс.
3. В строке монитора умещается 56 * 8 = 448 точек. Длительность строки - 32 мкс.
4. Строку повторять дважды.
5. В кадре режима 1 (исходная частота кадров 50/48 Гц) - 624/640 строк.
6. В кадре режима 2 (частота кадров 60 Гц) - 525 строк.
7. Полярность и длительность гасящих и синхроимпульсов как в режиме VGA 480x640 60Гц.
Сигналы для телевизора:
1. Цвет точки кодируется шестью битами - R,G,B,RI,GI,BI.
2. Длительность отображения точки на телевизоре - 1 / (7 МГц) ~ 143 нс.
3. В строке телевизора умещается 56 * 8 = 448 точек. Длительность строки - 64 мкс.
4. В кадре - 312/320 строк. Частота кадров - 50/48 Гц.
5. Параметры синхроимпульсов — максимально приблизить к параметрам PAL.
Дополнительные возможности.
1. Возможность инверсии всех входных сигналов в соответствии с положением перемычек / тумблеров.
2. Возможность подачи вместо сигналов на VGA сигналов, аналогичных сигналам для телевизора (вместо HSYNC_VGA подать SYNC_VIDEO, вместо VSYNC_VGA подать логическую единицу).
3. ...
ПРИКИНЕМ АДРЕСАЦИЮ ЭКРАНА
Коды цвета RGBI со Спектрума будем записывать в ОЗУ. Для вывода на VGA будем считывать данные из ОЗУ.
Для адресации 448 точек в строке нужно 9 бит адреса ОЗУ: A0...A8 ОЗУ.
Нужно подать частоту F14MHz на счетчик с выходами H0...H8.
Счетчик будем сбрасывать по спаду (при переходе из 1 в 0) входного строчного синхроимпульса.
На ОЗУ адрес точек надо подавать через мультиплексор.
При записи кодов цвета подавать сигналы H0...H8, а при чтении - F14MHz, H0...H7.
Для адресации 312/320 строк нужно 9 бит адреса ОЗУ: A9...A17 ОЗУ.
Нужно подать входные строчные синхроимпульсы на два счетчика с выходами VIN0...VIN8 и VOUT0..VOUT8.
Счетчик VIN будем сбрасывать по спаду входного кадрового синхроимпульса.
Счетчик VOUT сбрасывать не будем, он будет считать автономно от N+0 до N+261/262.
N строк после синхроимпульса изображать не будем, чтобы из частоты 50/48 Гц получить 60.
N нужно уточнить, чтобы изображение было симметрично по-вертикали. Зависит от числа строк в кадре - 312 или 320.
На ОЗУ адрес строк надо подавать через мультиплексор.
При записи кодов цвета подавать сигналы VIN0...VIN8. При чтении - в зависимости от режима.
В режиме 1 (частота кадров 50/48 Гц) подавать адрес VIN0...VIN8, уменьшенный на единицу.
В режиме 2 (частота кадров 60 Гц) - VOUT0..VOUT8.
ПЕРЕСЧИТАЕМ С УЧЕТОМ ГАСЯЩИХ ИМПУЛЬСОВ
Цитата:
Эка вы кадр целиком засунули..
Да и 448-53=395 вообще-то:) Впрочем это не очень важно, у монитора свои понятия о видимой области.
На самом деле видимых строк будет 300 и 240 соответственно, а видимых точек в строке - где-то в районе 360..380.
Посчитаем
Видимая часть экрана VGA:
для 50 Гц составит 448-80=368 на (320*2-28)/2 = 306 точек
для 60 Гц составит 448-80=368 на (525-45)/2 = 240 точек
У меня 17" имеет размер 32 х 24 см формат 4:3
По-горизонтали 368/32 = 11,5
По-вертикали:
Для 50 Гц (320 строк) 306/24 = 12,75 12,75/11,5 = 1.11
Для 60 Гц 240/24 = 10,0 10,0/11,5 = 0,87
Посчитаем для другого монитора
19" Samsung 933SN (LS19CMYKF(Z)) TFT формат 16:9 частота кадров 50-75 Гц.
По-горизонтали 368/16 = 23
По-вертикали:
Для 50 Гц (320 строк) 306/9 = 34 34/23=1.48
Для 60 Гц 240/9 = 26,67 26,67/23 = 1.16
Выводы: Наименьшие искажения для мониторов с форматом 4:3 при 50 Гц,
для мониторов с форматом 16:9 при 60 Гц.
Но это теория - надо смотреть. Может немного поможет регулировка размера на мониторе.
У кого Спектрум подключен к монитору, измерьте, пожалуйста, размер монитора и картинки Спектрума 256х192 точки. Укажите также частоту строк, кадров и способ подключения к монитору...
---------- Post added at 23:49 ---------- Previous post was at 23:22 ----------
Цитата:
Сообщение от
UncleDim
223, 224, 255, 256
Посчитайте, откуда при этих значениях счетчика будут считываться данные для VGA.[COLOR="Silver"]
Спасибо, заметил неточность. Исправил про адресацию точек в строке:
Для адресации 448 точек в строке нужно 9 бит адреса ОЗУ: A0...A8 ОЗУ.
Нужно подать частоту F14MHz на два счетчика с выходами HIN0...HIN8 и HOUT0...HOUT7. Счетчик HOUT должен считать от 0 до 223. Счетчики будем сбрасывать по спаду (при переходе из 1 в 0) входного строчного синхроимпульса.
На ОЗУ адрес точек надо подавать через мультиплексор.
При записи кодов цвета подавать сигналы HIN0...HIN8, а при чтении - F14MHz, HOUT0..HOUT7.
ПЕРВИЧНАЯ ОБРАБОТКА ВХОДНЫХ СИГНАЛОВ
Для выбора режима работы используется семь входов ПЛИС, которые подтянуты резисторами 10 кОм к +5 В. Каждый вход можно соединить с землей с помощью перемычки:
Перемычки для выбора режима:
JP1. INVERSE_RBGI - инверсия кода цвета: ON - инвертировать, OFF - нет.
JP2. INVERSE_KSI - инверсия кадровых синхроимпульсов: ON - инвертировать, OFF - нет.
JP3. INVERSE_SSI - инверсия строчных синхроимпульсов: ON - инвертировать, OFF - нет.
JP4. INVERSE_F14MHZ - инверсия тактовых импульсов : ON - инвертировать, OFF - нет.
JP5. VGA_SCART - выбор сигнала на разъеме VGA: ON - для SCART, OFF - для VGA (в некоторых прошивках не используется).
JP6. SET_FK_IN - не используется.
JP7. SET_FK_OUT- установка выходной частоты кадров: ON - 50/48Гц, OFF - 60 Гц ( для прошивки V3.01 - 100 Гц).
http://s57.radikal.ru/i156/1004/09/1e291ca5801ct.jpg
Инверсия входных сигналов.
Чтобы было не важно, какая фаза или полярность входного сигнала, предусмотрена инверсия входных сигналов. Инверсия соответствующего сигнала выбирается перемычками 1- 4. В ПЛИС инверсию можно реализовать на элементах исключающее или. Если понадобится, добавить инверторы. После данной обработки сигналы получают названия R_IN, G_IN, B_IN, I_IN, KSI_IN, SSI_IN, F14.
В предыдущем описании алгоритма работы с ОЗУ использовать эти полученные сигналы. Например, где написано F14MHz применять новый сигнал F14 .
Синхронизация проинвертированных сигналов.
Далее сигналы цвета, кадровые и строчные синхроимпульсы нормальной полярности подаются на регистр, который записывает сигналы со входа на выход по спаду сигнала F14 (при переходе из 1 в 0).
Формирование сигналов сброса для счетчиков.
Для получения сигнала сброса для счетчиков точек в строке нужно сигнал SSI_IN задержать на пол-периода тактовых импульсов с помощью регистра, который записывает сигналы со входа на выход по фронту сигнала F14 (при переходе из 0 в 1). Получим сигнал SSI_IN2. Далее сделать схему, которая формирует сигнал сброса RES_H. Сигнал должен быть активным, т.е. равен нулю, тогда, когда SSI_IN=0 и SSI_IN2=1.
Для получения сигнала сброса для счетчиков строк нужно сигнал KSI_IN задержать на пол-периода тактовых импульсов с помощью регистра, который записывает сигналы со входа на выход по фронту сигнала F14 (при переходе из 0 в 1). Получим сигнал KSI_IN2. Далее сделать схему, которая формирует сигнал сброса RES_V. Сигнал должен быть активным, т.е. равен нулю, тогда, когда KSI_IN=0 и KSI_IN2=1.