Სარჩევი:

2 მოთამაშე კონკურენტუნარიანი VS დროის თამაში: 4 ნაბიჯი
2 მოთამაშე კონკურენტუნარიანი VS დროის თამაში: 4 ნაბიჯი

ვიდეო: 2 მოთამაშე კონკურენტუნარიანი VS დროის თამაში: 4 ნაბიჯი

ვიდეო: 2 მოთამაშე კონკურენტუნარიანი VS დროის თამაში: 4 ნაბიჯი
ვიდეო: მოთამაშე filmebi qartulad ფილმები ქართულად 2024, ნოემბერი
Anonim
2 მოთამაშე კონკურენტული VS დროის თამაში
2 მოთამაშე კონკურენტული VS დროის თამაში

თქვენ დაგჭირდებათ:

1. Digilent Basys 3, FPGA Board (ან ნებისმიერი სხვა FPGA,)

2. Vivado– ს ან სხვა VHDL გარემოს შედარებით თანამედროვე ვერსია

3. კომპიუტერი, რომელსაც შეუძლია გაუშვას აღნიშნული პროგრამა.

ნაბიჯი 1: თამაში თავად

თამაში თავად
თამაში თავად

როგორ ურთიერთობს FSM მოდულებთან.

Როგორ ვითამაშოთ

დასაწყებად, თქვენ დააჭირეთ შუა ღილაკს. ეს გამოიწვევს "99" -ს, რომელიც წარმოადგენს მოთამაშის მდგომარეობას, აჩვენებს შვიდი სეგმენტის ჩვენებას. შემდეგ, LED- ები თანმიმდევრულად ანათებენ მარჯვნიდან მარცხნივ. ეს ქმნის ძალაუფლების ბარს. როდესაც დენის ბარი სავსეა, ის გადატვირთულია. ერთი მოთამაშის მიზანია გადართოს მათი გადამრთველი, როდესაც ბარი მაქსიმალურად მაღალია. რაც უფრო მეტი LED ნათურა ანათებს, მით უფრო მეტ ზიანს აყენებს მოთამაშე მეორე მოთამაშეს. მას შემდეგ რაც ერთი მოთამაშე გადატრიალდება, ზარალი გამოირიცხება მეორე მოთამაშის ჯანმრთელობის მდგომარეობიდან. შემდეგ, ის გადადის მოთამაშის რიგზე. ახლა, ნაჩვენები რიცხვი წარმოადგენს მოთამაშის ჯანმრთელობას და დენის ზოლი ივსება მარცხნიდან მარჯვნივ. მას შემდეგ, რაც მეორე მოთამაშე გადადის, ზიანი იკლებს და ის ისევ მოთამაშეს უბრუნდება. ეს მეორდება მანამ, სანამ ერთი მოთამაშე მიაღწევს 0 ჯანმრთელობას. ამ ფუნქციის ვიდეო თან ერთვის.

ნაბიჯი 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

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

მდგომარეობა 1: მენიუ პირველი მდგომარეობა არის მენიუს ეკრანი, რომელიც ერთ -ერთი უმარტივესი მდგომარეობაა. იგი მოიცავს შვიდი სეგმენტის ჩვენებას, რომელიც აჩვენებს სიტყვას "PLAY" და ღილაკს, რომელიც იწვევს თამაშის დაწყებას. ღილაკი, BTN, მიგვიყვანს შემდეგ მდგომარეობამდე, რომელიც მოთამაშის ჯერია.

მდგომარეობა 2: მოთამაშის ჯერია

მოთამაშის პირველი რიგი ააქტიურებს სიგნალს, რომელიც იწვევს შვიდი სეგმენტის ჩვენებას, რათა აჩვენოს მოთამაშეს ორი. კიდევ ერთი სიგნალი ჩართულია სხვა მოდულის იმპორტირებული ცვლის რეგისტრის გააქტიურებაზე, რომელიც ჩვენ შევქმენით (Pone.vhd). ეს ცვლადი რეესტრი ანათებს LED- ს, როგორც სხვა თამაშებში გაზრდილი სიმძლავრის მაჩვენებელი, და შემდეგ გადააყენებს 0 -ს, როდესაც მიაღწევს LED- ების მაქსიმალურ რაოდენობას, რომელიც შეიძლება იყოს განათებული. ის განახლდება barclock.vhd– დან მიღებული საათის მზარდ ზღვარზე, რომელიც შეცვლილია ნასესხები ლაბორატორიული ფაილიდან. ჩვენ გვქონდა ერთი მოთამაშის ბარი მარჯვნივ და ივსებოდა მარცხნივ, რადგან ერთი მოთამაშის გადამრთველი ასევე მარცხნივ არის (მომხმარებლის ინტუიციური გამოცდილებისთვის). გადამრთველის გადატრიალების შემდეგ, მდგომარეობა გადადის მოთამაშეს ერთ გამოქვითვაზე და LED- ის აქტიური ოდენობა ინახება სიგნალში.

მდგომარეობა 3: პირველი მოთამაშე აკლდება სიგნალი LED- ის აქტიური ოდენობით განსაზღვრავს ჯანმრთელობის რაოდენობას, რომელიც გამოიქვითება. ეს ხდება სხვა ცვლის რეგისტრაციის (deductor1.vhd) საშუალებით, რომელიც LED- ების გაზრდის ნაცვლად ამცირებს მათ. ეს მცირდება საათის დივი ერთ -ერთი მოდულის მზარდ ზღვარზე, რომელიც ჩვენ ვისესხეთ და შევცვალეთ (downcounterclock.vhd). ზუსტად ისე, როგორც ერთი LED გამორთულია, ჯანმრთელობის ერთი წერტილი გამოაკლდება მოთამაშეს ორის საერთო ჯანმრთელობას. თუ ამ პროცესში მოთამაშე ორი მიაღწევს 0 ჯანმრთელობას, ჩვენ ვჩერდებით და მაშინვე გადავალთ "თამაშის დასრულების" მდგომარეობაში. წინააღმდეგ შემთხვევაში, მას შემდეგ, რაც LED ვექტორი მიაღწევს "000000000000000000" -ს, ჩვენ გადავალთ მოთამაშეს ორი მხრივ.

მდგომარეობა 4: მოთამაშის მეორე რიგი მოთამაშის ორი რიგი ზუსტად იგივეა, რაც ერთი მოთამაშის ჯერია, გარდა იმისა, რომ მისი ცვლის რეგისტრატორი (Ptwo.bhd) მიდის მარცხნიდან მარჯვნივ და გადამრთველი არის დაფის მარჯვენა მხარეს. სიგნალი გააქტიურებულია, რომ ჰქონდეს Player 1 -ის ჯანმრთელობის ჩვენება. მას შემდეგ, რაც გადამრთველი 2 აქტიურია, ის გადადის მოთამაშეს ორი გამოქვითვის მხრივ.

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

ეტაპი 6: თამაში დასრულებულია თუ რომელიმე მომენტში რომელიმე მოთამაშე მიაღწევს ნულოვან ჯანმრთელობას, თამაში გადადის ამ მდგომარეობაზე. არაფერი ლამაზი ეკრანები. თუ BTN ერთზე დაჭერილია, მაშინ ჯანმრთელობა გადატვირთულია 99 -ზე და მდგომარეობა ბრუნდება მენიუში, რაც ეფექტურად იწყებს თამაშს.

ნაბიჯი 3: მოდულები

მოდულები
მოდულები

შავი ყუთის დიაგრამა თამაშისთვის

Downcounterclock (ბრაიან მილის მიერ clk_div.vhd მოდულის საფუძველზე):

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

ბარკლიკი - (დაფუძნებულია ბრაინ მილის მიერ clk_div.vhd მოდულზე):

ეს საათი ამუშავებს სიმძლავრის გაზომვის დროს, რაც ჩვენ სწრაფად გავზარდეთ თამაშის სირთულის დასამატებლად. ეს დრო შეიძლება მორგებული იყოს თქვენი სურვილისამებრ, გაზარდოთ სიჩქარე მუდმივი max_count– ის უფრო დიდი რიცხვით, ან შეამციროთ max_count– ით უფრო მცირე რიცხვით. Sseg_dec - (დაწერილი ბრაიან მილის): ეს მოდული იღებს 8 ბიტიან რიცხვს, როგორც შეყვანისას, რომელსაც აშიფრებს, გარდაქმნის რიცხვს ათწილადის ექვივალენტში და შემდეგ გამოაქვს შვიდი სეგმენტის ჩვენება. იმისათვის, რომ ეს ფაილი იმუშაოს, თქვენ უნდა დარწმუნდეთ, რომ თქვენი შეზღუდვები ჩვენსას ემთხვევა.

პონი:

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

პტვო:

ეს არის P1 მოდულის გადაბრუნებული ვერსია.

დედუქტორი 1:

ეს არის ცვლის რეგისტრისა და გამოკლების კომბინაცია. ცვლის რეგისტრი მიდის P1– ის ცვლის რეგისტრის საპირისპირო მიმართულებით, რაც მიუთითებს გამოქვითვაზე. ეს ასევე გამოაკლებს 1 მოთამაშის ჯანმრთელობას 1 საათის ყოველ ციკლზე, ასე რომ ამ ორი ფუნქციის კომბინაციით, როგორც ჩანს, მოწინააღმდეგის ჯანმრთელობა მცირდება 1 -ით ჯანმრთელობის ბარიდან ყოველი ქვემოთ.

Deductor2: ეს არის Deductor1 მოდულის გადახვეული ვერსია.

PlayDecoder (ნასესხები და სრულად ნასესხები ekchen35649– დან მისი 133 გასაგები): ეს გამოიყენება მენიუს მდგომარეობაში, რათა წარმოაჩინოს სიტყვა „PLAY“შვიდი სეგმენტის დეკოდერზე.

ნაბიჯი 4: ტესტი

ეს თამაში თავდაპირველად შთაგონებული იყო კირბის ერთ – ერთი მინი თამაშით. ეს არის მარტივი ორი მოთამაშის თამაში, რომლის თამაშიც შესაძლებელია Basys 3 დაფაზე, ან ნებისმიერ FPGA– ზე.

ნაბიჯი 1: საჭირო მასალები

თქვენ დაგჭირდებათ: Digilent Basys 3, FPGA Board (ან სხვა) Vivado– ს შედარებით თანამედროვე ვერსია, ან სხვა vhdl გარემო კომპიუტერი, რომელსაც შეუძლია გაუშვას აღნიშნული პროგრამა ტვინი

ნაბიჯი 2: თამაში თავად

Როგორ ვითამაშოთ

დასაწყებად, თქვენ დააჭირეთ შუა ღილაკს. ეს გამოიწვევს "99" -ს, რომელიც წარმოადგენს მოთამაშის მდგომარეობას, აჩვენებს შვიდი სეგმენტის ჩვენებას. შემდეგ, LED- ები თანმიმდევრულად ანათებენ მარჯვნიდან მარცხნივ. ეს ქმნის ძალაუფლების ბარს. როდესაც დენის ბარი სავსეა, ის გადატვირთულია. ერთი მოთამაშის მიზანია გადართოს მათი გადამრთველი, როდესაც ბარი მაქსიმალურად მაღალია. რაც უფრო მეტი LED ნათურა ანათებს, მით უფრო მეტ ზიანს აყენებს მოთამაშე მეორე მოთამაშეს. მას შემდეგ რაც ერთი მოთამაშე გადატრიალდება, ზარალი გამოირიცხება მეორე მოთამაშის ჯანმრთელობის მდგომარეობიდან. შემდეგ, ის გადადის მოთამაშის რიგზე. ახლა, ნაჩვენები რიცხვი წარმოადგენს მოთამაშის ჯანმრთელობას და დენის ზოლი ივსება მარცხნიდან მარჯვნივ. მას შემდეგ, რაც მეორე მოთამაშე გადადის, ზიანი იკლებს და ის ისევ მოთამაშეს უბრუნდება. ეს მეორდება მანამ, სანამ ერთი მოთამაშე მიაღწევს 0 ჯანმრთელობას. ამ ფუნქციის ვიდეო თან ერთვის.

თამაშის სათამაშოდ, ჩატვირთეთ იგი დაფის დაფაზე და დააჭირეთ შუა ღილაკს. შეეცადეთ გადაატრიალოთ გადამრთველი რაც შეიძლება მეტი LED- ით და შემდეგ დაელოდეთ და უყურეთ, როგორ გამოაკლებს დაფა მოწინააღმდეგის ჯანმრთელობას. შემდეგ გადაეცი მეგობარს და

ნაბიჯი 3: FSM

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

(სახელმწიფო დიაგრამა)

მდგომარეობა 1: მენიუ

პირველი მდგომარეობა არის მენიუს ეკრანი, რომელიც ერთ -ერთი უმარტივესი მდგომარეობაა. იგი მოიცავს შვიდი სეგმენტის ჩვენებას, რომელიც აჩვენებს სიტყვას "PLAY" და ღილაკს, რომელიც იწვევს თამაშის დაწყებას. ღილაკი, BTN, მიგვიყვანს შემდეგ მდგომარეობამდე, რომელიც მოთამაშის ჯერია.

მდგომარეობა 2: მოთამაშის ჯერია

მოთამაშის პირველი რიგი ააქტიურებს სიგნალს, რომელიც იწვევს შვიდი სეგმენტის ჩვენებას, რათა აჩვენოს მოთამაშეს ორი. კიდევ ერთი სიგნალი ჩართულია სხვა მოდულის იმპორტირებული ცვლის რეგისტრის გააქტიურებაზე, რომელიც ჩვენ შევქმენით (Pone.vhd). ეს ცვლადი რეესტრი ანათებს LED- ს, როგორც სხვა თამაშებში გაზრდილი სიმძლავრის მაჩვენებელი, და შემდეგ გადააყენებს 0 -ს, როდესაც მიაღწევს LED- ების მაქსიმალურ რაოდენობას, რომელიც შეიძლება იყოს განათებული. ის განახლდება barclock.vhd– დან მიღებული საათის მზარდ ზღვარზე, რომელიც შეცვლილია ნასესხები ლაბორატორიული ფაილიდან. ჩვენ გვქონდა ერთი მოთამაშის ბარი მარჯვნივ და ივსებოდა მარცხნივ, რადგან ერთი მოთამაშის გადამრთველი ასევე მარცხნივ არის (მომხმარებლის ინტუიციური გამოცდილებისთვის). გადამრთველის გადატრიალების შემდეგ, მდგომარეობა გადადის მოთამაშეს ერთ გამოქვითვაზე და LED- ის აქტიური ოდენობა ინახება სიგნალში.

მდგომარეობა 3: მოთამაშე ერთი გამოაკლდება

სიგნალი LED- ის აქტიური ოდენობით განსაზღვრავს ჯანმრთელობის რაოდენობას, რომელიც გამოიქვითება. ეს ხდება სხვა ცვლის რეგისტრაციის (deductor1.vhd) საშუალებით, რომელიც LED- ების გაზრდის ნაცვლად ამცირებს მათ. ეს მცირდება საათის დივი ერთ -ერთი მოდულის მზარდ ზღვარზე, რომელიც ჩვენ ვისესხეთ და შევცვალეთ (downcounterclock.vhd). ზუსტად ისე, როგორც ერთი LED გამორთულია, ჯანმრთელობის ერთი ქულა გამოიქვითება მოთამაშეს ორის საერთო ჯანმრთელობაზე. თუ ამ პროცესში მოთამაშე ორი მიაღწევს 0 ჯანმრთელობას, ჩვენ ვჩერდებით და მაშინვე გადავალთ "თამაშის დასრულების" მდგომარეობაში. წინააღმდეგ შემთხვევაში, მას შემდეგ, რაც LED ვექტორი მიაღწევს "000000000000000000" -ს, ჩვენ გადავალთ მოთამაშეს ორი მხრივ.

მდგომარეობა 4: მოთამაშის რიგი მეორეა

მეორე მოთამაშის შემობრუნება ზუსტად იგივეა, რაც ერთი მოთამაშის ჯერია, გარდა იმისა, რომ მისი ცვლის რეგისტრატორი (Ptwo.bhd) მიდის მარცხნიდან მარჯვნივ და გადამრთველი არის დაფის მარჯვენა მხარეს. სიგნალი გააქტიურებულია, რომ ჰქონდეს Player 1 -ის ჯანმრთელობის ჩვენება. მას შემდეგ, რაც გადამრთველი 2 აქტიურია, ის გადადის მოთამაშეს ორი გამოქვითვის მხრივ.

ეტაპი 5: მოთამაშე მეორე გამოიქვითება

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

ეტაპი 6: თამაში დასრულებულია თუ რომელიმე მომენტში რომელიმე მოთამაშე მიაღწევს ნულოვან ჯანმრთელობას, თამაში გადადის ამ მდგომარეობაზე. არაფერი ლამაზი ეკრანები. თუ ერთი BTN არის დაჭერილი, მაშინ ჯანმრთელობა გადატვირთულია 99 -ზე და მდგომარეობა ბრუნდება მენიუში, რაც ეფექტურად იწყებს თამაშს.

Შავი ყუთი

ნაბიჯი 4: მოდულები

Downcounterclock (ბრაიან მილის მიერ clk_div.vhd მოდულის საფუძველზე):

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

ბარკლოკი - (დაფუძნებულია ბრაინ მილის მიერ clk_div.vhd მოდულზე): ეს საათი ამუშავებს ძალაუფლების გაზომვის დროს, რომელიც ჩვენ სწრაფად გავზარდეთ თამაშში სირთულის დასამატებლად. ეს დრო შეიძლება მორგებული იყოს თქვენი სურვილისამებრ, გაზარდოთ სიჩქარე მუდმივი max_count– ის უფრო დიდი რიცხვით, ან შეამციროთ max_count– ით უფრო მცირე რიცხვით. Sseg_dec - (დაწერილი ბრაიან მილის): ეს მოდული იღებს 8 ბიტიან რიცხვს, როგორც შეყვანისას, რომელსაც აშიფრებს, გარდაქმნის რიცხვს ათწილადის ექვივალენტში და შემდეგ გამოაქვს შვიდი სეგმენტის ჩვენება. იმისათვის, რომ ეს ფაილი იმუშაოს, თქვენ უნდა დარწმუნდეთ, რომ თქვენი შეზღუდვები ჩვენსას ემთხვევა.

Pone: ეს არის ცვლის რეგისტრი, რომელიც ცვლის ბიტებს მარცხნივ და ამატებს ერთ ცხელ ბიტს, რათა გამოიყურებოდეს, რომ სიმძლავრის მრიცხველი იზრდება. როდესაც ყველა ბიტი ცხელია, ყველა ბიტი გადადის "0" - ზე და ციკლი იწყება თავიდან.

Ptwo: ეს არის P1 მოდულის გადახვეული ვერსია.

დედუქტორი 1: ეს არის ცვლის რეგისტრისა და გამოკლების კომბინაცია. ცვლის რეგისტრი მიდის P1– ის ცვლის რეგისტრის საპირისპირო მიმართულებით, რაც მიუთითებს გამოქვითვაზე. ეს ასევე გამოაკლებს 1 მოთამაშის ჯანმრთელობას 1 საათის ყოველ ციკლზე, ასე რომ ამ ორი ფუნქციის კომბინაციით, როგორც ჩანს, მოწინააღმდეგის ჯანმრთელობა მცირდება 1 -ით ჯანმრთელობის ბარიდან ყოველი ქვემოთ.

Deductor2: ეს არის Deductor1 მოდულის გადახვეული ვერსია.

PlayDecoder (ნასესხები და ოდნავ შეცვლილი ekchen35649– დან მისი 133 სასწავლო):

ეს გამოიყენება მენიუს მდგომარეობაში, რათა წარმოაჩინოს სიტყვა "PLAY" შვიდი სეგმენტის დეკოდერზე.

გასაკეთებელი: სურათები, ვიდეო

გირჩევთ: