Sisällysluettelo:

FPGA -reaktiopeli: 10 vaihetta
FPGA -reaktiopeli: 10 vaihetta

Video: FPGA -reaktiopeli: 10 vaihetta

Video: FPGA -reaktiopeli: 10 vaihetta
Video: Представлен TPM 2.0: расширение возможностей ИТ-специалистов с помощью аналитических данных о модулях доверенной платформы 2024, Joulukuu
Anonim
FPGA -reaktiopeli
FPGA -reaktiopeli

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

Materiaalit
Materiaalit
Materiaalit
Materiaalit
Materiaalit
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

Huipputason kaavio Black Box Design
Huipputason kaavio Black Box Design
Huipputason kaavio Black Box Design
Huipputason kaavio Black Box Design

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

CLKJaa
CLKJaa
CLKJaa
CLKJaa
CLKJaa
CLKJaa

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

Vaihtoprosessin lohko
Vaihtoprosessin lohko

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

Äärellinen tilakone
Ää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

Näytön prosessilohkon hallinta tasolla
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

LED -nopeuden säätäminen tasolla
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

Laitteiston kokoonpano
Laitteiston kokoonpano

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: