МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

Работа над ошибками. Теннис.

Вот так бывает, что возвращаешься к одному из "старых" проектов и вдруг выясняешь для себя, что не все в нем хорошо, кое что не работает правильно, и, что его можно и нужно улучшать. Так и случилось с моим проектом "теннис". Я его сделал довольно давно, пробовал его на парочке мониторов и он работал. Теперь появилась задумка сделать еще одну видео игру на плате Марсоход, я взял за основу тот проект "теннис", и.. встретился с некоторыми проблемами. Я решил сначала разобраться и сделать улучшенный вариант той же старой игры. Получилось вот что:

Что было сделано:

  • исправлен генератор синхросигналов, в нем была ошибка;
  • изменены некоторые назначения в проекте;
  • игра сделана цветной;
  • размеры мячика и ракетки сделаны побольше (16x16);
  • логика игры синхронизирована с частотой вертикальной развертки.

Далее подробнее.

Итак.

Генератор синхросигналов.
Обнаружил, что не все мониторы отображают мою видео игру, иногда синхронизация срывается. Я думал все дело в нестабильном внутреннем генераторе микросхемы ПЛИС. Начал разбираться и оказалось, что в модуле hvsync.v есть ошибка - синхроимпульс кадровой VSYNC не совпадает по фронту c синхроимпульсом HSYNC.  А ведь они должны совпадать - об этом сказано в спецификации VESA. Я переписал модуль hvsync.v и еще сделал к нему тестбенч для iverilog и gtkwave, что бы можно было внимательнее посмотреть, что же происходит на самом деле. Вот здесь смотрите, что получилось (кликните изображение, чтобы увеличить его):

Временная диаграмма сигнала кадровой развертки для монитора

На временной диаграмме видно, что HSYNC и VSYNC теперь синхронны. По сигналу visible понятно какие строки отображаются а какие нет. Четко видно, что я следую спецификации VESA для режима 800х600: идет 1 строка FrontPorch, 4 строки VSYNC, 23 строки BackPorch. Отображаемых строк 600 (последняя отображаемая под номером 599) всего строк 628 (последняя под номером 627).

Новые назначения в проекте.
Несмотря на новый синхрогенератор некоторые мониторы упорно отказывались показывать игру правильно и синхронизация все равно сбивалась. Решили, что, видимо, уровень сигналов слишком большой. Что бы как-то ограничить их мы пытались поставить последовательно с сигналами VSYNC и HSYNC резисторы ~200 Ом и похоже это помогает. У нас есть в запасе еще один более простой способ. HSYNC и VSYNC в предыдущем проекте теннис были выведены через группы выводных контактов F0[9..0] и F1[9..0] которые
традиционно мы в своих проектах используем для управления двигателями. Группирование контактов дает больший ток для моторов, но в этом проекте "теннис" нам это не надо. Поэтому из группы были оставлены только по одному выводу и им назначен "минимальный ток".

Назначения контактов ПЛИС в среде Quartus II

Оставшиеся выводы групп не используются, и поэтому для этого проекта они - высокоомные входы. Используем меню среды Quartus II, Assignments/Assignment Editor.

Игра в цвете.

Теперь цвет фона - синий, мяч - красный, а бордюр и ракетка - зеленые.
В новом проекте сигналы RGB выведены на разъем с названиями контактов F3, F4, F5 (второй блок контактов для "моторов"). Теперь нужно будет спаять новый шнурок для подключения к монитору в котором R, G и B идут отдельными проводами.

Провод подключения платы Марсоход к VGA монитору

Цоколевка разъема VGA была описана в первом проекте. Впрочем, и со старым проводком, должно все работать в "черно-белом режиме", так как проект по идее сделан совместимым со старым шнурком (завтра это проверю).

Синхронизация логики игры по частоте вертикальной развертки.
Эта идея довольно хороша - внутреннее состояние игры меняется только в момент кадрового импульса. Значит на экране не будет дополнительных артифактов при движении мяча или ракетки. Кроме этого, использование довольно низкой частоты VSYNC сильно помогает экономить место внутри микросхемы. Ведь теперь мне не нужно ставить еще один счетчик для получения низкой частоты (используется для движения мяча или ракетки) из 5Мгц.

Ну вот собственно и проект для скачивания:


Проект сделан для платы Марсоход третьей версии - там есть кварцевый генератор 100Мгц. Эта частота в проекте делится на 20 и получаются стабильные 5Мгц. Если у вас плата без генератора, то все же попробуйте внутренний генератор из компонента ALTUFM_NONE - он уже стоит в проекте. Его вывод int5Mhz используйте как частоту всего проекта.

Надеюсь с новым улучшенным проектом проблем будет меньше.

 

Комментарии  

0 #10 WolfTheGrey 16.04.2015 09:08
Подскажите какую строчку подправить чтоб теннис был на весь экран? Использую FPGA с полноценным разрешением 800х600 и частотой 40 мегогерц.
0 #9 Ю р и й 02.09.2014 11:57
Цитирую Хлуденьков Владимир:
Приведите, пожалуйста, схему кабеля...


То есть какие линии идут и к каким подключаются на плате "марсоход". А то на картинке не очень видно.

f0 - vsync
f1 - hsync
f2 - video
В первом проекте описано -https://marsoh od.org/projects /7-videogameten nis
0 #8 Хлуденьков Владимир 02.09.2014 11:49
Приведите, пожалуйста, схему кабеля...


То есть какие линии идут и к каким подключаются на плате "марсоход". А то на картинке не очень видно.
0 #7 Ю р и й 02.09.2014 11:42
Цитирую WolfTheGrey:
Цитирую Хлуденьков Владимир:
И скажите, пожалуйста, не приведёт ли к поломке ЖК монитора 1280х1024 если на него подать 800х600 как здесь описано.

По идее монитор должен автоматом сгрупироваться под данное разрешение.
Лучше накатайте статью как подключить ЖК монитор от сломоного ноутбука. Там нет VGA, DVI. Там 30ти пиновая LVDS шина.

В ноутбуках чаще всего FPD-Link - https://marsohod.org/projects/plata1/173-phframe2
А с цоколевкой конкретной матрицы нужно разбираться, или искать даташит ;-)
0 #6 WolfTheGrey 02.09.2014 11:32
Цитирую Хлуденьков Владимир:
И скажите, пожалуйста, не приведёт ли к поломке ЖК монитора 1280х1024 если на него подать 800х600 как здесь описано.

По идее монитор должен автоматом сгрупироваться под данное разрешение.
Лучше накатайте статью как подключить ЖК монитор от сломоного ноутбука. Там нет VGA, DVI. Там 30ти пиновая LVDS шина.
0 #5 Хлуденьков Владимир 12.04.2014 10:23
И скажите, пожалуйста, не приведёт ли к поломке ЖК монитора 1280х1024 если на него подать 800х600 как здесь описано.
0 #4 Хлуденьков Владимир 12.04.2014 10:08
Цитирую Хлуденьков Владимир:

Приведите, пожалуйста, схему кабеля


То есть какие линии идут и к каким подключаются на плате "марсоход". А то на картинке не очень видно.
0 #3 Хлуденьков Владимир 12.04.2014 10:06
Здравствуйте! Неспешно погружаюсь в мир FPGA & etc...

Приведите, пожалуйста, схему кабеля для связи платы "марсоход" (v.3) с монитором. Скажите, есть какие-либо общие формулы для формирования изображения произвольного размера (допустим 1024х768 или 1600х900)?
0 #2 Сергей 12.05.2012 13:43
Аааа, и совсем забыл - что за выход video? video_r, video_g и video_b - с ними все понятно, а вот что за простой сигнал video...
0 #1 Сергей 12.05.2012 13:38
Классная вещь! Пробовал еще первую версию тетриса загрузить в Xilinx'овскую плату, вроде загрузилась без особых проблем, только два файла совместил game и hvsync.. Только загрузиться то загрузилась, а на экране - темнота! Не "out of range" или "no signal", а именно темнота. Видно, что монитор включился, но ничего не рисует!
Решил посмотреть на новую версию тенниса, а он даже в проект собираться не хочет, если добавлять все верилоговские файлы. Говорит нет каких-то компонент.. Попробовал также собрать только два файла, все собралось, запустилось, но теперь уже "out of range". Не подскажете в чем может быть проблема? У меня тактовый генератор частоты 100МГц, в первом случае понизил до 5, чтобы было как у Вас, а во втором написано вроде про 100, поэтому ничего не понижал. Заранее спасибо за ответ!

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход Работа над ошибками. Теннис.