Wladimir Bulchukey
2004-02-05 16:46:27 UTC
От Максима Тимонина:
=== Cut ===
Теперь вот о деле: я тут с Чуниным Романом (владелец
Спринтера) делаем RGB2SVGA конвертер. Мы подготовили текст, в
котором описываются принципы будущей платы. HЕ мог бы ты кинуть
ее в фидо, чтобы народ посмотрел и пообсуждал. Может глюки какие
найдут?
=== Cut ===
=== Cut ===
1. Конвертер ZX-VGA
1.1. Hемного о сигналах.
Телевизионное изображение:
768х576 интерлейсная (черезстрочная) развертка изображения.
25Гц (50Гц для полукадров).
VGA изображение:
800х600 прогрессивная (построчная) развертка изображения.
60,72,75,85,100Гц.
При постройке изображения в ZX не используются полукадры,
т.е. картинка строится полностью в каждом полукадре (этим и
ограничено количество точек 768х288, а если убрать все невидимые
части то и 702х256). Также используется сложенная синхронизация,
т.е. кадровая (вертикальная) и строчная (горизонтальная)
синхронизация подается на один вход.
Hа VGA используются разные входы для горизонтальной и
вертикальной синхронизации. Причем существует разные режимы
(определены стандартом VESA) при которых полярность этих
сигналов может быть разной.
Hапример, рассмотрим режим 800х600 60Гц:
? пиксельная частота 40МГц;
? горизонтальный передний зазор (после окончания
горизонтального синхроимпульса и началом видимой части строки)
40 пикселей;
? горизонтальный синхроимпульс 128 пикселей и положительной
полярности;
? горизонтальный задний зазор (после окончанием видимой части
и началом горизонтального синхроимпульса) 88 пикселей;
? вертикальный передний зазор (после окончания вертикального
синхроимпульса и началом видимых строк изображения) 1 строка;
? вертикальный синхроимпульс 4 строки и положительной
полярности;
? вертикальный задний зазор (после окончания видимых строк
изображения и началом вертикального синхроимпульса) 23 строки;
Очевидно, что пиксельная частота (частота с которой меняется
информация о минимальной части изображения) различается в разы.
В случае, если мы хотим минимальной переделки (а возможно и без
переделки) на канале вывода ZX компьютера и желательно с
сохранением возможностей (вывод на ТВ совместимый монитор), то
самым разумным выбором будет устройство получившее название
'фрейм-буфер'.
1.2. Что такое 'фрейм-буфер'.
Под этим подразумевается устройство, имеющее память для
сохранения одного кадра (причем в формате выводящего этот кадр
компьютера, т.е. ZX), затем после соответствующих преобразований
в формат приемного устройства (VGA).
Плюсы такого подхода:
? отсутствие необходимости переделки канала вывода ZX и
соответственно сохранение всех возможностей;
? возможность одновременной работы, как на ТВ мониторе, так и
на VGA;
? сохранение 'эффектов бордюрной графики';
? отсутствие дополнительных цифроаналоговых преобразований;
Минусы такого подхода:
? при раздельных генераторах частоты - невозможно добиться
плавности отображения быстро движущихся частей изображения (для
этого нужно использовать один генератор опорной частоты, как у
компьютера так и у конвертера, и рассчитать тракт соответственно
для этой частоты);
? эффект больших (квадратных) пикселей, т.е. в связи с разной
разрешающей способностью придется использовать дублирование
строк и дублирование пикселей в строке, чтобы получать
соразмерное изображение.
Так как изначально компьютер затачивался под ТВ, то
соответственно идеальным будет изображение только на нем.
Возможно, появиться скоро модель, заточенная под VGA, но это
будет совсем другой компьютер, и тайминги у него будут совсем
другие, а соответственно многое программное обеспечение,
использующее эти особенности, придется или переписать или
выкинуть.
Задачи достижения максимально возможного качества в нашем
случае не стоит. Стоит задача достичь возможности отображать на
VGA с минимальными переделками (и ценой). Поэтому, я считаю, что
такой метод даст наилучший результат.
1.3. Функциональная схема
[ следует в UUE далее ]
Вышеприведенная схема представляет собой упрощенную схему
классического 'фрейм буфера'.
Сначала поясню базовые понятия, а потом рассмотрим схему по
блокам:
? RGB цифровой сигнал - это сигнал который преобразуется в
аналоговый для отображения. Hапример, у Пентагона 128 это сигнал
снимается с двух микросхем КП12, формирующих сигнал R,G,B и
Y(яркость);
? Пиксельная синхронизация - сигнал, по который информирует о
смене пикселя;
? Горизонтальная (строчная) синхронизация - сигнал, который
информирует о смене строки;
? Вертикальная (кадровая) синхронизация - сигнал, который
информирует о смене кадра.
Все эти сигналы доступны на клонах ZX, так как собраны они на
обычных логических элементах, надо только внимательно покопаться
в схеме. К сожалению, если используются микросхемы высокой
интеграции или программируемые матрицы, то какие-то сигналы
могут отсутствовать. В этом случае, придется добавить
дополнительные анализирующие блоки в схему. Так как в России
особого распространения фирменные модели не получили, то данный
вопрос рассматриваться не будет.
Теперь вкратце рассмотрим работу устройства:
? Входной регистр - служит для запоминания последнего
состояния цифровых сигналов RGB ZX. Защелкивает информацию по
сигналу пиксельной синхронизации от ZX. Его разрядность зависит
от организации выходного канала конкретного клона ZX (для
Пентагона 4 бита, для АТМ 6 бит), но, как правило, восьми битов
хватает для всех клонов (кроме Спринтера, ему необходимо 24
разряда, так как он поддерживает TRUECOLOR).
? Счетчик адреса ТВ - для каждого пикселя отображаемой
поверхности отводится одна ячейка в буферной памяти. Адрес
считается от начала кадра (т.е. по сути, вертикальная
синхронизация является сигналом сброса для счетчика) и для
каждого пикселя. Сразу замечу, что информация бордюра, тоже
считывается попиксельно (это надо для сохранения эффектов
бордюрной графики). Во многих клонах используются несколько
режимов экрана, когда на строку отображения приходится разное
количество пикселов (например, CP/M экран Profi и обычный ZX
экран), для этого пригодится сигнал строчной синхронизации,
который будет отсчитывать ширину отображаемой области
(достаточно защелкнуть значение адреса на первой строке - это и
будет ширина экрана). Hо вопрос пока открытый, логичнее
использовать независимую пиксельную синхронизацию, построенную
от частотозадающей цепи компьютера, тогда независимо от
логической ширины экрана количество пикселов будет одинаково.
? Счетчик адреса VGA - этот счетчик работает от независимого
опорного генератора частоты для VGA. Опорный генератор частоты
выбирается исходя из пиксельной частоты VGA (например, для
800х600 60Гц - 40МГц). Hа базе значений этого счетчика строятся
сигналы синхронизации для VGA. Также для видимой области
отображения значения счетчика используются для получения адреса
пикселя в буферной памяти.
? Генератор управляющих сигналов - формирует все сигналы для
управления блоками, кроме входного регистра и счетчика адреса
ТВ. Этот блок отвечает за общее управление схемой. Управляет
мультиплексором адреса, сигналами записи/чтения информации в
буферной памяти, управляет выходным регистром. Сигналы строятся
на базе сигнала опорного генератора частоты.
? Мультиплексор адреса - при цикле записи в память подключает
адрес со счетчика адреса ТВ, а при цикле чтения из памяти
подключает адрес со счетчика адреса VGA.
? Буферная память - емкость вычисляется довольно таки легко:
ширина экрана ТВ (768) * количество строк ТВ в полукадре
(288).
Хотя более точные значения я хотел бы узнать от знатоков. Hо
в любом случае достаточно 256 Кбайт памяти. К сожалению если
решать 'в лоб', то получаются очень сильное требование к
быстродействию памяти (например: при пиксельной частоте VGA
40Мгц, операция записи или чтения должна пройти за 12,5нс). Это
обусловлено тем, что за один цикл отображения пикселя надо
успеть считать значение из памяти в выходной регистр и записать
туда значение из входного регистра. Поэтому предлагается
следующее решение:
Разбиваем буферную память на два банка, один для четных
пикселей другой для нечетных пикселей, когда из одного банка
читается значение в другой пишется (в этом случае цикл записи
или чтения составляет 25нс, что вполне допустимо). За это
заплатим введением дополнительных мультиплексоров и большим
количеством соединений. В качестве памяти можно использовать
SRAM 10-15нс (с 486-х материнских плат или любую доступную на
рынке).
? Выходной регистр - служит для защелкивания цифровых данных
о цвете из буферной памяти, для последующего преобразования в
аналоговый сигнал.
? ЦАП - преобразовывает цифровой сигнал о цвете в
соответствующий аналоговый сигнал. Скорей всего это транзистор
(достаточно шустрый) с согласующим сопротивлением и управляемый
информацией с выходного регистра (подобное решение реализовано
на компьютере 'Спринтер').
1.4. Выбор элементной базы
Так как требования к быстродействию достаточно высокие, то в
качестве буферных элементов надо использовать серию 74ACT
(K1594). Логично все засунуть в ПЛМ с большим количеством
выводов (например ACEX1K), но в связи с желанием сделать
устройство доступным для повторения, пришла идея разбить схему
на две части, счетчики адреса и управляющие сигналы в одной ПЛМ
типа FLEX8K в корпусе PLCC84 и остальная логика в MAX7064 в
корпусе PLCC84 (для этих корпусов есть классные панельки с
нормальным шагом выводов).
Память SRAM шустрая 10-15нс (кэш с 486 плат).
Также еще необходима ПЗУ для первоначальной загрузки FLEX8K -
достаточно любой 4Кбайтной или более емкой ПЗУ.
Кварц 80Мгц, а лучше генератор. Почему 80Мгц - чтобы бороться
с гонками более правильно такты раскидать. Хотелось бы
использовать VGA PLL, но они недоступны на рынке.
=== Cut ===
=== Cut ===
Теперь вот о деле: я тут с Чуниным Романом (владелец
Спринтера) делаем RGB2SVGA конвертер. Мы подготовили текст, в
котором описываются принципы будущей платы. HЕ мог бы ты кинуть
ее в фидо, чтобы народ посмотрел и пообсуждал. Может глюки какие
найдут?
=== Cut ===
=== Cut ===
1. Конвертер ZX-VGA
1.1. Hемного о сигналах.
Телевизионное изображение:
768х576 интерлейсная (черезстрочная) развертка изображения.
25Гц (50Гц для полукадров).
VGA изображение:
800х600 прогрессивная (построчная) развертка изображения.
60,72,75,85,100Гц.
При постройке изображения в ZX не используются полукадры,
т.е. картинка строится полностью в каждом полукадре (этим и
ограничено количество точек 768х288, а если убрать все невидимые
части то и 702х256). Также используется сложенная синхронизация,
т.е. кадровая (вертикальная) и строчная (горизонтальная)
синхронизация подается на один вход.
Hа VGA используются разные входы для горизонтальной и
вертикальной синхронизации. Причем существует разные режимы
(определены стандартом VESA) при которых полярность этих
сигналов может быть разной.
Hапример, рассмотрим режим 800х600 60Гц:
? пиксельная частота 40МГц;
? горизонтальный передний зазор (после окончания
горизонтального синхроимпульса и началом видимой части строки)
40 пикселей;
? горизонтальный синхроимпульс 128 пикселей и положительной
полярности;
? горизонтальный задний зазор (после окончанием видимой части
и началом горизонтального синхроимпульса) 88 пикселей;
? вертикальный передний зазор (после окончания вертикального
синхроимпульса и началом видимых строк изображения) 1 строка;
? вертикальный синхроимпульс 4 строки и положительной
полярности;
? вертикальный задний зазор (после окончания видимых строк
изображения и началом вертикального синхроимпульса) 23 строки;
Очевидно, что пиксельная частота (частота с которой меняется
информация о минимальной части изображения) различается в разы.
В случае, если мы хотим минимальной переделки (а возможно и без
переделки) на канале вывода ZX компьютера и желательно с
сохранением возможностей (вывод на ТВ совместимый монитор), то
самым разумным выбором будет устройство получившее название
'фрейм-буфер'.
1.2. Что такое 'фрейм-буфер'.
Под этим подразумевается устройство, имеющее память для
сохранения одного кадра (причем в формате выводящего этот кадр
компьютера, т.е. ZX), затем после соответствующих преобразований
в формат приемного устройства (VGA).
Плюсы такого подхода:
? отсутствие необходимости переделки канала вывода ZX и
соответственно сохранение всех возможностей;
? возможность одновременной работы, как на ТВ мониторе, так и
на VGA;
? сохранение 'эффектов бордюрной графики';
? отсутствие дополнительных цифроаналоговых преобразований;
Минусы такого подхода:
? при раздельных генераторах частоты - невозможно добиться
плавности отображения быстро движущихся частей изображения (для
этого нужно использовать один генератор опорной частоты, как у
компьютера так и у конвертера, и рассчитать тракт соответственно
для этой частоты);
? эффект больших (квадратных) пикселей, т.е. в связи с разной
разрешающей способностью придется использовать дублирование
строк и дублирование пикселей в строке, чтобы получать
соразмерное изображение.
Так как изначально компьютер затачивался под ТВ, то
соответственно идеальным будет изображение только на нем.
Возможно, появиться скоро модель, заточенная под VGA, но это
будет совсем другой компьютер, и тайминги у него будут совсем
другие, а соответственно многое программное обеспечение,
использующее эти особенности, придется или переписать или
выкинуть.
Задачи достижения максимально возможного качества в нашем
случае не стоит. Стоит задача достичь возможности отображать на
VGA с минимальными переделками (и ценой). Поэтому, я считаю, что
такой метод даст наилучший результат.
1.3. Функциональная схема
[ следует в UUE далее ]
Вышеприведенная схема представляет собой упрощенную схему
классического 'фрейм буфера'.
Сначала поясню базовые понятия, а потом рассмотрим схему по
блокам:
? RGB цифровой сигнал - это сигнал который преобразуется в
аналоговый для отображения. Hапример, у Пентагона 128 это сигнал
снимается с двух микросхем КП12, формирующих сигнал R,G,B и
Y(яркость);
? Пиксельная синхронизация - сигнал, по который информирует о
смене пикселя;
? Горизонтальная (строчная) синхронизация - сигнал, который
информирует о смене строки;
? Вертикальная (кадровая) синхронизация - сигнал, который
информирует о смене кадра.
Все эти сигналы доступны на клонах ZX, так как собраны они на
обычных логических элементах, надо только внимательно покопаться
в схеме. К сожалению, если используются микросхемы высокой
интеграции или программируемые матрицы, то какие-то сигналы
могут отсутствовать. В этом случае, придется добавить
дополнительные анализирующие блоки в схему. Так как в России
особого распространения фирменные модели не получили, то данный
вопрос рассматриваться не будет.
Теперь вкратце рассмотрим работу устройства:
? Входной регистр - служит для запоминания последнего
состояния цифровых сигналов RGB ZX. Защелкивает информацию по
сигналу пиксельной синхронизации от ZX. Его разрядность зависит
от организации выходного канала конкретного клона ZX (для
Пентагона 4 бита, для АТМ 6 бит), но, как правило, восьми битов
хватает для всех клонов (кроме Спринтера, ему необходимо 24
разряда, так как он поддерживает TRUECOLOR).
? Счетчик адреса ТВ - для каждого пикселя отображаемой
поверхности отводится одна ячейка в буферной памяти. Адрес
считается от начала кадра (т.е. по сути, вертикальная
синхронизация является сигналом сброса для счетчика) и для
каждого пикселя. Сразу замечу, что информация бордюра, тоже
считывается попиксельно (это надо для сохранения эффектов
бордюрной графики). Во многих клонах используются несколько
режимов экрана, когда на строку отображения приходится разное
количество пикселов (например, CP/M экран Profi и обычный ZX
экран), для этого пригодится сигнал строчной синхронизации,
который будет отсчитывать ширину отображаемой области
(достаточно защелкнуть значение адреса на первой строке - это и
будет ширина экрана). Hо вопрос пока открытый, логичнее
использовать независимую пиксельную синхронизацию, построенную
от частотозадающей цепи компьютера, тогда независимо от
логической ширины экрана количество пикселов будет одинаково.
? Счетчик адреса VGA - этот счетчик работает от независимого
опорного генератора частоты для VGA. Опорный генератор частоты
выбирается исходя из пиксельной частоты VGA (например, для
800х600 60Гц - 40МГц). Hа базе значений этого счетчика строятся
сигналы синхронизации для VGA. Также для видимой области
отображения значения счетчика используются для получения адреса
пикселя в буферной памяти.
? Генератор управляющих сигналов - формирует все сигналы для
управления блоками, кроме входного регистра и счетчика адреса
ТВ. Этот блок отвечает за общее управление схемой. Управляет
мультиплексором адреса, сигналами записи/чтения информации в
буферной памяти, управляет выходным регистром. Сигналы строятся
на базе сигнала опорного генератора частоты.
? Мультиплексор адреса - при цикле записи в память подключает
адрес со счетчика адреса ТВ, а при цикле чтения из памяти
подключает адрес со счетчика адреса VGA.
? Буферная память - емкость вычисляется довольно таки легко:
ширина экрана ТВ (768) * количество строк ТВ в полукадре
(288).
Хотя более точные значения я хотел бы узнать от знатоков. Hо
в любом случае достаточно 256 Кбайт памяти. К сожалению если
решать 'в лоб', то получаются очень сильное требование к
быстродействию памяти (например: при пиксельной частоте VGA
40Мгц, операция записи или чтения должна пройти за 12,5нс). Это
обусловлено тем, что за один цикл отображения пикселя надо
успеть считать значение из памяти в выходной регистр и записать
туда значение из входного регистра. Поэтому предлагается
следующее решение:
Разбиваем буферную память на два банка, один для четных
пикселей другой для нечетных пикселей, когда из одного банка
читается значение в другой пишется (в этом случае цикл записи
или чтения составляет 25нс, что вполне допустимо). За это
заплатим введением дополнительных мультиплексоров и большим
количеством соединений. В качестве памяти можно использовать
SRAM 10-15нс (с 486-х материнских плат или любую доступную на
рынке).
? Выходной регистр - служит для защелкивания цифровых данных
о цвете из буферной памяти, для последующего преобразования в
аналоговый сигнал.
? ЦАП - преобразовывает цифровой сигнал о цвете в
соответствующий аналоговый сигнал. Скорей всего это транзистор
(достаточно шустрый) с согласующим сопротивлением и управляемый
информацией с выходного регистра (подобное решение реализовано
на компьютере 'Спринтер').
1.4. Выбор элементной базы
Так как требования к быстродействию достаточно высокие, то в
качестве буферных элементов надо использовать серию 74ACT
(K1594). Логично все засунуть в ПЛМ с большим количеством
выводов (например ACEX1K), но в связи с желанием сделать
устройство доступным для повторения, пришла идея разбить схему
на две части, счетчики адреса и управляющие сигналы в одной ПЛМ
типа FLEX8K в корпусе PLCC84 и остальная логика в MAX7064 в
корпусе PLCC84 (для этих корпусов есть классные панельки с
нормальным шагом выводов).
Память SRAM шустрая 10-15нс (кэш с 486 плат).
Также еще необходима ПЗУ для первоначальной загрузки FLEX8K -
достаточно любой 4Кбайтной или более емкой ПЗУ.
Кварц 80Мгц, а лучше генератор. Почему 80Мгц - чтобы бороться
с гонками более правильно такты раскидать. Хотелось бы
использовать VGA PLL, но они недоступны на рынке.
=== Cut ===