Sisällysluettelo:
- Vaihe 1: Johdanto
- Vaihe 2: Materiaalit
- Vaihe 3: Mustan laatikon ylätason kaavio
- Vaihe 4: CLKDivide
- Vaihe 5: Vaihda prosessilohko
- Vaihe 6: Äärellinen tilakone
- Vaihe 7: Näytön prosessilohkon hallinta tasolla
- Vaihe 8: LED -nopeuden säätäminen tasolla
- Vaihe 9: Laitteiston kokoaminen
- Vaihe 10: Pidä hauskaa
Video: FPGA -reaktiopeli: 10 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Kirjailija Summer Rutherford ja Regita Soetandar
Vaihe 1: Johdanto
Viimeistä CPE 133 -projektiamme varten suunnittelimme Basys3 -levylle reaktiopelin VHDL -muodossa. Tätä peliä voidaan verrata lähinnä arcade -peliin "Stacker", jossa pelaajan on pudotettava lohkot oikeaan aikaan. Basys3 -levy on kytketty leipälautaan, jossa on vuorottelevat LED -valot. Nämä LED -valot vuorottelevat tietyllä taajuudella tasosta riippuen. Tämä peli käyttää kellonjakajaa ja 4 -numeroista 7 -segmenttinäyttöä sekä äärellisen tilan konetta. Kun pelaaja aktivoi oikean kytkimen, kun keskimmäinen LED syttyy, pelaaja siirtyy pelin seuraavalle tasolle lisäämällä vuorottelevien LED -valojen taajuutta. Tämä tekee jokaisen peräkkäisen tason vaikeammaksi kuin edellinen taso. Kun pelaaja voittaa tason 7, korkeimman tason, segmenttinäytössä näkyy viesti ja kaikki LED -valot vilkkuvat samanaikaisesti.
Vaihe 2: Materiaalit
Tarvittavat materiaalit ovat:
- Digilent Basys3 -levy, jossa mikro -USB -kaapeli
- Leipälauta
- 5 LEDiä
- 5 vastusta (käytimme 220 ohmia)
- 11 hyppyjohtoa
- Tietokone Vivadolla
Vaihe 3: Mustan laatikon ylätason kaavio
Kuten näette, ylätason lohkokaavionamme alkaa hankkimalla tarvittavat kellot alimoduulistamme ClkDivide. Nämä kellot ovat tuloja eri prosessilohkoihin. Pohjimmiltaan pelin on tunnistettava, että kun käyttäjä kytkee kytkimen oikein päälle, merkkivalojen on alettava vuorotellen nopeammin ja näytön on noustava yhtä tasoa. Lohkokaavio saattaa näyttää hieman hullulta, mutta tämä johtuu siitä, että tiettyyn prosessiin on muodostettu monia signaaleja ja sitten tämä signaali määrittelee toisen signaalin toisessa prosessilohkossa.
Lopulta pelin ottamat ainoat syötteet ovat Basys3 -kortin tulokello, joka toimii 100 Mhz: n taajuudella, seitsemän Basys3 -kortin kytkintä ja nollauspainike. Tulostuksena on seitsemän segmentin näytön anodi, näytön seitsemän segmenttiä ja LEDit.
Vaihe 4: CLKDivide
Tämä kellonjakajan alimoduuli loi hitaamman kellon riippuen siitä, minkä arvon määrittelimme sille päätiedostossamme. Käytimme tätä alimoduulia Clk400-, PushClk- ja newlck -määritysten määrittämiseen. Hidastettu kello lähetetään. Jakajalle ja hidastetulle kellolle on prosessilohko. Prosessissa on väliaikainen muuttuja, jota kutsuimme count, joka laskee yhden aina, kun syötetyn kellon nouseva reuna osuu. Kun se saavuttaa jakajan numeron, hidas kello vaihtui ja lukema nollautuu.
Vaihe 5: Vaihda prosessilohko
Vaihtoprosessilohko ohjaa LEDien vuorottelevaa liikettä ja nopeutta. Herkkyysluettelossa ovat newclk- ja Stop -signaalit. Pysäytys aiheuttaa lyhyen viiveen, kun käyttäjä ylittää tason. Jos Stop ei ole korkea, LEDit vuorottelevat normaalisti newclk -nopeuden perusteella. Tätä vuorottelevaa kaavaa ohjataan kahdella muuttujalla: Seuraa ja laske. Laskuri määrittää, minkä merkkivalon pitäisi palaa, ja jälki määrittää, lasketaanko lasku ylös vai alas. On toinen signaali, Final, joka koskee vain, kun taso on”111”, mikä osoittaa, että pelaaja on voittanut pelin. Final vuorottelee 0: n ja 1: n välillä jokaisen kellon reunassa, jotta LED -valot syttyvät ja sammuvat jatkuvasti. Tämä on vain visuaalinen elementti lopulliseen näyttöön.
Tämä vuoroprosessi on täydellinen paikka aloittaa tämä projekti. Jos saat LED -valot vuorotellen oikein ja johdonmukaisesti, sinun on vain lisättävä käyttäytymistä tasoitettaessa!
Vaihe 6: Äärellinen tilakone
Loimme äärellisen tilan koneen sanelemaan käyttäytymistä, kun tulokytkintä tai nollauspainiketta painetaan. Jokainen tila on "taso" ja jos kytkin kytketään päälle väärään aikaan tai nollauspainiketta painetaan, taso palaa "000": ksi. Muussa tapauksessa, jos kytkin on kytketty oikein päälle, taso nousee, kunnes se saavuttaa lopullisen tilan, "111" ja päättymisnäyttö tulee näkyviin. FSM perustuu kahteen prosessilohkoon sync_proc ja comb_proc. Sync_proc käyttää kelloa, jota kutsuimme PushClk: ksi. Tämä kello ohjaa sitä, kuinka nopeasti seuraava tila muuttuu nykyiseksi tilaksi. Tämän kellon pitäisi olla melko nopea; valitsimme nopeuden, joka oli noin kaksi kertaa nopeampi kuin nopein LED -nopeutemme.
Toteutimme tämän koodin käyttämällä tasoja FSM: llä; tämän projektin jälkeen huomasimme kuitenkin, että FSM: n tehokkaampi käyttö olisi voinut olla laskentatila, nollaustila tai oleskelutila. Jos mitään ei paineta, se on pysyvässä tilassa. Jos nollauspainiketta painetaan tai soitin on sekaisin, se on nollaustilassa. Jos painat oikein, se on laskentatilassa. Tässä pelissä on monia muita tapoja käyttää FSM: ää!
Vaihe 7: Näytön prosessilohkon hallinta tasolla
Taso ohjaa näytön prosessilohkoa. Herkkyysluettelon muuttujat ovat Level, Reset ja Clk400. Seitsemän segmentin näyttö alkaa näyttämällä ensimmäisen tason”1”. Se laskee aina seitsemään asti aina, kun käyttäjä ylittää tason ja näyttää käyttäjälle, millä tasolla hän on. Kun käyttäjä on läpäissyt tason 7, näytössä näkyy "COOL", joka osoittaa, että pelaaja on voittanut pelin. Tämä "COOL" -näyttö toimii 400 Hz: n kellolla, jota kutsuimme Clk400: ksi. Jos Reset -painiketta painetaan, näyttö palaa kohtaan “1.”
Vaihe 8: LED -nopeuden säätäminen tasolla
Lopuksi taso säätää LEDien nopeutta. Taso on herkkyysluettelon ainoa signaali. D1 on signaali, joka menee kellonjakajaprosessiin saadakseen uuden clk. Aina kun tasoa muutetaan tai tila muuttuu, prosessilohko "Nopeus". Tämä prosessi määrittää D1: n arvon. D1: llä on 8 määriteltyä arvoa sen perusteella, kuinka nopeasti halusimme kunkin tason toimivan. D1 pienenee joka kerta, kun taso nousee, jotta uusi clk toimii nopeammin.
Vaihe 9: Laitteiston kokoaminen
Liitimme leipälevyn Basys3: een yhdellä pmod -liittimellä. Kuusi pmod -porttia käytettiin uros -urosliittimen kytkemiseen, yksi maadoitukseen ja muut viisi 5 LED -valoon. Olemme myös asettaneet vastuksen jokaiselle LEDille. Nämä vastukset ovat 220Ω ja estävät LEDien oikosulun ja palamisen. Vaikka jokaisella LEDillä on jonkin verran vastusta, vastus ei riitä estämään jännitettä lähteestä.
Vaihe 10: Pidä hauskaa
Tämä peli on erittäin helppo pelata. Pelaaja aloittaa levyn oikeasta äärimmäisestä kytkimestä 1, V17. Niiden on käännettävä kytkin korkealle, kun keskimmäinen LED palaa. Sitten he siirtävät yhden kytkimen vasemmalle ja tekevät saman asian! Jos pelaaja pääsee loppuun asti, hän päätyy seitsemänteen kytkimeen, W14. Jos he voittavat pelin, he näkevät todella hauskan lopetusnäytön!
Huomioitavaa on, että tämän pelin luomisessa nopeudet ovat täysin sinun valintasi! Jos valitsemamme nopeudet ovat liian hitaita, voit nopeuttaa sitä ja tehdä siitä vielä haastavampaa! Myöskään tasoja ei ole asetettu. Jos haluat, että sillä on vielä enemmän tasoja, FSM: ään ja tason määrittämiin prosessilohkoihin on tehtävä muutoksia, mutta nämä ovat hyvin yksinkertaisia muutoksia.
Päätimme myös käyttää kortin kytkimiä käyttäjän syötteenä, mutta tämä on mahdollista myös Basys3 -kortin painikkeella; painike poistaa tarpeen palauttaa kytkimet aina, kun käyttäjä aloittaa alusta. Käytimme aluksi painiketta, mutta tämä aiheutti virheitä tason määrittämisessä, koska se hyppäsi useita tasoja, jos kaksi PushClkin nousevaa reunaa osui, kun painiketta pidettiin painettuna.
Alla on video, joka osoittaa, kuinka pelata, käydä läpi neljä ensimmäistä tasoa ja lopullinen lopetusnäyttö.
Tämän projektin päätiedosto on alla.
Lähteet
Basys3 -käyttöopas
Inspiraatiota projektiin - Arduino Stop It -peli
Suositeltava:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 vaihetta
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: FPGA DueProLogic on virallisesti suunniteltu Arduinolle, mutta aiomme tehdä FPGA: sta ja Raspberry Pi 4B: stä kommunikoitavia. FPGA kääntää kulmaa
FPGA Cyclone IV DueProLogic - Painike ja LED: 5 vaihetta
FPGA Cyclone IV DueProLogic - Painike ja LED: Tässä opetusohjelmassa aiomme käyttää FPGA: ta ulkoisen LED -piirin ohjaamiseen. Toteutamme seuraavat tehtävät (A) Käytä FPGA Cyclone IV DuePrologicin painikkeita LED: in ohjaamiseen. (B) Salaman merkkivalo palaa & pois käytöstä ajoittainVideoesittelylaboratorio
FPGA Cyclone IV DueProLogic Controls Servomoottori: 4 vaihetta
FPGA Cyclone IV DueProLogic Controls Servomoottori: Tässä opetusohjelmassa aiomme kirjoittaa Verilog -koodin servomoottorin ohjaamiseen. Servo SG-90 on Wavesharen valmistama. Kun ostat servomoottorin, saatat saada tietolomakkeen, jossa luetellaan käyttöjännite, suurin vääntömomentti ja ehdotettu pu
DIY VR -juoksumatto- Basys3 FPGA-Digilent -kilpailu: 3 vaihetta
DIY VR -juoksumatto- Basys3 FPGA-Digilent -kilpailu: Haluatko rakentaa VR-juoksumaton, jolla voit käyttää työpöytäsovelluksiasi ja -pelejäsi? Sitten olet tullut oikeaan paikkaan! Perinteisissä peleissä käytät hiirtä ja näppäimistöä vuorovaikutuksessa ympäristön kanssa. Siksi meidän on lähetettävä
Mojo FPGA Development Board Shield: 3 vaihetta
Mojo FPGA Development Board Shield: Liitä Mojo -kehityskorttisi ulkoisiin sisääntuloihin tällä suojalla.Mikä on Mojo -kehityskortti? Levy on Alchitryn valmistama. FPGA: t ovat erittäin hyödyllisiä