Comments 40
У меня как раз на столе появилась макетная плата с maxII с али. Светодиодиком я уже помигал, а вы подкинули замечательную идею что можно еще с ней сделать.
Кстати, все аналоговые стандарты допускают весьма большие допуски с рабочими частотами, не нужно было об этом излишне волноваться. Некоторые жк мониторы даже вполне стабильно работают с частотами разверток ТВ стандарта 15625 и 50 Гц. Такие модели пользуются популярностью у любителей спектрумов.
По поводу "волнистых линий": чипскопом пробовали смотреть выход VGA? Там он наблюдается? Констрейнты на выходные порты написаны? 25МГц не такая уж и большая частота для 6 спартана
Чипскопом не смотрел, и констрейны не описывал. если только на сам клок. Мне кажется в чипскопе такие линии не видны будут, ведь если фаза клока плывет так она плывет для всего проекта, а относительно клока в мониторе они выражаются волнистыми линиями.
Для чипскопа идеально подходит серый градиент: счётчик от 0 до максимума. А раз "волнушка" с амплитудой в пиксель, то и нарушения в счётчике будут отлично видно. Я на циклоне 3 рисовал на VGA 1280х1024@60(108МГц), единственное что картинка генерировалось, а не считалась из памяти
все равно не понимаю как волны в чипскопе будут видны. ведь чипскоп будет на том же клоке что и модуль VGA.
Думаю, вы зря так быстро отбросили DVI: он простой, как палка и верёвка, и работает на любой разумной пискельной частоте.
Выяснилось, что [HDMI —] последовательный, а это значит, частота вывода пикселей составляет порядка 25 МГц, а после сериалайзера — все 250 МГц.
Это совершенно не проблема. Если верить даташиту на это семейство ПЛИС, OSERDES2 (сериализующий выходной дифференциальный буфер) на чипах спидгрейда -2 (такой чип на картинке) выдаёт 500-1080 мегабит/с в зависимости от источника клока. Если не все OSERDES2 заняты под DDR-память, на них можно было бы организовать видеовыход.
Цифры я смотрел тут: https://docs.xilinx.com/v/u/en-US/ds162, стр. 18.
К тому же этот интерфейс требует модуль TMDS [...]
У этого семейства заявлена поддержка TMDS, но есть ограничения по банкам и питающим напряжениям. Для TMDS-источника даже внешних резисторов не надо, они ставятся на стороне приёмника.
Про схему согласования есть в другом даташите: https://docs.xilinx.com/v/u/en-US/ug381, стр. 36.
Внутри данного интерфейса, как и у HDMI, есть LVDS-линии [...]
У вас тут фактическая ошибка. LVDS — это не общий термин для вообще любого дифференциального интерфейса, а отдельный стандарт. У LVDS и TMDS отличаются уровни напряжений и по-разному делается согласование приёмника с источником. Поэтому ни в DVI, ни в HDMI нет LVDS-линий.
А вот и знания пошли) спасибо) я об этом не знал, изучу вопрос на досуге
а вариант как на марсоходе LVDS не рассматривали?https://marsohod.org/projects/plata1/173-phframe2
А вот видео загрузки если интересно, грузил на скорости 115200 бод/с:
Прямо очень живо напомнило загрузку заставки (статической картинки прямо) с кассеты напрямую в видеобуфер на ZX Spectrum, которые там обычно грузились перед игрой или другой большой программой.
Скорее уж загрузку BMP на диалапе. На ZX это совсем не тянет, и линий одна а не 8, и данные о цвете доступны сразу, а не "потом" :)
И сегмент один, а не три!
На крупный BMP без сжатия на диап-ап в принципе тоже.
А по ZX там же очень разные варианты были реализован в зависимости от конкретных разработчиков ПО. Т.к. это не аппаратное ограничение, а реализация загрузчика конкретной софтины, с загрузкой обычно в 3 стадии (иногда и больше): 1 — микро-программа загрузчик, 2 — картинка-заставка, 3 — собственно основная часть ПО.
И по 1 строчке и по 8 строк и с цветом "потом" и цветом сразу варианты были.
Правда с цветом сразу это все-таки не сразу "прямо с кассеты в видеобуфер" с промежуточной буферизацией загружаемых данных в обычной ОЗУ. По схеме кассета ==> рабочее ОЗУ ==> копируем из ОЗУ в видеобуфер ==> продолжаем грузить программу с кассеты в осбоводвшиеся ОЗУ.
Пример серия игр "Саботер": https://www.youtube.com/watch?v=MKZy_d5BTZc
Или робокоп: https://youtu.be/nVyMfMe4YNU?t=49
Сразу с цветом.
И тут построчная (черезстрочная) загрузка прямо в видеопамять (но да, тогда цвет подтягивается "потом") игра Коммандо (видео тоже самое, но перемотать на конец 8й минуты если временная метка не сработает): https://youtu.be/nVyMfMe4YNU?t=529
Но где-то вроде варианты с цветом сразу были, т.к. записано было так, что сначала грузился с кассеты блок с данными о цвете, а потом уже битовая карта самих пикселей против стандартного варианта, когда сначала графика, а потом цвет.
Вот тут большая подборка нестандартных загрузчиков существовавших для ZX:
https://www.youtube.com/watch?v=8e_IkqfMeD4
Основные моменты общие — примерно та же скорость загрузки (вообще у ZX битовая скорость загрузки конечно намного ниже чем 115 кбод в статье, но и разрешение экрана намного ниже), и немного "вырвиглазные" цвета за счет урезанной палитры в отличии от BMP на диал-апе. Скорее тогда уж скорее очень жирный GIF на диал-апе.
CC rkfg
Это да, я имел в виду дефолтную линейную загрузку. Ещё была загрузка по столбцам и квадратами 8х8 в произвольном порядке, причём, сразу с цветовыми атрибутами, так что картинка осмысленно рисовалась в соответствии с задумкой создателя. В какой-то части Dizzy даже сжатие применялось для этой заставки, ну там понятно, что грузилось сначала в буфер, потом оттуда распаковывалось на экран. Алгоритм был то ли RLE, то ли даже Хаффман, не помню.
В робокопе и саботёре слышно же, что картинка грузится как обычно, просто перед загрузкой выставляется цвет тона и фона одинаковый (синий у саботёра и чёрный у робокопа), поэтому пикселей не видно, пока не загрузятся атрибуты. Никакой буфер в другой части памяти тут не участвует.
А видео с загрузчиками очень крутое, даже вон мини-игры встраивали, пока грузится основная игра! Я и десятой части не видел, максимум загрузка по квадратикам, как выше писал, и счётчик в углу с кастомным шрифтом.
интересно а есть какието более менее современные устройства(с поддержкой usb или СОМ порта) которые позволят данные на кассету записать?)
Большинство игр, в которые я играл, загрузку заставки реализовывали через LOAD xxx SCREEN$
что загружает 6912 байт в видеобуфер ZX'a. Всё остальное — вероятно, перезапись функции LOAD как таковая, так как обычно ZX ничего не делает во время загрузки, кроме приема данных и поиска сигнала конца блока данных. Ну и давно это было, но я помню пару игр, которые заставку загружали другим образом, а иногда и эффекты по экрану в процессе загрузки запускали (мини-игр не видел, может, мало 48 кбайт, чтобы ещё и мини-игру всобачить?)
Если поставить 2 чипа памяти, то можно удвоить пропускную способность.
значит надо самому выбрать между HDMI, DVI, VGA. Забегая в перед, скажу, что несмотря на то, что интерфейсы разные,
О как!
DVI-D и HDMI отличаются только разъёмом. DVI-A - да, уникальный.
D - цифра
A - аналоговый сигнал
I - интегрированный (оба)
А мне напомнило ковокс... Но с телевизором вместо осцилла :)
Спасибо за статью, интересные эксперименты! Когда я делал свой VGA-контроллер, я не мог найти информацию, насколько мониторы требовательны к таймингам и как именно должны идти сигналы синхронизации (сдвинут ли vsync относительно hsync, например). Оказывается, мониторы прощают много ошибок.
Полезная статься для меня, я сохраню. Можете показать как реализуете загрузку через юарт?
https://rutube.ru/video/3d194b6d6e6728131820a8f23b3b4c44 ссылка на ролик из статьи
И снова про VGA