Სარჩევი:

FPGA რეაქციის თამაში: 10 ნაბიჯი
FPGA რეაქციის თამაში: 10 ნაბიჯი

ვიდეო: FPGA რეაქციის თამაში: 10 ნაბიჯი

ვიდეო: FPGA რეაქციის თამაში: 10 ნაბიჯი
ვიდეო: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, ივლისი
Anonim
FPGA რეაქციის თამაში
FPGA რეაქციის თამაში

ზაფხულის რეზერფორდის და რეგიტა სოეთანდარის მიერ

ნაბიჯი 1: შესავალი

CPE 133– ის ჩვენი საბოლოო პროექტისთვის, ჩვენ შევიმუშავეთ რეაქციის თამაში VHDL– ში Basys3 დაფისთვის. ეს თამაში ყველაზე მეტად შეიძლება შევადაროთ არკადულ თამაშს "სტეკერი", სადაც მოთამაშემ უნდა დააგდოს ბლოკები საჭირო დროს. Basys3 დაფა უკავშირდება breadboard- ს, რომელსაც აქვს ალტერნატიული LED- ები. ეს LED ნათურები იცვლება კონკრეტული სიხშირით, დონის მიხედვით. ეს თამაში იყენებს საათის გამყოფს და 4 ციფრიანი 7 სეგმენტის ჩვენებას, ასევე სასრული მდგომარეობის მანქანას. როდესაც მოთამაშე ააქტიურებს სწორ გადამრთველს, როდესაც შუა LED ანათებს, მოთამაშე გადავა თამაშის შემდეგ საფეხურზე, გაზრდის ალტერნატიული LED- ების სიხშირეს. ეს ართულებს თითოეულ მომდევნო დონეს წინა დონესთან შედარებით. როდესაც მოთამაშე წარმატებით სცემს მე –7 დონეს, ყველაზე მაღალ დონეს, შეტყობინება გამოჩნდება სეგმენტის ჩვენებაზე და ყველა LED ერთდროულად ანათებს და გამორთავს.

ნაბიჯი 2: მასალები

მასალები
მასალები
მასალები
მასალები
მასალები
მასალები

მასალები, რომლებიც დაგჭირდებათ:

  • Digilent Basys3 დაფა მიკრო USB კაბელით
  • პურის დაფა
  • 5 ები
  • 5 რეზისტორი (ჩვენ გამოვიყენეთ 220 Ohms)
  • 11 მხტუნავი მავთული
  • კომპიუტერი ვივადოსთან ერთად

ნაბიჯი 3: ზედა დონის დიაგრამა შავი ყუთის დიზაინი

უმაღლესი დონის დიაგრამა შავი ყუთის დიზაინი
უმაღლესი დონის დიაგრამა შავი ყუთის დიზაინი
უმაღლესი დონის დიაგრამა შავი ყუთის დიზაინი
უმაღლესი დონის დიაგრამა შავი ყუთის დიზაინი

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

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

ნაბიჯი 4: CLK დაყოფა

CLK გაყოფა
CLK გაყოფა
CLK გაყოფა
CLK გაყოფა
CLK გაყოფა
CLK გაყოფა

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

ნაბიჯი 5: პროცესის ბლოკის გადატანა

Shift პროცესის ბლოკი
Shift პროცესის ბლოკი

Shift პროცესის ბლოკი აკონტროლებს LED- ების ალტერნატიულ მოძრაობას და სიჩქარეს. მგრძნობელობის სიაში არის newclk და Stop სიგნალები. გაჩერება იწვევს მოკლე შეფერხებას, როდესაც მომხმარებელი გადის დონეს. თუ Stop არ არის მაღალი, მაშინ LED- ები ჩვეულებისამებრ იცვლება newclk– ის სიჩქარეზე დაყრდნობით. ეს მონაცვლე ნიმუში კონტროლდება ორი ცვლადით: თვალყური და დათვლა. Count განსაზღვრავს რომელ LED- ზე უნდა იყოს ჩართული, ხოლო Track განსაზღვრავს უნდა იყოს თუ არა დათვლა ზემოთ ან ქვემოთ. არსებობს კიდევ ერთი სიგნალი, ფინალი, რომელიც გამოიყენება მხოლოდ მაშინ, როდესაც დონე არის "111", რაც მიუთითებს, რომ მოთამაშემ დაამარცხა თამაში. საბოლოო ალტერნატივაა 0 -დან 1 -მდე ყოველ საათის ზღვარზე, რომ LED- ები მუდმივად ჩართოთ და გამორთოთ. ეს არის მხოლოდ ვიზუალური ელემენტი საბოლოო ჩვენებისთვის.

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

ნაბიჯი 6: სასრული მდგომარეობის მანქანა

სასრული მდგომარეობის მანქანა
სასრული მდგომარეობის მანქანა

ჩვენ შევქმენით სასრული მდგომარეობის მანქანა, რომელიც კარნახობს ქცევას, როდესაც დაჭერილია შეყვანის ან გადატვირთვის ღილაკი. თითოეული მდგომარეობა არის "დონე" და თუ შეცვლა ჩართულია არასწორ დროს ან გადატვირთულია, დონე ბრუნდება "000" -ზე. წინააღმდეგ შემთხვევაში, თუ გადამრთველი სწორად არის ჩართული, დონე მაღლა იწევს სანამ არ მიაღწევს საბოლოო მდგომარეობას, "111" და მთავრდება ჩვენება. FSM ემყარება ორი პროცესის ბლოკს sync_proc და comb_proc. Sync_proc იყენებს საათს, რომელსაც ჩვენ ვუწოდეთ PushClk. ეს საათი აკონტროლებს რამდენად სწრაფად ხდება შემდეგი მდგომარეობა დღევანდელ მდგომარეობად. ეს საათი უნდა იყოს საკმაოდ სწრაფი; ჩვენ ავირჩიეთ სიჩქარე, რომელიც დაახლოებით ორჯერ აღემატებოდა ჩვენს ყველაზე სწრაფ LED სიჩქარეს.

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

ნაბიჯი 7: ეკრანის პროცესის ბლოკის დონის კონტროლი

დონის კონტროლით ჩვენების პროცესის ბლოკის კონტროლი
დონის კონტროლით ჩვენების პროცესის ბლოკის კონტროლი

დონე აკონტროლებს ჩვენების პროცესის ბლოკს. მგრძნობელობის სიის ცვლადებია Level, Reset და Clk400. 7 სეგმენტის ჩვენება იწყება პირველი დონის ჩვენებით „1“. ის ითვლის 7 -მდე ყოველ ჯერზე, როდესაც მომხმარებელი გადის დონეს, რათა აჩვენოს მომხმარებელს რა დონეზე იმყოფებიან. მას შემდეგ, რაც მომხმარებელმა გაიარა მე -7 დონე, ის აჩვენებს "COOL", რაც ნიშნავს იმას, რომ მოთამაშემ დაამარცხა თამაში. ეს "COOL" ეკრანი მუშაობს 400 ჰც საათით, რომელსაც ჩვენ Clk400 ვუწოდეთ. თუ გადატვირთულია დაჭერილი, ეკრანი ბრუნდება "1" -ზე.

ნაბიჯი 8: LED სიჩქარის დონის კონტროლი

LED სიჩქარის დონის კონტროლი
LED სიჩქარის დონის კონტროლი

დაბოლოს, დონე აკონტროლებს LED- ების სიჩქარეს. დონე არის ერთადერთი სიგნალი მგრძნობელობის სიაში. D1 არის სიგნალი, რომელიც შედის საათის გამყოფის პროცესში newclk– ის მისაღებად. ყოველ ჯერზე, როდესაც იცვლება დონე ან იცვლება მდგომარეობა, პროცესის ბლოკი „სიჩქარე“. ეს პროცესი განსაზღვრავს D1 მნიშვნელობას. არსებობს D1– ის 8 განსაზღვრული მნიშვნელობა, რომელიც ჩვენ ავირჩიეთ იმის მიხედვით, თუ რამდენად სწრაფად გვინდოდა თითოეული დონის გაშვება. D1 მცირდება ყოველ ჯერზე, როდესაც იზრდება დონე ისე, რომ newclk უფრო სწრაფად გადის.

ნაბიჯი 9: აპარატურის შეკრება

აპარატურის შეკრება
აპარატურის შეკრება

ჩვენ შევუერთეთ პურის დაფა Basys3– ს ერთ – ერთი pmod კონექტორით. Pmod– ის ექვსი პორტი გამოიყენებოდა მამრობითი სქესის მამაკაცის კონექტორის დასაკავშირებლად, ერთი მიწისთვის და მეორე ხუთი 5 LED– ისთვის. ჩვენ ასევე განათავსეთ რეზისტორი თითოეული LED- ისთვის. ეს რეზისტორები არის 220Ω და ხელს უშლიან LED- ების მოკლე ჩართვას და დამწვრობას. მიუხედავად იმისა, რომ თითოეულ LED- ს აქვს გარკვეული წინააღმდეგობა, წინააღმდეგობა არ არის საკმარისი იმისათვის, რომ ხელი შეუშალოს წყაროს ძაბვას.

ნაბიჯი 10: გაერთეთ

ეს თამაში ძალიან ადვილია. მოთამაშე იწყებს დაფის უკიდურეს მარჯვნივ გადართვას 1, V17. მათ უნდა გადააქციონ გადამრთველი მაღლა, როდესაც შუა LED ჩართულია. შემდეგ ისინი გადადიან ერთი გადამრთველი მარცხნივ და აკეთებენ იგივეს! თუ მოთამაშე მიაღწევს ბოლომდე, ისინი დასრულდება მეშვიდე გადამრთველზე, W14. თუ ისინი დაამარცხებენ თამაშს, ისინი ხედავენ მართლაც სახალისო დასასრულის ჩვენებას!

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

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

ქვემოთ მოცემულია ვიდეო, სადაც ნაჩვენებია როგორ ვითამაშოთ, გავლა პირველ 4 დონეზე და ბოლო დამთავრებული ჩვენება.

ამ პროექტის მთავარი ფაილი მოცემულია ქვემოთ.

წყაროები

Basys3 საცნობარო სახელმძღვანელო

შთაგონება პროექტისთვის - Arduino Stop It თამაში

გირჩევთ: