Sadržaj:
Video: Mastermind igra u VHDL -u: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Za naš projekt stvorili smo igru “Mastermind” u VHDL -u koja će se igrati na Basys3 ploči. Mastermind je igra za razbijanje kodova koja se tradicionalno igra klinovima i pločom za igru. Igrač jedan postavlja klinove različitih boja u niz od 4, skrivene od igrača dva. Igrač dva tada ima 'x' broj nagađanja postavljajući klinove na ploču u nizu vidljive igraču jedan. Nakon svakog pogađanja, igrač dva dobiva dva broja: koliko je klinova ispravne boje i koliko je klinova na ispravnom mjestu u redu. Koristeći te tragove, igrač dva mora pogoditi ispravan slijed pinova koje je igrač jedan postavio u dodijeljenu brojku.
U našoj implementaciji, igra je za jednog igrača. Program generira slučajnu kombinaciju klinova, a igrač mora pomoću ploče Basys3 pogoditi ispravan slijed. Postoje četiri "boje", predstavljene binarnim vrijednostima. Zaslon sa 7 segmenata prikazuje tri vrijednosti: preostale zavoje, broj pinova u ispravnom položaju i broj pinova ispravne boje u pogrešnom položaju (ove vrijednosti počinju na 9, 0 i 0). Igrač koristi prekidače na ploči za odabir binarnih vrijednosti za svoje pogađanje i okreće drugi prekidač za slanje nagađanja. Ako su točni, igra se završava i na 7-segmentnom zaslonu prikazuje se "GG". Ako nije, brojač zaokreta se smanjuje za 1 i igrač prima povratnu informaciju na temelju toga koliko iglica u njihovoj pretpostavci odgovara boji ili položaju igle u kombinaciji. Ako igrač ostane bez zavoja, a da nije ispravno pogodio, na zaslonu se prikazuje “GO” (predstavlja igru završenom). Igrač također može u bilo kojem trenutku okrenuti prekidač za poništavanje kako bi započeo ispočetka.
Korak 1: Materijali
Budući da se cijela igra može igrati na samoj ploči, jedini potrebni materijali su Basys3 ploča, mikro USB kabel za spajanje na ploču i računalo/prijenosno računalo koje možete koristiti za kodiranje!
Korak 2: Kôd
Kako bi ova igra radila na FPGA -i, najjednostavniji način pisanja bio bi stvaranje državnog stroja. Državni stroj omogućuje uzastopno i interaktivno iskustvo potrebno da bi igra zaista funkcionirala. Kako bi sve radilo bez problema, državni stroj će se temeljiti na unutarnjem signalu takta FPGA -e, osiguravajući da je sve sinkronizirano. Glavni modul je stroj stanja s četiri stanja; Početno stanje (početno), stanje podnošenja odgovora (podAns), stanje prikaza (Dis) i stanje CheckEndGame (CheckEnd). Uz državni stroj, glavni modul ima dva podmodula, četveroznamenkasti sedmosegmentni zaslon (koji ima vlastiti podmodul ClkDivider) i generator slučajnih brojeva (zapravo generator psuedo-slučajnih brojeva). Postoji i osnovni procesni blok za uključivanje LED dioda iznad svakog prekidača kada su uključene kako bi ljudi lakše vidjeli što unose. Osnovni pregled koda može se vidjeti na mentalnoj karti na slici.
Prva komponenta koju treba pogledati je Generator slučajnih brojeva (randomgen). Budući da tehnički nije moguće dobiti prave slučajne brojeve generirane iz hardvera, najjednostavnije rješenje bilo je da slučajni gen zapravo bude Registar pomaka linearne povratne sprege (LFSR). LFSR ima ulaz clk i izlaz "a" (12-bitni broj). Svaki ciklus takta generira se novi 12-bitni broj koji počinje s “000000000001”, na kraju prolazi kroz sve kombinacije 12-bitnih brojeva 1 i 0 prije nego što se ponovi. Izlaz “a” se daje svakom ciklusu takta, tako da se neprestano izvodi tijekom cijelog ciklusa. Clk se preslikava u Clk iz glavnog modula, a "a" se preslikava u signal RandNum u glavnom modulu.
Drugi podmodul je četveroznamenkasti zaslon sa sedam segmenata. Ovo je prilično jednostavan način prikazivanja četveroznamenkastog sedmo segmentnog zaslona. Prikaz je postavljen na Clk iz glavnog modula, ali ovaj podmodul ima vlastiti podmodul ClkDivider -a. ClkDivider (postavljen na 1298 Hz) koristi se za ubrzanje sata za sedam segmenata tako da se čini da su sve znamenke uključene u isto vrijeme (budući da samo jedna znamenka može biti uključena odjednom). Promjenjiva "znamenka" koristi se za kretanje po točkama na zaslonu, a sa svakom znamenkom dolaze i uvjeti osnovnog 4-bitnog ulaznog zaslona, s opcijama za prikaz znamenki od 0 do 9, a također ništa. Najdalja lijeva znamenka na zaslonu postavljena je na ništa jer se ne koristi u ovoj igri.
Glavni modul sastoji se od stroja stanja. Četiri stanja u procesu su Initial, SubAns, Dis i CheckEnd. Kad je u početnom stanju, ako je SubmitBtn (prekidač koji se koristi za slanje vašeg odgovora na provjeru) postavljen na ‘1’, stroj se pomiče u stanje SubAns. Kad god je Rbtn (prekidač za resetiranje stroja) postavljen na ‘1’, tada se stroj vraća u početno stanje. Kad ste u stanju SubAns, kada je SubmitBtn = ‘0’, prelazi u stanje Dis. Kada je u Dis stanju, ako odbrojavanje = 0 (skretanja ulijevo za pogađanje padaju na 0) ili ako je RSpotCount = 4 (što znači da je igrač kao sve ispravne boje na ispravnim mjestima), stroj ide u stanje CheckEnd. Ako se ništa od navedenog ne dogodi, onda kad je SubmitBtn = ‘1’ ponovno se vraća u stanje SubAns kako bi se omogućilo još jedno pogađanje. Kad ste u stanju CheckEnd, ovo je kraj igre, a jedini izlaz je da poništite vraćanje i vratite ga u početno stanje. To se lako može vidjeti u dijagramu stroja stanja. Ponašanje početno stanje sve inicijalizira natrag u početni položaj. Odbrojavanje (signal koji sprema koliko zavoja lijevo ima igrač) postavljeno je na 9, RSpotCount (signal koji sprema koliko ste boja pogodili na pravom mjestu) postavljeno je na 0, RColorCount (signal koji sprema koliko boje za koje ste pretpostavili da su ispravne, ali na pogrešnom mjestu) postavljeno je na 0, a smallcountdown (signal koji se na kraju preslikava na Odbrojavanje koji zapravo mijenja svaki zavoj u kasnijim stanjima) postavljen je na 9. Također, u početnom stanju RandNum (psuedo-nasumično generiran broj) podijeljen je u četiri različite provjere (po jedna za svaku 3-bitnu boju) i spremljen u signale check1, check2, check3, check4. Vaše se provjere zapravo uspoređuju, pa iako LFSR uvijek uzrokuje da RandNum mijenja svaki ciklus, nakon što napustite početno stanje, provjere ostaju iste, što omogućuje spremljenu vrijednost za usporedbu vašeg odgovora. To također znači da svaki put kada se stroj resetira, igrač ima novu vrijednost koju treba pogoditi.
Stanje SubmitAnswer (SubAns) mijenja omogućavanje odbrojavanja (signal "promjena") u "1". To je potrebno kasnije kako bi praćenje skretanja funkcioniralo. Nakon toga stanje uspoređuje unose igrača s prekidača s provjerama izvršenim u gore navedenom stanju. Signal rs1, rs2, rs3, rs4 i signali rc1, rc2, rc3, rc4 su cjelobrojni tipovi koji su ovisno o naredbama If postavljeni na 1 ili 0. Signal rs je za desno mjesto, a rc za pravu boju. Na primjer, ako je pogodak igrača u boji 1 jednak check1 RandNum -a, tada je rs1 = 1 jer to znači da je prava boja na pravom mjestu. Ako boja 1 nije jednaka check1, ali jednaka je jednoj od ostalih provjera, tada je rc = 1. To se radi za svaku boju i svaku provjeru.
Stanje prikaza (Dis) prvo traži omogućavanje odbrojavanja. Ako je '1', tada smallcountdown ide dolje za 1 (pa pri prvom skretanju ide s 9 na 8 itd.). Inače se zaokret ne mijenja. Bez obzira na omogućeno uključivanje, sve rs vrijednosti odozgo se zbrajaju i dodjeljuju signalu RSpotCounter. Također se sve rc vrijednosti dodaju i dodjeljuju RColorCounteru. Na kraju odbrojavanju se dodjeljuje vrijednost smallcountdown. Signali RSpotCounter, RColorCounter i Countdown svi se pretvaraju u 4-bitne std_logic_vectors izvan procesa i guraju u podmodul prikaza sedam segmenata kroz kartu porta. Na ovaj način zaslon prikazuje prave stvari dok ne pošaljete novi odgovor.
CheckEnd State služi za to jeste li pobijedili ili izgubili. Ako ste pobijedili (sve 4 boje su na pravom mjestu, inače poznate kao RSpotCounter = 4), tada se na sedmom segmentu prikazuje "GG" (tehnički prikazano kao 66) kako bi se pokazalo da ste pobijedili. Ako ste izgubili (odbrojavanje je doseglo 0), na pokazivaču se prikazuje "GO" (tehnički prikazano kao 60) za Game Over. U oba slučaja, ako pritisnete prekidač za resetiranje na uključeno, stroj će se vratiti u početno stanje za ponovnu reprodukciju.
Izvorni kod možete pronaći ovdje.
Korak 3: Zaključak
Dovršetak ovog projekta naučio nas je mnogo o izgradnji složenijih krugova. Naš početni dizajn nije bio stroj konačnih stanja. Bilo nam je teško otkloniti pogreške i prepisati kôd nekoliko puta koristeći različite metode (uključujući FSM). Na prijedlog instruktora, držali smo se FSM pristupa i uspjeli smo dovršiti igru. Naučili smo da je mnogo učinkovitije dizajnirati kôd na temelju hardvera nego tradicionalnim pristupom programiranja. Također smo se suočili s nekoliko izazova u vezi sa zaslonom sa sedam segmenata. Bilo je teško postići da se prikaže više brojeva bez "duhova", pa smo za to morali koristiti razdjelnik sata. Ako bismo dalje razvijali ovaj projekt, na Basys3 bismo povezali LED u boji kako bi korisnik mogao vidjeti boje (kao u tradicionalnoj igri), a ne numeričke prikaze boja. U konačnici, stekli smo bolje razumijevanje složenog dizajna kola, aplikacija u stvarnom životu i izazova korištenja hardvera, a ne izvođenja simulacija sa savršenim uvjetima.
Preporučeni:
DIY 37 Leds Arduino Roulette igra: 3 koraka (sa slikama)
DIY 37 Leds Arduino Roulette igra: Roulette je casino igra nazvana po francuskoj riječi koja znači mali kotačić
DINO IGRA KORISTEĆI LDR: 5 koraka
DINO IGRA KORIŠTENJEM LDR-a: Igra dinosaura, poznata i kao T-Rex igra i Dino Runner, ugrađena je igra preglednika u web pregledniku Google Chrome. Igru je stvorio Sebastien Gabriel 2014. godine, a može joj se pristupiti pritiskom na razmaknicu dok je offline u pregledniku Google Chrome.A L
Mastermind Star Wars s Arduino MEGA: 5 koraka (sa slikama)
Mastermind Star Wars s Arduinom MEGA: Ovo su nepovoljna vremena za pobunu. Iako je Zvijezda smrti uništena, carske trupe koriste besplatni hardver i Arduino kao tajno oružje. To je prednost besplatnih tehnologija, svaka ih osoba (dobra ili loša) može koristiti
Interaktivna igra Tic-Tac Toe igra s Arduinom: 6 koraka
Interaktivna igra Tic-Tac Toe nogom kontrolirana s Arduinom: Cilj projekta Physical Tic-Tac-Toe je premjestiti dobro poznatu igru u fizičko područje. Izvorno, igru igraju dva igrača na komadu papira - stavljajući simbole "X" i "O" naizmjence. Naša ideja je bila ispitati ponašanje igrača
Mastermind s LED matricom 8x8 RGB: 5 koraka (sa slikama)
Mastermind s 8x8 RGB LED matricom: Potrebni dijelovi: Basys3 FPGA 8x8 RGB LED matrica od GEEETECH9V baterije 2N3904 tranzistora (x32) 1K otpornik (x32) otpornik 100 ohma (x1) otpornik 50 ohma (x1) LED matrica je uobičajena anodna matrica 32 ukupna pina. Uobičajena anoda znači da je svaki red