Съдържание:

FPGA реакция игра: 10 стъпки
FPGA реакция игра: 10 стъпки

Видео: FPGA реакция игра: 10 стъпки

Видео: FPGA реакция игра: 10 стъпки
Видео: ModelSim & Verilog - Язык Проектирования Схем §10 2024, Ноември
Anonim
FPGA реакция игра
FPGA реакция игра

До Съмър Ръдърфорд и Регита Сотандар

Стъпка 1: Въведение

За нашия окончателен проект за CPE 133, ние проектирахме игра за реакция във VHDL за платка Basys3. Тази игра може да бъде най -близко сравнена с аркадната игра „Stacker“, където играчът трябва да пусне блоковете в точното време. Платката Basys3 е свързана към макет, който има редуващи се светодиоди. Тези LED светлини ще се редуват на определена честота, в зависимост от нивото. Тази игра използва разделителя на часовника и 4 -цифрения 7 -сегментен дисплей, както и машина с крайни състояния. Когато плейърът активира правилния превключвател, докато светне средният светодиод, играчът ще премине към следващото ниво на играта, увеличавайки честотата на редуващите се светодиоди. Това прави всяко следващо ниво по -трудно от предишното ниво. Когато плейърът успешно победи ниво 7, най -високото ниво, на сегментния дисплей ще се покаже съобщение и всички светодиоди ще мигат едновременно включване и изключване.

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

Материали
Материали
Материали
Материали
Материали
Материали

Материалите, които ще ви трябват са:

  • Платка Digilent Basys3 с микро USB кабел
  • Платка
  • 5 светодиода
  • 5 резистора (използвахме 220 ома)
  • 11 джъмперни проводници
  • Компютър с Vivado

Стъпка 3: Дизайн на черна кутия с диаграма на най -високо ниво

Диаграма на най -високо ниво Дизайн на черна кутия
Диаграма на най -високо ниво Дизайн на черна кутия
Диаграма на най -високо ниво Дизайн на черна кутия
Диаграма на най -високо ниво Дизайн на черна кутия

Както можете да видите, нашата блокова диаграма от първо ниво започва с получаване на необходимите часовници от нашия подмодул ClkDivide. Тези часовници са входни данни в различните технологични блокове. По същество играта трябва да признае, че когато потребителят правилно включи превключвателя, светодиодите трябва да започнат да се редуват по -бързо и дисплеят трябва да се изкачи на едно ниво нагоре. Блоковата диаграма може да изглежда малко луда, но това е така, защото има много сигнали, които се установяват в определен процес и след това този сигнал дефинира друг сигнал в друг технологичен блок.

В крайна сметка единствените входове, които играта приема, са входният часовник на платката Basys3, която работи на 100 Mhz, седем превключвателя на платката Basys3 и бутонът за нулиране. Извежда се анодът за седемсегментния дисплей, седемте сегмента за дисплея и светодиодите.

Стъпка 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Този подмодул с разделител на часовник създаде по -бавен часовник в зависимост от стойността, която сме му набелязали в основния ни файл. Използвахме този подмодул, за да определим Clk400, PushClk и newlck. Този подмодул приема часовник и 32 -битов разделител като входове. Извежда се забавен часовник. Съществува технологичен блок за разделителя и забавения часовник. В процеса е временна променлива, която ние нарекохме count, която брои по една всеки път, когато се удари нарастващ ръб на въведения часовник. След като достигне номера на делителя, забавеният часовник превключва и броенето се нулира.

Стъпка 5: Преместете блока на процеса

Блок за процес на смяна
Блок за процес на смяна

Процесният блок Shift контролира променливото движение и скоростта на светодиодите. В списъка за чувствителност са сигналите newclk и Stop. Стоп причинява кратко забавяне, когато потребителят премине нивото. Ако Stop не е високо, тогава светодиодите се редуват както обикновено в зависимост от скоростта на newclk. Този променлив модел се контролира от две променливи: Проследяване и преброяване. Count определя кой светодиод трябва да свети, докато Track определя дали броенето трябва да се брои нагоре или надолу. Има и друг сигнал, Final, който се прилага само когато Нивото е „111“, което показва, че играчът е победил играта. Окончателният редува между 0 и 1 всеки ръб на часовника, за да включва и изключва светодиодите непрекъснато. Това е само визуален елемент за окончателното показване.

Този процес на смяна е идеалното място за започване на този проект. Ако можете да накарате вашите светодиоди да се редуват правилно и последователно, тогава от тук просто трябва да добавите поведението при изравняване!

Стъпка 6: Машина с крайни състояния

Машина за крайни състояния
Машина за крайни състояния

Създадохме машина с крайни състояния, която да диктува поведението при натискане на превключвателя за вход или бутона за нулиране. Всяко състояние е „ниво“и ако превключвателят е включен в грешен момент или е натиснат нулирането, нивото се връща обратно на „000“. В противен случай, ако превключвателят е правилно включен, нивото се движи нагоре, докато достигне крайното състояние, „111“и се появява крайният дисплей. FSM се основава на двата блока на процеса sync_proc и comb_proc. Sync_proc използва часовника, който нарекохме PushClk. Този часовник контролира колко бързо следващото състояние се превръща в настоящо състояние. Този часовник трябва да е доста бърз; избрахме скорост, която беше около два пъти по -бърза от нашата най -бърза LED скорост.

Ние внедрихме този код, използвайки FSM за нивата; след този проект обаче осъзнахме, че по-ефикасното използване на FSM може да е състоянието на преброяване, състояние на нулиране или състояние на престой. Ако нищо не се натиска, то е в състояние на престой. Ако се натисне нулирането или плейърът се обърка, той е в състояние на нулиране. Ако е правилно натиснат, той е в състояние на броене. Има много други начини да използвате FSM и в тази игра!

Стъпка 7: Контролиране на процесния блок на дисплея с ниво

Управление на блока на процеса на дисплея с ниво
Управление на блока на процеса на дисплея с ниво

Ниво контролира блока на процеса на показване. Променливите в списъка за чувствителност са Level, Reset и Clk400. 7 -сегментният дисплей започва с показване на „1“за първото ниво. Той брои до 7 всеки път, когато потребителят премине ниво, за да покаже на потребителя на какво ниво е. След като потребителят премине ниво 7, той показва „COOL“, за да покаже, че играчът е победил играта. Този „COOL“дисплей работи от 400 Hz часовник, който нарекохме Clk400. Ако се натисне Reset, дисплеят се връща към „1.“

Стъпка 8: Контролиране на скоростта на светодиода с ниво

Контрол на скоростта на светодиода с ниво
Контрол на скоростта на светодиода с ниво

И накрая, Level контролира скоростта на светодиодите. Нивото е единственият сигнал в списъка за чувствителност. D1 е сигналът, който влиза в процеса на разделител на часовника, за да получи newclk. Всеки път, когато Нивото се променя или състоянието се променя, процесният блок „Скорост“. Този процес определя стойността на D1. Има 8 дефинирани стойности на D1, които избрахме въз основа на това колко бързо искаме да се изпълнява всяко ниво. D1 намалява с всяко увеличаване на нивото, така че newclk работи по -бързо.

Стъпка 9: Сглобяване на хардуер

Хардуерен монтаж
Хардуерен монтаж

Свързахме макета към Basys3 с един от pmod конекторите. Шест от pmod портовете бяха използвани за включване на мъжки към мъжки конектор, един за заземяване, а другите пет за 5 -те светодиода. Поставихме и резистор за всеки светодиод. Тези резистори са 220 Ω и предотвратяват късо съединение и изгаряне на светодиодите. Въпреки че всеки светодиод има известно съпротивление, съпротивлението не е достатъчно, за да възпрепятства напрежението от източника.

Стъпка 10: Забавлявайте се

Тази игра е много лесна за игра. Играчът стартира от крайния десен превключвател 1 на дъската, V17. Те трябва да завъртят ключа високо, когато средният светодиод свети. След това преместват един превключвател наляво и правят същото! Ако играчът стигне до края, той ще се озове на седмия превключвател, W14. Ако победят играта, те ще видят наистина забавен завършващ дисплей!

Нещо, което трябва да се отбележи, е, че при създаването на тази игра скоростите зависят изцяло от вас! Ако скоростите, които сме избрали, са твърде бавни, не се колебайте да го ускорите и да го направите още по -предизвикателно! Също така няма определен брой нива. Ако искате да го направите още повече нива, трябва да се направят модификации на FSM и блоковете на процеса, определени от Level, но това са много прости промени.

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

По -долу е видео, демонстриращо как се играе, преминавайки през първите 4 нива и показване на крайния край.

Основният файл за този проект е включен по -долу.

Източници

Справочно ръководство на Basys3

Вдъхновение за проекта - Arduino Stop It игра

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