INHOUDSOPGAWE:
- Stap 1: Inleiding
- Stap 2: materiaal
- Stap 3: Black Box -ontwerp op die hoogste vlak
- Stap 4: CLKDivide
- Stap 5: Skakel prosesblok
- Stap 6: Finite State Machine
- Stap 7: Beheer van die skermprosesblok met vlak
- Stap 8: Beheer LED -snelheid met vlak
- Stap 9: Hardeware -samestelling
- Stap 10: Om pret te hê
Video: FPGA -reaksiespel: 10 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
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
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
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
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
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
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
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
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
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:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 stappe
FPGA Cyclone IV DueProLogic Controls Raspberry Pi Camera: Ten spyte van die FPGA DueProLogic is amptelik ontwerp vir Arduino, gaan ons die FPGA en Raspberry Pi 4B oordraagbaar maak. FPGA om die hoek van
FPGA Cyclone IV DueProLogic - drukknop en LED: 5 stappe
FPGA Cyclone IV DueProLogic - drukknop en LED: In hierdie tutoriaal gaan ons die FPGA gebruik om die eksterne LED -stroombaan te beheer. Ons gaan die volgende take uitvoer (A) Gebruik die drukknoppies op FPGA Cyclone IV DuePrologic om LED te beheer. (B) Flash LED aan & periodiek af Video demo -laboratorium
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 stappe
FPGA Cyclone IV DueProLogic Controls Servomotor: In hierdie tutoriaal gaan ons Verilog -kode skryf om die servomotor te beheer. Die servo SG-90 word vervaardig deur Waveshare. As u die servomotor koop, ontvang u moontlik 'n datablad wat die werkspanning, maksimum wringkrag en die voorgestelde Pu
DIY VR-loopband- Basys3 FPGA-Digilent-wedstryd: 3 stappe
DIY VR-loopband- Basys3 FPGA-Digilent-wedstryd: wil u 'n VR-loopband bou waarop u u lessenaarprogramme en speletjies kan bestuur? Dan het u op die regte plek gekom! In konvensionele speletjies gebruik u die muis en die sleutelbord om met die omgewing te kommunikeer. Daarom moet ons die
Mojo FPGA Development Board Shield: 3 stappe
Mojo FPGA Development Board Shield: Koppel u Mojo -ontwikkelingsbord aan eksterne insette met hierdie skild. Wat is die Mojo -ontwikkelingsbord? Die Mojo -ontwikkelingsbord is 'n ontwikkelingsbord rondom die Xilinx spartan 3 FPGA. Die bord is gemaak deur Alchitry. FPGA's is baie handig