Как стать автором
Обновить

Комментарии 24

Теперь надо GTA V портировать ;)
Хе-хе)
Не, вся видеомагия от меня слишком далека)

Можно попробовать написать какой-нибудь экшен, типа пакмана (на чистом Verilog'e без процессора), но я не знаю трюков для видеоотображения, которые применяли разработчики того времени.

Здесь фактически я отрисовываю статичную картинку, т.к. меняется очень редко, а в экшене немного не так)
НЛО прилетело и опубликовало эту надпись здесь
Вы правы, процессор может помочь в «запуске» более серьезных игр.
В некоторых реализациях того же тетриса используют «софтовый» процессор (NIOS) внутри самой FPGA. Я намеренно отказался от такого, т.к. мне было интересно сделать без процессора)
На используемый в отладке Cortex-A9 можно накатать Linux или Android и ставить игрушки из Play market, но публикация получится о другом.
Мой коллега попросил прокомментировать пост (пока у него нет возможности оставлять комментарии):

«Спасибо за статью, отличный пример под популярный кит!
По поводу „разводов“ на фотографиях экрана. Настройки тут не при чем,
это муаров эффект — по сути нарушение теоремы Котельникова в
пространственной области. А неравномерность узора по экрану скорее всего
обусловлена дисторсией объектива фотоаппарата.»
НЛО прилетело и опубликовало эту надпись здесь
Хех)
В принципе, если там интерфейс с дисплеем не сложный, почему бы и нет?
Я думаю, что в плане управления он должен быть проще чем VGA. поле X*Y + несколько семисигментных индикаторов. Вот только разъём чуть сложнее припаивается.
Черт, это круто. Вы мотивировали меня купить этот KIT и попробовать свои силы
По поводу размеров шрифта, если увеличивать букву нужно кратно двум, то это реализуемой с помощью автомата. При чтении из памяти нужно каждый пиксель считывать N раз, и повторять при выводе N строк. это самое простое увеличение без сглаживания. При этом не нужно хранить несколько разных шрифтов (ресурсы не бесконечны). Полная таблица шрифтов 11*7 займёт меньше ячеек чем 32*16. хотя последние будут рисоваться более красиво.
Быстро управились — 5 дней на реализацию такого проекта на ПЛИС — это круто!

Я так понял никакого фреймбуфера вы не использовали при выводе на экран, а непосредственно генерировали цвета текущих пикселей?

Поясните, чем на ваш взгляд SystemVerilog отличается от Verilog, и как эти отличия помогли вам в этой проекте.
Спасибо.

Да, фреймбуфера не было. Просто генерировал цвета в зависимости от pixel_x, pixel_y. см. файлы draw_*

Я не думаю, что мой взгляд на разницу Verilog от Systemverilog'a отличается от общепринятого :)
Из того, что я использовал в этом проекте:
  • В стандарте 2001 года не было struct и enum.
  • always_comb — не надо думать о списке чувствительности когда описываешь комбинационку. always_ff — это триггер.
  • logic — не надо думать о reg/wire.

В других проектах использую и интерфейсы, и package.

Как отличия помогли в проекте?

Ну, например, если бы не было структуры game_data_t, то мне было бы лень тащить сигнал game_over_state, а так добавил в структуру — она появилась в модуле draw_strings. Либо например структура block_info_t — содержит информацию о блоке. Удобно — вместо пяти строчек обьявления сигналов — получается одна.

Либо move_t — сначала их было всего четыре, и в классической ситуации надо было бы заводить 2-х битную переменную и делать типа `define MOVE_DOWN 2'b00 и т.п. Потом добавился MOVE_APPEAR — и пришлось бы делать 3-х битную переменную, а так это всё автоматически.

ИМХО, упрощение в разработке и красота :)
Похоже мне надо бросать VHDL и переходить сразу на SystemVerilog =)
Ну, это холиварная тема)
Кому как удобнее.

Xilinx ISE вроде SystemVerilog не поддерживает, а Synplify должен.

Если знакомы с конструкциями Veriloga, то посмотрите «SystemVerilog for Design»)
Да посмотрю! Я в ISE не работаю, только с новыми кристаллами в Vivado, а он вроде поддерживает SystemVerilog…
Если переехать на память, то придется делать некоторые вещи последовательно

Хех. 'Какая досада', все параллельно выполняется… Везде бы так.

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

Как жаль что производители потребительских компьютеров (не важно soc или нет) старательно обходят добавление открытой для использования FPGA логики, готовых реализаций по пальцам пересчитать можно. А ведь даже закрыв глаза на аппаратные гибкие возможности по управлению периферией, FPGA дают огромные возможности по оптимизации/ускорению программ, особенно когда речь идет об экономии электроэнергии. Понятно что вхождение программирование FPGA заметно труднее, но я думаю доступность и повсеместное внедрение сделало бы развитие языков программирование в этом направлении еще быстрее, и кто знает, вполне возможно FPGA могут стать следующим качественным скачком в повышении скорости железа, с момента появления видеокарт с GPGPU и появления OpenCL.

p.s. вот пример, не совсем в тему FPGA (там на плате дополнительно еще 16-ядерный чип parallela) но до недавнего времени платы снабжались Zynq-Z7010/Z7020 с модулем FPGA (да, маленьких, всего на 30-60к вентилей, но если игра с поддержкой ввода вывода требует каких то жалких несколько тысяч....)
У Intel и Altera были идеи на этот счёт. Ну и сами производители FPGA встраивают ARM ядра в свои чипы. До этого были PowerPC и другие аппаратные реализации встроенные в ПЛИС.
Интересный проект. Спасибо. Сам хотел сделать нечто подобное, но не на видеовыход, а в ANSI-терминал. Проблема проявилась в отсутствии компилятора. То есть на ПЛИС я реализовал оригинальный процессор, а компилятора к нему нет. Можно было бы переписать Си код на ассемблере, но есть дела и поважнее.

Собственно, мой комментарий не для того чтобы похвастаться или похвалить автора, а в надежде узнать название двух самых популярных в мире плат с FPGA — самую популярную с Altera на борту и самую популярную с Xilinx.

Требования к устройству:
  • не менее 10000 Altera LE
  • не менее 400 Кбит внутренней памяти (встроенная в ПЛИС)
  • желательно от 4 мбайт SDRAM на борту платы
  • частота не менее 100 Мгц
  • бюджет от $100 до $150


Чем популярнее плата у разработчиков, тем лучше. Кажется, что название Terasic DE1 слышал уже неоднократно. Возможно одна из самых популярных? Но $250 уже нормальные деньги, которые вот так просто из семейного бюджета не вытащишь.
Увы, данных про самые популярные в мире платы у меня нет :) Платы от Терасика для Альтеры, да, на слуху. Но являются ли они самыми популярными — не знаю.

Замечу, что у Терасика есть кит DE1 c Cyclone II, а тот кит, который использовал я (DE1-SoC) использует Cyclone V.

Посмотрите на DE-0 Nano на Cyclone-IV или DE0 на Cyclone-III.
Первый дешевле по деньгам, второй побогаче на интерфейсы.

Кстати, те отладки что советует ishevchuk можно было заполучить в рамках конкурса Altera’s Innovate Europe Design Contest. Но там есть ограничения по степени студенчества и инновационности.
Прошло уже 2.5 года, однако ваша статья заинтересовала. Статья не кажется для совсем новичков.
Можете подсказать список литературы, туториалов (язык не важен) — для достаточно быстрого освоение темы в достаточной мере, чтобы разобраться в вашем проекте и быть способным делать подобные эксперименты самостоятельно. Благодарю заранее.
Вы правы, статья не для новичков.

Как я и писал выше:
Если вы купили кит и хотите обучиться разработке под FPGA, не рекомендую делать тетрис прям в качестве первого проекта.

Честно говоря, быстрого освоения темы («Тетрис за 21 день»), я не рекомендую, т.к. в FPGA слишком много нюансов и различий относительно обычной софтовой разработки.

Я думаю, что стоит начать с этого: habrahabr.ru/post/281525

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