Съдържание:

FPGA астероидна игра: 7 стъпки (със снимки)
FPGA астероидна игра: 7 стъпки (със снимки)

Видео: FPGA астероидна игра: 7 стъпки (със снимки)

Видео: FPGA астероидна игра: 7 стъпки (със снимки)
Видео: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, Ноември
Anonim
FPGA астероидна игра
FPGA астероидна игра

За нашия финален проект CPE 133 решихме да създадем игра с астероиди на нашата FPGA, използвайки два превключвателя с бутон и 7-сегментния дисплей. Играта работи така, че астероид се появява в един от трите произволно избрани реда и се втурва към кораба от другата страна на 7-сегментния дисплей. Горният бутон и долният бутон могат да се използват за преместване на вашия кораб от пътя на астероида. При неспазване на това на дисплея се чете „BAnG“за момент и след това бързо рестартира играта, така че потребителят може да опита отново. Следва кратко описание на начина, по който е направен проектът, така че всеки потребител да може да възпроизведе или подобри нашия дизайн.

Стъпка 1: Общ преглед

Общ преглед
Общ преглед
Общ преглед
Общ преглед

Проектът до голяма степен се състои от конечни държавни машини (FSM), които използват логика за прехвърляне на FPGA между държави, които съхраняват и показват различни стойности на позиции на кораби и скали. Двата основни модула са игралните FSM за скалата и кораба и бинарният до 7-сегментен декодер на дисплея FSM, които са интегрирани заедно с помощта на много прост структурен модел във VHDL.

FSM са създадени за позицията на кораба, позицията на скалата и за 7-сегментния декодер. Целта на кораба за FSM е така, че корабът да може да се премести в правилната позиция, когато играчът натисне бутон нагоре или надолу. FSM е необходим, защото трябва да запомни в коя позиция е бил последен, за да се премести в правилната позиция.

Целта на FSM на скалата е да премести скалата до правилната позиция въз основа на кой ред е и последната позиция в този ред. В допълнение, той следи позицията на модула, който ще го покаже, и псевдослучайно избира нов ред, който да се появи на следващия.

FSM за 7-сегментния декодер на дисплея беше използван не само за показване на кораба и скалата, но и за показване на „BAnG“, когато позицията на кораба и позицията на скалата са еднакви.

Стъпка 2: Материали

Материалите, използвани в проекта, бяха:

  • Съвет за развитие на Basys3 от Digilent, Inc.
  • Дизайн апартамент Vivado
  • sseg_dec.vhd (Този файл ни беше предоставен на Polylearn и е написан от Bryan Mealy)
  • Clk_div.vhd (Този файл ни беше предоставен на Polylearn и е написан от Bryan Mealy)
  • Три крайни държавни машини (FSM)

Стъпка 3: Създаване на играта

Създаване на играта
Създаване на играта
Създаване на играта
Създаване на играта
Създаване на играта
Създаване на играта
Създаване на играта
Създаване на играта

Игралният модул е създаден чрез използване на поведенческо моделиране за описание на състоянията на кораба и скалата за техните собствени съответни FSM. Предимството на това е, че е много по -лесно да се моделира веригата поведение, като се опише какво прави, вместо да се разберат всички компоненти, необходими за проектирането на хардуера.

Състоянията на скалите бяха направени с помощта на генератор на псевдо случайни числа за първата позиция на скалата. За да постигнем това, ние дадохме на генератора собствен часовник, който беше изключително бърз спрямо скоростта на играта. На всеки нарастващ ръб се увеличава трибитово число и всички негови стойности съответстват на едно от трите стартови състояния на кораба. Следователно три стойности съответстват на позиция 3 (горе вдясно), три съответстват на позиция 7 (в центъра), а две съответстват на позиция 11 (долу вдясно).

След като е настъпило случайното генериране и астероидът е получил първоначално състояние, той тече хоризонтално към кораба без прекъсване.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Часовникът, използван за следващата логика на състоянието на скалата, контролира скоростта на играта; чрез опит и грешка установихме, че 9999999 е добра стойност за максималния му брой.

Логиката на кораба работи чрез инициализиране в централна позиция (позиция 4) в най -лявата страна. Ако горният или долният бутон са натиснати, корабът ще се движи нагоре и надолу в позиция 0 и 11, съответстваща на бутона, който е натиснат.

За да може движението на кораба да се чувства добре за потребителя, не направихме неговото движение асинхронно. Използвахме часовник за промените в състоянието му и използвахме максимален брой 5555555.

Стъпка 4: Показване на резултата

Двоичният към 7-сегментен декодер приема 4-битовите позиционни променливи за кораба и астероида и показва подходящото изображение (или кораба, и скалата, или съобщението „BAnG“).

Той постига това, като първо проверява дали двете са равни и след това показва съобщението „BAnG“, ако проверката връща true.

Ако не се върне вярно, декодерът ще покаже кораба и скалата, като превключва между тях с много висока тактова честота и заблуждава окото да ги види, сякаш се показват едновременно.

Стъпка 5: Съберете всичко заедно

Събирайки всичко заедно
Събирайки всичко заедно

Ние включихме FSM на кораба и скалата в един голям FSM, който свързахме към FSM на дисплея. Входните данни за играта са бутонът нагоре и бутонът надолу на платката BASYS3 и системният часовник. Изходите са сегментните и анодните вектори седем сегмент-дисплей.

Тези входове и изходи ще се видят във файла с ограничения, където са картографирани портове.

Стъпка 6: Бъдещи модификации

В бъдеще добавянето на повече функционалност за движение на кораба към проекта би било подобрение. Това може да се постигне просто като се дадат още 2 бутона за вход и се позволи на кораба да заеме позиции (състояния), различни от 0, 4 и 8. Друга възможна модификация може да бъде контролирането на времето на следващото състояние на астероида, така че да започне бавно и да увеличи скоростта с 1,5 пъти всеки път, когато пропусне кораба, докато не получи удар, където той ще се рестартира и отново ще стане бавен. Това би увеличило трудността на играта и би я направило по -забавна за потребителя, ако тя бъде внедрена, и може да бъде направено чрез създаване на променлива за максималния брой на следващия часовник на състоянието на скалата, умножавайки тази променлива по 1,5 всеки път, когато астероидът не 't hit, и връщането му до първоначалната му стойност всеки път, когато скалата удари.

Стъпка 7: Заключение

Този проект ни помогна да разберем по-добре машините с крайни състояния, часовниците и интерактивното показване на седем-сегментните дисплеи.

Най -голямото нещо при машините с крайни състояния е, че е важно да знаете (запомнете) в какво състояние сте в момента, за да преминете към следващото желано състояние. По ирония на съдбата, добри съвети за живота; трябва да знаете къде се намирате, за да знаете къде отивате.

Чрез манипулиране на различни екземпляри на часовници успяхме да генерираме на случаен принцип числа, да преместим скалата на следващата позиция и да управляваме показването на кораба, скалата и съобщението за края на играта.

Научихме, че повече от един анод не може да бъде показан едновременно. Даденият ни модул се възползва, че човешкото око може да види разликата само до определена честота. Така че беше избрана по -висока честота на превключващи аноди. Корабът и скалата, които се виждат едновременно, всъщност е намек, тъй като всеки се показва отделно, но много бързо. Тази концепция беше приложена за показване на движението на кораба, скалата и съобщението „BAnG“.

Препоръчано: