Съдържание:
- Стъпка 1: Въведение
- Стъпка 2: Материали
- Стъпка 3: Дизайн на черна кутия с диаграма на най -високо ниво
- Стъпка 4: CLKDivide
- Стъпка 5: Преместете блока на процеса
- Стъпка 6: Машина с крайни състояния
- Стъпка 7: Контролиране на процесния блок на дисплея с ниво
- Стъпка 8: Контролиране на скоростта на светодиода с ниво
- Стъпка 9: Сглобяване на хардуер
- Стъпка 10: Забавлявайте се
Видео: FPGA реакция игра: 10 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
До Съмър Ръдърфорд и Регита Сотандар
Стъпка 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
Този подмодул с разделител на часовник създаде по -бавен часовник в зависимост от стойността, която сме му набелязали в основния ни файл. Използвахме този подмодул, за да определим 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 игра
Препоръчано:
Tap Tap Rainbow - игра за бърза реакция за 2 играчи: 4 стъпки (със снимки)
Tap Tap Rainbow - игра за бърза реакция за 2 играчи: Преди 2 седмици дъщеря ми имаше гениална идея да направи игра за бърза реакция с цветове на дъгата (тя е експерт по дъгата: D). Идеята ми хареса веднага и започнахме да мислим как можем да я превърнем в истинска игра. Имаш дъга в
555 Таймерна реакция Игра: 5 стъпки
555 Таймерна реакция Игра: Целева аудитория Тази инструкция е насочена към хора, които се интересуват от схеми (с малко предистория), които търсят проста игра, която можете да изградите само с няколко евтини компонента. Ниво на трудност Това би било трудно, ако
Саймън игра - забавна игра !: 5 стъпки
Simon Game - Fun Game !: Справка: Тук След дългия уикенд трябва наистина да се постараете да изпълните всички задачи и работа, за която отговаряте. Време е да тренираме мозъка си, нали? Освен тези скучни и безсмислени игри, има и игра, наречена Simon Game
Забавна игра за реакция на Arduino: 3 стъпки
Забавна игра за реакция на Arduino: Забавна игра за реакция на Arduino за цялото семейство;) Въз основа на крос -платформена Bluetooth комуникация. Нуждаете се само от някои неща от Arduino, смартфон с Android и кутия за обувки. Ако нямате нищо от това, вярвайте твърдо в това: няма нищо, което
Игра за бърза реакция: Разстояние версия: 5 стъпки (със снимки)
Игра за бърза реакция: Разстояние Версия: Здравей. Това е инструкция за това как да създадете игра, която тества както времето за реакция, така и чувството за разстояние. Този проект се основава на стар проект, в който участвах двама играчи, които се състезаваха да видят кой е имал по -бързо време за реакция, като натисна бутон с