Სარჩევი:

პონგის თამაში: 6 ნაბიჯი
პონგის თამაში: 6 ნაბიჯი

ვიდეო: პონგის თამაში: 6 ნაბიჯი

ვიდეო: პონგის თამაში: 6 ნაბიჯი
ვიდეო: კახი კალაძე დატროლეს 😀🤣🤣 2024, ივლისი
Anonim
პონგის თამაში
პონგის თამაში

მასალები:

Basys3 FPGA დაფა

VGA კაბელი

ვივადო

ამ ინსტრუქციის მიზანია შექმნას პონგის თამაში, რომელიც მონიტორზე იქნება ნაჩვენები. პროექტი გამოიყენებს VHDL პროგრამირებას და იყენებს Basys3 FPGA კოდის განსახორციელებლად და გადასცემს სურათს VGA ინტერფეისის გამოყენებით. ეს გაკვეთილი განკუთვნილია მათთვის, ვისაც აქვს VHDL– ის შესახებ წინასწარი ცოდნა. სამეურვეო დაიყოფა 6 სხვადასხვა ნაწილად: მიმოხილვა, პროცესი, ქულების დამმუშავებელი, სურათების გენერირება, პონგის თამაში და VGA.

ნაბიჯი 1: მიმოხილვა

მიმოხილვა
მიმოხილვა

ზემოთ მოყვანილი სურათი არის პროექტის საერთო სქემატური დიზაინი

თამაშის მიზანი:

თამაში შედგება დისპლეისგან, რომლის საშუალებითაც შესაძლებელია მომხმარებლის კონტროლი, და ფიქსირებული კედელი, რომელიც მოქმედებს როგორც ზედა ზღვარი. როდესაც მომხმარებელი დააწკაპუნებს დაწყების ღილაკს, რომელიც არის მაღლა ღილაკი, ბურთი დაიწყებს აწევას და გამოხტება კედლიდან და შეეცდება დაარტყას პედლს. თუ ბურთი ურტყამს ტალღას, ის კვლავ იბრუნებს და აგრძელებს აწევას მანამ, სანამ ის არ გამოტოვებს პედელს. თამაში მთავრდება, როდესაც ბურთი ვერ ხვდება ტალღას. მომხმარებელს შეეძლება გამოიყენოს მარცხენა და მარჯვენა ღილაკები პედლის მოძრაობის დასადგენად. თამაშის გადატვირთვის მიზნით, მომხმარებელმა უნდა დააჭიროს ცენტრალურ ღილაკს. სირბილის დრო ჩაწერილი იქნება 7 სეგმენტის ეკრანზე. არსებობს ხუთი დონე და ყოველ ათ წამში დონე იზრდება, სანამ არ მიაღწევთ 5 დონეს, სადაც ის დარჩება სანამ მომხმარებელი არ წააგებს. დონეები განისაზღვრება ბურთის სიჩქარით; ეს ნიშნავს, რომ ყოველ ათ წამში, ბურთის სიჩქარე იზრდება, რითაც იზრდება თამაშის სირთულე.

Სისტემური არქიტექტურა:

ქვემოთ მოყვანილი დიაგრამა არის სისტემის ძირითადი საერთო ზედა დონის ბლოკ-დიაგრამა. სისტემას აქვს ოთხი შეყვანა: ღილაკი R, ღილაკი L, დაწყება და გადატვირთვა და საათი. მას აქვს ჰორიზონტალური და ვერტიკალური სინქრონიზაციის შედეგები, RBG (რაც გულისხმობს პიქსელის ფერს გარკვეულ ადგილას) და ქულა (რომელიც მოქმედებს როგორც ავტობუსი 7 სეგმენტის ეკრანზე). დასაწყისის ღილაკი გამოყენებული იქნება როგორც დასაწყისი ღილაკი და მარცხენა და მარჯვენა ღილაკები გამოყენებული იქნება პედლის გადასაადგილებლად მათი შესაბამისი მიმართულებით. 7-სეგმენტიანი ეკრანი გამოყენებული იქნება ანგარიშის ჩასაწერად, რაც არის წამების რაოდენობა, რომელსაც მომხმარებელი თამაშობს თამაშის დაკარგვის გარეშე. რიცხვი ნაჩვენები იქნება ათობითი რიცხვის სახით.

წრიული არქიტექტურა: ჩვენ ავაშენებთ ჩვენს გიზმას ერთი FSM გამოყენებით, რომელიც შეიცავს უფრო მცირე FSM- ს, ქვე-FSM გააკონტროლებს თამაშის სირთულეს, ხოლო მთავარი FSM გააკონტროლებს თამაშის მთლიან ნაკადს. ჩვენი გიზმო ასევე გამოიყენებს მინიმუმ სამ საათის გამყოფს, ერთი ქულისთვის (დრო), ერთი ეკრანის განახლების სიხშირისთვის და ერთი, რომელიც დაკავშირებულია DeMux– ის გამომუშავებასთან, რათა ჩვენ ვაკონტროლოთ თამაშის სიჩქარე გააგრძელებს სირთულის გაზრდას. რაც უფრო დიდხანს თამაშობთ, თამაში უფრო სწრაფად წავა. ჩვენ გვექნება DeMux– ის ქვე – FSM– ის ამჟამინდელი მდგომარეობის საკონტროლო შეყვანა, რათა ჩვენ გავაკონტროლოთ რამდენად სწრაფად წავა თამაში რამდენ ხანს თქვენ თამაშობთ. ჩვენ ვიყენებთ რამდენიმე მრიცხველს, ერთი ეკრანის განახლებისთვის და ერთი ანგარიშის დასათვლელად თამაშის გაგრძელებისას. ამ პროექტს აქვს ორი ძირითადი მოდული და სუბმოდულების მასივი, რომლებიც მოახდენენ მონაცემების მანიპულირებას. ორი ძირითადი ქვემოდულია VGA დრაივერი, ასევე ღილაკის ლოგიკური მოდული. VGA დრაივერი შედგება პროგრამირებადი მეხსიერებისგან, საათის გამყოფისგან და ლოგიკისგან, რომელიც მანიპულირებს ფერის გამომუშავებაზე. ღილაკის ლოგიკური მოდული ასევე შედგება საათის გამყოფისა და პროგრამირებადი მეხსიერებისგან, ასევე ორობითიდან ათწილადიანი კონვერტორი 7-სეგმენტიანი ეკრანისთვის შესაბამისი საათის გამყოფით.

ნაბიჯი 2: სურათის დამუშავება

პროექტის გამოსახულების პროცესის განყოფილებისთვის ჩვენ განვსაზღვრავთ ბურთისა და პედლის მოძრაობას. პროგრამას აქვს პორტები, რომლებიც მოიცავს მარცხენა, მარჯვენა, ზედა და ცენტრალურ ღილაკებს, ამჟამინდელ მდგომარეობას, საათს, ბურთის X და Y პოზიციებს, პედლის მარცხენა და მარჯვენა კიდეებს და ჩავარდნას. ახლანდელი მდგომარეობა გამოიყენება ჩართვის სიგნალის დასადგენად. კოდი გადის მრავალ შემთხვევას, რომლითაც ბურთს შეუძლია გადაადგილება და აქვს მითითებული პირობები ბურთის ბილიკის დასადგენად. მომდევნო პროცესის ბლოკი განსაზღვრავს მიმართულებით მოძრაობას, რომლის მიხედვითაც მომხმარებელი დააჭერს ღილაკს. პროექტის ამ ნაწილის კოდი თან ერთვის დეტალურ კომენტარებს, სადაც აღწერილია რას აკეთებს თითოეული ნაწილი.

ნაბიჯი 3: ქულების დამმუშავებელი

ქულების დამმუშავებელი
ქულების დამმუშავებელი

ეს განყოფილება შედგება ფაილებისგან, რომლებიც დაკავშირებულია ანგარიშის წამებში ჩვენებასთან Basys3 დაფაზე 7 სეგმენტის ჩვენებაზე. იგი მოიცავს საათის გამყოფს, რომელიც გამოიყენება წამების დასათვლელად, ქულის მრიცხველი ითვლის წამს, რომელსაც მომხმარებელი თამაშობს, სეგმენტის მძღოლი იღებს ქულებს და გარდაქმნის მას ანოდებად და კათოდებად ეკრანზე გამოსაჩენად და ასევე განსაზღვრავს იმ პოზიციას ნომერი გამოჩნდება და ბოლოს, სეგმენტის დამმუშავებელი გარდაქმნის ორობითი ციფრებს ათწილად ციფრებზე, რომლებიც გამოჩნდება ეკრანზე. ანგარიშის დამმუშავებელი ათავსებს ყველა ნაწილს და ასახავს სიგნალებს. ხუთივე ფაილის კოდი მოცემულია ქვემოთ.

საათის გამყოფი:

საათის გამყოფს აქვს შესასვლელი Clk (საათი), CEN (ჩართვა) და Div (გამყოფი) და გამომავალი Clk_out. თუ ჩართვის სიგნალი ჩართულია, მაშინ საათი ჩაითვლება ამომავალ ზღვარზე.

ქულის მრიცხველი

Thescore მრიცხველს აქვს შეყვანის Clk (საათი) და RST (გადატვირთვა) და გამოაქვს Clk_Out და Q რომელიც არსებითად მოქმედებს როგორც ქულის გამომუშავება.

სეგმენტის დრაივერი

სეგმენტის დრაივერს აქვს შეყვანა D1, D10, D100, D1000 და საათი. "D" - ის შემდეგ რიცხვები მიუთითებს ათობითი ადგილს 7 სეგმენტის ჩვენებაზე. გამომავალი არის ანოდი და ციფრი. საათი ითვლის და ანიჭებს რიცხვებს და მის პოზიციას. მაგალითად, "9" გამოჩნდება ერთ ადგილას "0" s ათასობით, ასობით და ათეულის ადგილას. როდესაც ის გადადის "10" -ზე, რიცხვს ექნება "1" ათეულებში და "0" - ს ათასობით, ასობით და ერთ ადგილას.

სეგმენტის დამმუშავებელი

სეგმენტის დამმუშავებელს აქვს ციფრი შეყვანის სახით და კათოდები, როგორც გამომავალი. ეს არსებითად ორობითი რიცხვებია კათოდური ეკრანის ეკრანზე ათობითი რიცხვების გამოსაყვანად.

ქულების დამმუშავებელი

Score Handler შედგება წინა ოთხი ერთეულისგან და ათავსებს ყველაფერს ერთად და ასახავს სიგნალებს. ის ასევე ააქტიურებს და გამორთავს მრიცხველს არსებული მდგომარეობიდან გამომდინარე.

ნაბიჯი 4: სურათის გენერირება

გამოსახულების წარმოქმნა შედგება ოთხი კომპონენტისგან: ანიმაცია, წარუმატებელი მრიცხველი, სურათის განახლება და დაწყების მრიცხველი. ეს ფაილები ეხება თუ როგორ უნდა შეიქმნას გამოსახულებები ეკრანის მონიტორზე.

ანიმაცია

ანიმაციის ფაილს აქვს შესასვლელი Clk (საათის სიგნალი), CEN (დათვლის ჩართვა), RST (სიგნალის გადატვირთვა), B_X (ბურთის X პოზიცია), B_Y (ბურთის Y პოზიცია), P_L (მარცხენა პედლის პოზიცია) და P_R (პედლის მარჯვენა პოზიცია). შედეგები არის WA (მისამართი, რომელსაც ჩვენ ვწერთ ფერს) და WD (ფერი იწერება განსაზღვრულ მისამართზე). ფაილს აქვს Play_Counter, რომელიც არის მრიცხველი, რომელიც გამოყენებული იქნება როგორც საკონტროლო შეყვანა MUX– ისთვის, კოდირება, რომელსაც შეუძლია სწორი ფერის სწორი ადგილების გამოტანა და ბოლოს მულტიპლექსერი, რომელიც აჩვენებს სწორ ფერს პედლის პოზიციისა და ბურთი

სურათის განახლება

სურათის განახლების ფაილი გამოიყენება გამოსახულების გასაახლებლად, როგორც ბურთის პოზიციის შეცვლა. ფაილი შეიცავს კომპონენტებს ანიმაციის, დაწყების მრიცხველის და წარუმატებელი მრიცხველის ფაილებიდან. ის ასახავს სიგნალებს თითოეული კომპონენტიდან და იყენებს სახელმწიფო ლოგიკას სიგნალებისა და გამომავალი მისამართების დასადგენად.

დაიწყეთ მრიცხველი

Start Counter იყენებს შეყვანის Clk, RS და CEN და გამოსცემს WA და WD. იგი იყენებს მრიცხველს და კონვერტაციას MUX– ის საკონტროლო შეყვანის დასადგენად. შემდეგ მულტიპლექსერი იყენებს შეყვანას ფერის სწორი მისამართების დასადგენად და აგზავნის ამ მონაცემებს VGA დრაივერზე. ეს გამოიყენება "პონგის" ჩვენებისას, როდესაც მომხმარებელი იწყებს თამაშს.

წარუმატებელი მრიცხველი

მარცხის მრიცხველი გამოიყენება "თამაშის დასრულების" ჩვენებისას, როდესაც მომხმარებელი კარგავს თამაშს. მას აქვს Clk, RST და CEN სიგნალი. იგი იყენებს მრიცხველს და კონვერტაციის ფორმულას MUX- ის საკონტროლო შეყვანის დასადგენად. შემდეგ მულტიპლექსერი იყენებს შეყვანას სწორი ფერის მისამართების დასადგენად და ამ მონაცემებს უგზავნის VGA დრაივერს.

ნაბიჯი 5: პონგის თამაში

პონგის თამაში
პონგის თამაში

პროექტის ეს ნაწილი მოიცავს Pong Master, Finite State Machine (FSM), Timer და Start Debounce ფაილებს.

ტაიმერი

ტაიმერს აქვს შეყვანის Clk (საათი) და PS (ახლანდელი მდგომარეობა) და ტაიმერი და Clk_out, როგორც გამოსასვლელი. ტაიმერი გამოიყენება თამაშის სიჩქარის შესაცვლელად ყოველ ხუთ წამში.

ნაკადი FSM

Flow FSM– ს აქვს შეყვანის Clk, Fail, Timer, Bttn_S (დაწყების ღილაკი) და Buttn_RST (გადატვირთვის ღილაკი) და გამომავალი Pres_S (Present State Output). FSM იყენებს ტაიმერს ახლანდელი მდგომარეობის განახლების მიზნით და განაგრძობს შემდეგი მდგომარეობის განახლებას, სანამ თამაში არ მიაღწევს მე –5 დონეს, სადაც ის დარჩება თამაშის დასრულებამდე.

დაიწყეთ დებიუანსი

Start Debounce არის ბურთის საწყისი ამოსვლა. მას აქვს შესასვლელი S_in და Clk და გამომავალი S_out.

Pong Master ეს ფაილი იყენებს ყველა წინა კომპონენტს და ქმნის მას ისე, რომ ყველა კომპონენტი მყისიერია. ეს არის სამაგისტრო ფაილი, რომელიც აერთიანებს ყველა წინა კომპონენტს, რომელიც ჩვენ ერთად შევქმენით.

ნაბიჯი 6: VGA დრაივერი

VGA (ვიზუალური გრაფიკული მასივი) დრაივერი არის პროგრამული უზრუნველყოფის ნაწილი, რომელიც გამოიყენება ბრძანებების ან მონაცემების მისაღებად და იგზავნება ეკრანზე. მძღოლი მოგვცა ჩვენმა პროფესორმა. გამოიყენეთ დრაივერი და VGA კაბელი Basys3 დაფის მონიტორთან დასაკავშირებლად.

თქვენ ახლა მზად უნდა იყოთ გააკეთოთ თქვენი საკუთარი პონგის თამაში VHDL გამოყენებით!

გირჩევთ: