INHOUDSOPGAWE:

FPGA -reaksiespel: 10 stappe
FPGA -reaksiespel: 10 stappe

Video: FPGA -reaksiespel: 10 stappe

Video: FPGA -reaksiespel: 10 stappe
Video: ТАКОГО ЕЩЕ НИКТО НЕ ВИДЕЛ! Полезные советы и хитрости мастеров на все случаи жизни! 2024, November
Anonim
FPGA -reaksiespel
FPGA -reaksiespel

Deur Summer Rutherford en Regita Soetandar

Stap 1: Inleiding

Vir ons finale projek vir CPE 133 het ons 'n reaksiespel in VHDL ontwerp vir 'n Basys3 -bord. Hierdie spel kan die naaste vergelyk word met die arcade game "Stacker" waar die speler die blokke op die regte tyd moet laat val. Die Basys3 -bord is gekoppel aan 'n broodbord met afwisselende LED's. Hierdie LED -ligte sal op 'n spesifieke frekwensie wissel, afhangende van die vlak. Hierdie speletjie gebruik die klokverdeler en die 4 -syfer -7 -segment -vertoning, sowel as 'n eindtoestandmasjien. As die speler die regte skakelaar aktiveer namate die middelste LED brand, gaan die speler na die volgende vlak van die spel en verhoog die frekwensie van die afwisselende LED's. Dit maak elke opeenvolgende vlak moeiliker as die vorige vlak. As die speler vlak 7, die hoogste vlak, suksesvol klop, sal 'n boodskap op die segmentskerm verskyn en al die LED's terselfdertyd aan en af flits.

Stap 2: materiaal

Materiaal
Materiaal
Materiaal
Materiaal
Materiaal
Materiaal

Die materiaal wat u benodig, is:

  • Digilent Basys3 -bord met mikro -USB -kabel
  • Broodbord
  • 5 LED's
  • 5 weerstande (ons het 220 ohm gebruik)
  • 11 springdrade
  • Rekenaar met Vivado

Stap 3: Black Box -ontwerp op die hoogste vlak

Topvlak -diagram Black Box -ontwerp
Topvlak -diagram Black Box -ontwerp
Topvlak -diagram Black Box -ontwerp
Topvlak -diagram Black Box -ontwerp

Soos u kan sien, begin ons blokdiagram op die hoogste vlak met die nodige horlosies van ons submodule, ClkDivide. Hierdie horlosies is insette in die verskillende prosesblokke. In wese moet die spel erken dat wanneer die gebruiker die skakelaar korrek aanskakel, die LED's vinniger moet begin afwissel en dat die skerm een vlak moet styg. Die blokdiagram kan 'n bietjie gek lyk, maar dit is omdat daar baie seine is wat in 'n sekere proses gevestig word, en dan bepaal die sein 'n ander sein in 'n ander prosesblok.

Uiteindelik is die enigste insette wat die spel neem, die ingangsklok op die Basys3 -bord wat op 100 Mhz loop, sewe skakelaars op die Basys3 -bord en die reset -knoppie. Die anode vir die sewe segmentskerm, die sewe segmente vir die skerm en die LED's word weergegee.

Stap 4: CLKDivide

CLKDivideer
CLKDivideer
CLKDivideer
CLKDivideer
CLKDivideer
CLKDivideer

Hierdie submodule vir klokverdelers het 'n stadiger klok geskep, afhangende van die waarde wat ons in ons hooflêer daaraan toegeken het. Ons het hierdie submodule gebruik om Clk400, PushClk en newlck te bepaal. Hierdie submodule neem 'n horlosie en 'n 32 bit -verdeler as insette. 'N Vertraagde horlosie word uitgevoer. Daar is 'n prosesblok vir die verdeler en die vertraagde klok. In die proses is 'n tydelike veranderlike, wat ons tel genoem het, wat tel elke keer as 'n stygende rand van die ingevoerde klok getref word. Sodra dit die delersgetal bereik het, het die vertraagde horlosie gewissel en die telling word teruggestel na nul.

Stap 5: Skakel prosesblok

Skakelprosesblok
Skakelprosesblok

Die Shift -prosesblok beheer die afwisselende beweging en spoed van die LED's. In die sensitiwiteitslys is die newclk- en stopseine. Stop veroorsaak 'n kort vertraging wanneer die gebruiker die vlak bereik. As Stop nie hoog is nie, wissel die LED's normaalweg af op grond van die spoed van newclk. Hierdie afwisselende patroon word beheer deur twee veranderlikes: Track and count. Count bepaal watter LED moet wees, terwyl Track bepaal of die telling op of af moet tel. Daar is nog 'n sein, Final, wat slegs van toepassing is as die vlak "111" is, wat aandui dat die speler die wedstryd verslaan het. Final wissel tussen 0 en 1 elke klok se rand om die LED's voortdurend aan en uit te skakel. Dit is slegs 'n visuele element vir die finale vertoning.

Hierdie skofproses is die perfekte plek om met hierdie projek te begin. As u u LED's korrek en konsekwent kan afwissel, moet u van hier af net die gedrag byvoeg wanneer u gelyk word!

Stap 6: Finite State Machine

Eindige staatsmasjien
Eindige staatsmasjien

Ons het 'n eindige staatsmasjien geskep om die gedrag te bepaal wanneer die invoerskakelaar of resetknoppie ingedruk word. Elke toestand is 'n 'vlak', en as die skakelaar op die verkeerde tyd aangeskakel word of 'n reset ingedruk word, keer die vlak terug na '000'. Andersins, as die skakelaar korrek aangeskakel is, beweeg die vlak omhoog totdat dit die finale toestand bereik, "111" en die eindskerm verskyn. Die FSM is gebaseer op die twee prosesblokke sync_proc en comb_proc. Sync_proc gebruik die klok wat ons PushClk genoem het. Hierdie klok bepaal hoe vinnig die volgende toestand die huidige toestand word. Hierdie klok behoort redelik vinnig te wees; ons het 'n snelheid gekies wat ongeveer twee keer vinniger was as ons vinnigste LED -snelheid.

Ons het hierdie kode geïmplementeer met behulp van 'n FSM vir die vlakke; Na hierdie projek het ons egter besef dat 'n meer doeltreffende gebruik van 'n FSM moontlik sou gewees het om 'n afteltoestand, 'n terugstellingstoestand of 'n verblyfstatus te hê. As niks ingedruk word nie, is dit in die verblyfstaat. As daar op reset gedruk word of die speler deurmekaar geraak het, is dit in 'n reset -toestand. As dit korrek ingedruk is, is dit in die telling -toestand. Daar is ook baie ander maniere om 'n FSM in hierdie speletjie te gebruik!

Stap 7: Beheer van die skermprosesblok met vlak

Beheer van blokke vir vertoonproses met vlak
Beheer van blokke vir vertoonproses met vlak

Vlak beheer die vertoonprosesblok. Die veranderlikes in die sensitiwiteitslys is Level, Reset en Clk400. Die 7 -segment vertoning begin deur '1' vir die eerste vlak te vertoon. Dit tel tot 7 elke keer as die gebruiker 'n vlak slaag om die gebruiker te wys op watter vlak hulle is. Sodra die gebruiker vlak 7 geslaag het, vertoon dit 'COOL' om aan te dui dat die speler die wedstryd geklop het. Hierdie 'COOL' skerm vertoon 'n 400 Hz -horlosie wat ons Clk400 genoem het. As Reset ingedruk word, gaan die skerm terug na "1."

Stap 8: Beheer LED -snelheid met vlak

Beheer LED -snelheid met vlak
Beheer LED -snelheid met vlak

Laastens beheer Level die spoed van die LED's. Vlak is die enigste sein in die sensitiwiteitslys. D1 is die sein wat na die Clock Divider -proses gaan om newclk te kry. Elke keer as die vlak verander word of die toestand verander, blokkeer die proses "Spoed". Hierdie proses bepaal die waarde van D1. Daar is 8 gedefinieerde waardes van D1 wat ons gekies het, gebaseer op hoe vinnig ons elke vlak wou laat loop. D1 word kleiner elke keer as die vlak toeneem, sodat die newclk vinniger loop.

Stap 9: Hardeware -samestelling

Hardeware vergadering
Hardeware vergadering

Ons het die broodbord aan die Basys3 gekoppel met een van die pmod -aansluitings. Ses van die pmod -poorte is gebruik om 'n manlike -manlike aansluiting aan te sluit, een vir grond en die ander vyf vir die 5 LED's. Ons het ook 'n weerstand vir elke LED geplaas. Hierdie weerstande is 220Ω en voorkom dat die LED's kortsluit en uitbrand. Alhoewel elke LED 'n mate van weerstand het, is die weerstand nie genoeg om die spanning van die bron te belemmer nie.

Stap 10: Om pret te hê

Hierdie speletjie is baie maklik om te speel. Die speler begin op die skakelaar 1 heel regs van die bord, V17. Hulle moet die skakelaar hoog draai as die middelste LED aan is. Hulle skuif dan een skakelaar na links en doen dieselfde! As die speler die einde bereik, eindig hy op die sewende skakelaar, W14. As hulle die wedstryd klop, sien hulle 'n baie aangename eindvertoning!

Iets om op te let is dat die snelhede by u is wanneer u hierdie speletjie skep! As die snelhede wat ons gekies het, te stadig is, kan u dit bespoedig en nog meer uitdagend maak! Daar is ook geen vaste aantal vlakke nie. As u nog meer vlakke wil hê, moet u die FSM aanpas en die prosesblokke bepaal deur Level, maar dit is baie eenvoudige veranderinge.

Ons het ook gekies om skakelaars op die bord te gebruik as die gebruikersinvoer, maar dit is ook moontlik met 'n knoppie op die Basys3 -bord; Met die knoppie word die noodsaaklikheid om die skakelaars te herstel elke keer as die gebruiker weer begin. Ons het aanvanklik 'n knoppie gebruik, maar dit het foute in die definisie van die vlak veroorsaak, omdat dit meer vlakke sou spring as twee stygende rande van PushClk getref word terwyl die knoppie ingedruk gehou word.

Hieronder is 'n video wat demonstreer hoe om te speel, deur die eerste 4 vlakke te gaan, en die finale eindvertoning.

Die hooflêer vir hierdie projek is hieronder ingesluit.

Bronne

Basys3 naslaanhandleiding

Inspirasie vir projek - Arduino Stop It -spel

Aanbeveel: