Я видел это видео на днях, и это заставило меня задуматься о том, как сделать что-то похожее на графический процессор. Где бы вы начали? Мне больше всего интересно читать о том, как они работают, а не делать из них TTL (пока что).
Я знаю, что это звучит как вопрос «как ты делаешь язык программирования», но любые отправные точки были бы хорошими, так как я понятия не имею, с чего начать.
Ответы:
Это все равно, что пойти на выпускной экзамен по коллажу на урок науки и задать вопрос: опиши вселенную. Будь краток, но лаконичен. Нет никакого способа ответить на этот вопрос любым практическим способом - поэтому я отвечу на другой вопрос.
Какие вещи мне нужно знать, прежде чем пытаться создать графический процессор?
В грубом хронологическом порядке они:
Я также осмелюсь сказать, что вы не будете делать подобные вещи из логических чипов TTL. Я сомневаюсь, что вы могли бы получить разумный интерфейс памяти DDR2 / 3, работающий с обычными чипами TTL. Использовать большую FPGA было бы намного проще (но не просто).
Переход к шагу 6, вероятно, будет «достаточно хорош, чтобы утолить вашу интеллектуальную жажду». Это также может быть сделано в течение разумного периода времени - около года - для определения краткосрочной цели.
РЕДАКТИРОВАТЬ: Если все, что вы хотите сделать, это выплевывать видео сигнал, то это относительно легко. По сути, это кусок памяти, который смещается на дисплей с частотой 60 Гц. Дьявол кроется в деталях, но вот примерный план того, как это сделать:
Начните с некоторого двухпортового ОЗУ. Это не обязательно должен быть двухпортовый ОЗУ, просто некоторая оперативная память, которую ЦП может читать / записывать и которую может читать ваша видеосистема. Размер и скорость этого ОЗУ будут зависеть от того, какой дисплей вы используете. Я бы лично использовал DDR2 SDRAM, подключенный к интерфейсу памяти FPGA Xilinx Spartan-6. Их ядро «генератора интерфейса памяти» (MIG) позволяет легко превратить это в двухпортовый ОЗУ.
Затем спроектируйте схему, которая будет контролировать, как читается эта RAM, и выплевывать эти данные из простой шины. Обычно вы просто читаете ОЗУ последовательно. «Простой автобус» на самом деле просто так. Это несколько битов со значением в пикселях - и все. Эта схема должна будет сделать еще две вещи: она должна будет возвращаться к началу ОЗУ каждый видеокадр, и ей придется «приостанавливать» вывод во время периодов горизонтального / вертикального восстановления.
В-третьих: создайте схему, которая будет выводить сигналы управления видео (HSync, Vsync и т. Д.), А также сообщите предыдущей схеме, когда следует приостановить и перезапустить. Эти схемы на самом деле довольно легко сделать. Найти подходящий видео стандарт сложнее, imho.
И наконец: подключите управляющие сигналы и шину данных видеопикселя к «чему-то». Это может быть маленький цветной ЖК-дисплей. Это может быть видео ЦАП для вывода VGA-совместимого сигнала. Существуют кодеры NTSC / PAL, которые принимают эти сигналы. И т.п.
Если разрешение действительно мало, вы можете использовать внутреннюю память FPGA вместо внешней DDR2 SDRAM. Я должен предупредить вас, что если используется DDR2 SDRAM, вам, вероятно, потребуется FIFO и некоторые другие вещи, но это тоже не так уж сложно. Но с DDR2 SDRAM вы можете поддерживать дисплеи довольно высокого разрешения. Вы также можете найти платы разработки FPGA со встроенными ЦАПами VGA и другими видами видеовыходов.
источник
Racing the Beam - это подробный обзор дизайна и работы Atari VCS. Он тщательно обработан адаптером телевизионного интерфейса.
TIA - это самый простой, практичный графический процессор.
Понимание небольшой, но полной, работающей системы может быть хорошим способом изучения нового предмета.
Доступны полные схемы , а также техническое руководство .
источник
Если вы просто хотите разместить что-то на экране и думаете, что вам действительно очень нравится проводка, вы можете стремиться к графической системе персонажей начала 1980-х годов. Если вы сможете выбрать время для RS-170A, вы даже сможете подать сигнал на запасной AV-вход на 50-дюймовом плазменном телевизоре и начать ретроспективно.
Некоторые ранние системы использовали свои 8-битные процессоры для непосредственного генерирования дисплея, например, 6507 в Atari 2600 и Z-80 в Timex Sinclair ZX-81. Вы можете даже сделать то же самое с современными микроконтроллерами. Преимущество этого способа в том, что аппаратное обеспечение простое, но программное обеспечение, как правило, должно быть на ассемблере, и оно очень требовательно, и результаты будут по-настоящему ошеломляющими. Возможно, 2600 использовали дополнительное аппаратное обеспечение, но у TIA не было большого количества FIFO, и 6502 (ну, действительно, 6507) должны были сбрасывать в него байты в реальном времени. В этом подходе нет стандартного режима видео; Каждое приложение, которое использует видео, должно быть тесно связано с необходимостью поддержания потока пикселей.
Если вы действительно хотите создать что-то из TTL, следующим уровнем сложности будет выбор текстового отображения на основе ROM. Это позволяет поместить любой, скажем, 256 символов в любой из, например, 40 столбцов и 25 позиций строк. Есть несколько способов сделать это.
Один из способов - сделать то, что сделал модель TRS80, которую я сделал. Группа из 74161 счетчиков с ассортиментом ворот генерировала видео-адрес; три 74157-х мультиплексируют 12-битный адрес ЦП с видео-адресом для подачи адреса в 2К статического ОЗУ. Данные ОЗУ буферизировались обратно в ЦП, но подавались без буферизации в качестве адреса в ПЗУ набора символов. Не было автобусного арбитража; если ЦП требовал видеопамяти, включалась видеосистема, что приводило к эффекту «снега». Адрес мультиплексированного видео был объединен с некоторыми строками из секции счетчика, чтобы округлить низкие адреса; вывод ПЗУ символов был сброшен в регистр сдвига 74166. Все это отделилось от кристалла 14,31818 МГц. При таком подходе у вас будет ровно один видеорежим, полностью реализованный на аппаратном уровне, например 40x25 или 64x16 и т. Д.,
Другой способ - собрать так называемую микросхему CRTC, такую как 6845. Они объединили большую часть логики счетчика и склеивания и предоставили процессору интерфейс управляющего регистра, чтобы вы могли перепрограммировать некоторые моменты времени. Такие системы можно сделать несколько более гибкими, например, вы можете получить 40x25 и 80x25 из одного и того же оборудования под контролем регистра. Если вы разбираетесь в тактовых частотах, вы можете позволить своему ЦП иметь свободный доступ к видеопамяти в течение одной половины часов, а генератор видеоадреса - в течение другой половины часов, что устраняет необходимость арбитража шины и устранение эффекта снега.
Однако, если вы хотите использовать реальные графические режимы, вы быстро обнаружите, что создавать собственные режимы проблематично. Первоначально Apple 2 управляла этим, но в этой системе было что-то вроде 110 MSI TTL-чипов, и даже при этом были некоторые забавные вещи, такие как нелинейное отображение видеобуфера на дисплей и крайне ограниченная цветовая палитра. , чтобы назвать два. И Воз считается общепризнанным, что имел подсказку. К тому времени, когда появился «2e», Apple уже включила видеосистему в специальный чип. Примерно в то же время C-64 обязан своими графическими возможностями специальным чипам.
Так что .. я бы сказал там о двух способах сделать это. Один из способов - достать ваше ведро старого TTL и стремиться к одноцветному текстовому дисплею 80x25; Другой способ - получить хорошую оценочную плату ПЛИС, выполнить все это на VHDL и начать с текстового дисплея 80x25.
источник
Вам нужно будет начать с некоторых основ архитектуры компьютера и параллельно начать работу с базовым дизайном ASIC с использованием VHDL или другого языка описания.
Как только вы изучите основы компьютерной архитектуры, я бы порекомендовал заняться компьютерной графикой, возможно, начав с простых проектов OpenGL. Основным выводом здесь будет представление об архитектуре рендеринга графического конвейера .
Следующим шагом будет думать о том, как этот конвейер рендеринга может быть реализован с помощью специального оборудования, а не программного обеспечения.
С точки зрения фактического построения графического процессора и подключения его к вашему компьютеру, я не думаю, что это возможно сделать за счет бюджета энтузиаста, но, возможно, есть что-то очень простое, что вы можете попробовать со встроенной платформой ARM-linux (которая выставляет системную шину) и FPGA (в данном случае FPGA - это ваш графический процессор, написанный на VHDL), выводящий на VGA-дисплей низкого разрешения в виде проекта, связывающего все вместе. Это также потребует написания драйверов. Если вы можете сделать это, это будет убийственным в резюме.
источник
Посмотрите на высокоуровневые блок-схемы графических процессоров AMD и NVidia. Вероятно, вы найдете довольно много информации от разработчиков opengraphics, которые разрабатывают графическое оборудование с открытым исходным кодом, с драйверами с открытым исходным кодом.
Тогда вам нужно посмотреть на то, что вы хотите.
Если вы еще не занимались программированием с использованием функций графического процессора, это также полезно знать.
Я думаю, что Леон также прибил это. Я бы использовал Verilog, если бы я сделал это.
Если вам нужно только композитное видео, как в видео, которое вы разместили. Есть много примеров там. Черт возьми, посмотрите на реализацию Воз II Apple II. :)
источник
Похоже, вы не хотите делать GPU (в смысле 3d и затенения всего этого) столько, сколько видеогенератор. На многих платах FPGA eval имеется разъем для монитора VGA или другого типа, а также примеры проектов от производителя или других пользователей для отображения объектов на этом мониторе. Есть также некоторые платы со встроенными ЖК-дисплеями, но они, как правило, относятся к классу от 300 долларов и выше, в то время как основные платы, которые могут управлять стандартным монитором, стоят от 60 до 120 долларов.
Большинство FGPA не имеют достаточно внутренней памяти, чтобы сделать больше, чем маленький дисплей, но тогда многие платы имеют внешнюю память с большей емкостью. Многие из них управляют аналоговыми VGA-мониторами в цифровом виде, т. Е. RG и B либо полностью включены, либо полностью выключены, хотя некоторые из них дают вам два уровня, и вы, вероятно, можете найти один с видео ЦАП или разъемом для интерфейса цифрового монитора.
источник