С чего начать при создании графического процессора?


8

Я видел это видео на днях, и это заставило меня задуматься о том, как сделать что-то похожее на графический процессор. Где бы вы начали? Мне больше всего интересно читать о том, как они работают, а не делать из них TTL (пока что).

Я знаю, что это звучит как вопрос «как ты делаешь язык программирования», но любые отправные точки были бы хорошими, так как я понятия не имею, с чего начать.


3
Вы заинтересованы в «высокоскоростной 3D-графике» или «как управлять ЭЛТ / ЖК-дисплеем»
Тоби Джаффей

@ Joby atm просто показывает что-то на дисплее. Квадрат цвета был бы хорош.
Дин

3
Может кто-нибудь объяснить мне, почему я получил отрицательный голос? Так что я могу решить любые вопросы с этим вопросом.
Дин

1
Сложность, с которой я сталкиваюсь в этом вопросе, заключается в том, что между созданием только монохромного 80x25 символьного дисплея, тем, что когда-то можно было назвать генератором видеодисплея, и тем, что подразумевается под «графическим процессором», существует МНОГО земли. Намек на то, что вы, возможно, захотите сделать что-то «из TTL», значительно приближает вас к концу старого генератора дисплея 80x25.
JustJeff

@JustJeff, Ладно, я не знал, как их еще называть, почему они такие разные, если выполняют аналогичную работу?
Дин

Ответы:


16

Это все равно, что пойти на выпускной экзамен по коллажу на урок науки и задать вопрос: опиши вселенную. Будь краток, но лаконичен. Нет никакого способа ответить на этот вопрос любым практическим способом - поэтому я отвечу на другой вопрос.

Какие вещи мне нужно знать, прежде чем пытаться создать графический процессор?

В грубом хронологическом порядке они:

  1. Либо VHDL или Verilog.
  2. FPGA (полезная область для написания цифровой логики).
  3. Базовые данные, такие как FIFO.
  4. Шинные интерфейсы, такие как интерфейс PCIe и DDR2 / 3
  5. Двоичные реализации математических функций, в том числе с плавающей запятой и т. Д.
  6. Дизайн процессора.
  7. Стандарты видеоинтерфейса.
  8. Высокоскоростной аналоговый материал (аналоговая сторона высокоскоростного цифрового)
  9. ФАПЧ и другие полу-продвинутые тактильные устройства.
  10. Проектирование печатных плат высокоскоростных цепей.
  11. Низковольтная, сильноточная конструкция DC / DC преобразователя.
  12. Много-много программного обеспечения.
  13. И, наконец, ASIC или другой дизайн чипа.

Я также осмелюсь сказать, что вы не будете делать подобные вещи из логических чипов 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 и другими видами видеовыходов.


Вау, не короткое задание. Я понимаю, что не было краткого ответа. Но вы дали мне хорошую отправную точку, и мне придется делать это в мое очень ограниченное свободное время. Но должен быть интересный опыт.
Дин

@ Дин Хммм ... Здесь есть три разные вещи: ЦП, ГП и кое-что, чтобы выплевывать видеосигнал. Легко сделать что-то, чтобы выплевывать видеосигнал. Графический процессор больше похож на процессор, предназначенный для обработки видео / графики: 3-D графика, 2-D графика и т. Д. Если вы хотите, чтобы что-то выплевывало видеосигнал, то все готово. Если вам нужна 3-D графика или даже полу-продвинутая 2-D, вам нужно будет просмотреть мой список.

1
Как легко выложить видеосигнал? Я думаю, что это будет лучшим первым шагом.
Дин

@ Декан Я отредактировал свой ответ, чтобы включить материал о том, как выплевывать видеосигнал.

1
Однажды я написал книгу по компьютерной графике (ISBN 0-471-13040-0), но она очень вводная. Еще в 1990-х годах, когда у ATI были только свои чипы MACH64, и они хотели перейти на 3D, они наняли меня в качестве консультанта, чтобы он научил их некоторым концепциям, помог им освоиться и помог с архитектурой. Результатом стали первые фишки RAGE. Я был графическим парнем тогда. Проверьте патент США 5097427, если вы мне не верите. Однако я думаю, что патент на квадратичную интерполяцию (US 5109481) был более важным, но менее ярким. Вы можете узнать некоторые другие имена на них ;-)
Олин Латроп

8

Racing the Beam - это подробный обзор дизайна и работы Atari VCS. Он тщательно обработан адаптером телевизионного интерфейса.

TIA - это самый простой, практичный графический процессор.

Понимание небольшой, но полной, работающей системы может быть хорошим способом изучения нового предмета.

Доступны полные схемы , а также техническое руководство .


Atari 2600 правил! Большинство игровых систем используют аппаратное обеспечение для генерации дисплея, но 2600 все делает по волшебству. Сравните что-то вроде Combat или даже Asteroids с чем-то вроде Toyshop Trouble (Asteroids и Toyshop Trouble оба 8K). Combat показывает два одноцветных объекта с разрешением 2 строки; Toyshop Trouble показывает 16 объектов с разрешением в одну строку и окраской для каждой строки (без мерцания). Никаких дополнительных аппаратных средств для Toyshop Trouble, кроме переключателя банка, чтобы разрешить 8k кода. Просто немного умного кодирования и немного магии.
суперкат

Кстати, программирование 2600 может быть неясным, но один дизайн наложения видео на основе PSOC, который я сделал для покупателя, чувствовал себя скорее 2600-ти. Сконфигурируйте встроенное аппаратное обеспечение, чтобы генерировать некоторые моменты времени, и используйте код для подачи данных на ведомое устройство SPI, чтобы они могли быть синхронизированы в виде пикселей.
суперкат

невероятно, что весь код игры должен был выполняться во время восстановления
трассировки

5

Если вы просто хотите разместить что-то на экране и думаете, что вам действительно очень нравится проводка, вы можете стремиться к графической системе персонажей начала 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.


1

Вам нужно будет начать с некоторых основ архитектуры компьютера и параллельно начать работу с базовым дизайном ASIC с использованием VHDL или другого языка описания.

Как только вы изучите основы компьютерной архитектуры, я бы порекомендовал заняться компьютерной графикой, возможно, начав с простых проектов OpenGL. Основным выводом здесь будет представление об архитектуре рендеринга графического конвейера .

Следующим шагом будет думать о том, как этот конвейер рендеринга может быть реализован с помощью специального оборудования, а не программного обеспечения.

С точки зрения фактического построения графического процессора и подключения его к вашему компьютеру, я не думаю, что это возможно сделать за счет бюджета энтузиаста, но, возможно, есть что-то очень простое, что вы можете попробовать со встроенной платформой ARM-linux (которая выставляет системную шину) и FPGA (в данном случае FPGA - это ваш графический процессор, написанный на VHDL), выводящий на VGA-дисплей низкого разрешения в виде проекта, связывающего все вместе. Это также потребует написания драйверов. Если вы можете сделать это, это будет убийственным в резюме.


1

Посмотрите на высокоуровневые блок-схемы графических процессоров AMD и NVidia. Вероятно, вы найдете довольно много информации от разработчиков opengraphics, которые разрабатывают графическое оборудование с открытым исходным кодом, с драйверами с открытым исходным кодом.

Тогда вам нужно посмотреть на то, что вы хотите.

  • Выход, HDMI, DVI или VGA?
  • Вершинные трансформации?
  • Текстурирование?
  • Затенение пикселей?
  • Отсечение треугольника и растеризация?
  • Любое текстурирование?
  • Растровые операции?

Если вы еще не занимались программированием с использованием функций графического процессора, это также полезно знать.

Я думаю, что Леон также прибил это. Я бы использовал Verilog, если бы я сделал это.

Если вам нужно только композитное видео, как в видео, которое вы разместили. Есть много примеров там. Черт возьми, посмотрите на реализацию Воз II Apple II. :)


1
@Leon оставил комментарий? Если это так, я не могу просмотреть это.
Дин

Я удалил это. Я предложил использовать FPGA для реализации простого процессора. Я сделал это несколько лет назад с дизайном из книги, написанной на VHDL, которую я модифицировал для своего оборудования.
Леон Хеллер

Ах, хорошо, вот почему я вижу это.
Дин

1

Похоже, вы не хотите делать GPU (в смысле 3d и затенения всего этого) столько, сколько видеогенератор. На многих платах FPGA eval имеется разъем для монитора VGA или другого типа, а также примеры проектов от производителя или других пользователей для отображения объектов на этом мониторе. Есть также некоторые платы со встроенными ЖК-дисплеями, но они, как правило, относятся к классу от 300 долларов и выше, в то время как основные платы, которые могут управлять стандартным монитором, стоят от 60 до 120 долларов.

Большинство FGPA не имеют достаточно внутренней памяти, чтобы сделать больше, чем маленький дисплей, но тогда многие платы имеют внешнюю память с большей емкостью. Многие из них управляют аналоговыми VGA-мониторами в цифровом виде, т. Е. RG и B либо полностью включены, либо полностью выключены, хотя некоторые из них дают вам два уровня, и вы, вероятно, можете найти один с видео ЦАП или разъемом для интерфейса цифрового монитора.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.