Სარჩევი:
- ნაბიჯი 1: შესავალი
- ნაბიჯი 2: მასალები
- ნაბიჯი 3: ზედა დონის დიაგრამა შავი ყუთის დიზაინი
- ნაბიჯი 4: CLK დაყოფა
- ნაბიჯი 5: პროცესის ბლოკის გადატანა
- ნაბიჯი 6: სასრული მდგომარეობის მანქანა
- ნაბიჯი 7: ეკრანის პროცესის ბლოკის დონის კონტროლი
- ნაბიჯი 8: LED სიჩქარის დონის კონტროლი
- ნაბიჯი 9: აპარატურის შეკრება
- ნაბიჯი 10: გაერთეთ
ვიდეო: FPGA რეაქციის თამაში: 10 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:19
ზაფხულის რეზერფორდის და რეგიტა სოეთანდარის მიერ
ნაბიჯი 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 დაყოფა
ამ საათის გამყოფმა ქვემოდულმა შექმნა უფრო ნელი საათი, რაც დამოკიდებულია იმაზე, თუ რა მნიშვნელობა გვაქვს ჩვენ მას ძირითად ფაილში. ჩვენ გამოვიყენეთ ეს ქვემოდული Clk400, PushClk და newlck. შენელებული საათი გამოდის. არსებობს პროცესის ბლოკი გამყოფი და შენელებული საათისათვის. ამ პროცესში არის დროებითი ცვლადი, რომელსაც ჩვენ დავარქვით დათვლა, რომელიც ითვლის ერთს ყოველ ჯერზე, როდესაც შეყვანილი საათის მზარდი ზღვარი მოხვდება. მას შემდეგ, რაც ის მიაღწევს გამყოფ რიცხვს, შენელებული საათი გადართულია და რიცხვი ნულდება.
ნაბიჯი 5: პროცესის ბლოკის გადატანა
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- ების სიჩქარეს. დონე არის ერთადერთი სიგნალი მგრძნობელობის სიაში. 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 თამაში
გირჩევთ:
555 ტაიმერი რეაქციის თამაში: 5 ნაბიჯი
555 ქრონომეტრაჟი რეაქციის თამაში: სამიზნე აუდიტორია ეს ინსტრუქცია მიზნად ისახავს იმ ადამიანებს, რომლებიც დაინტერესებულნი არიან სქემებით (მცირე ფონით), რომლებიც ეძებენ მარტივ თამაშს, რომლის აშენებაც შეგიძლიათ მხოლოდ რამდენიმე იაფი კომპონენტით. სირთულის დონე ეს ძნელი იქნებოდა თუ
სახალისო Arduino რეაქციის თამაში: 3 ნაბიჯი
სახალისო Arduino რეაქციის თამაში: სახალისო Arduino რეაქციის თამაში მთელი ოჯახისთვის;) დაფუძნებული ჯვარედინი პლატფორმის Bluetooth კომუნიკაციაზე. თქვენ გჭირდებათ მხოლოდ Arduino– ს ნივთები, Android სმარტფონი და ფეხსაცმლის ყუთი. თუ თქვენ არ გაქვთ რომელიმე მათგანი, მტკიცედ გჯერათ მისი: არაფერია ის, რაც
Arduino რეაქციის თამაში: 9 ნაბიჯი
Arduino რეაქციის თამაში: მე გავაკეთე ეს თამაში, როგორც სკოლის დავალება. არდუინოსთან ერთად უნდა გვექნა რაიმე ინტერაქტიული. ეს არის ჩემი პირველი არდუინოს პროექტი, რაც კი ოდესმე შემქმნია, ასე რომ საკმაოდ რთული იყო, მაგრამ არა შეუძლებელი
სწრაფი რეაქციის თამაში: დისტანციური ვერსია: 5 ნაბიჯი (სურათებით)
სწრაფი რეაქციის თამაში: დისტანციური ვერსია: გამარჯობა. ეს არის ინსტრუქცია, თუ როგორ უნდა შექმნათ თამაში, რომელიც ამოწმებს როგორც თქვენს რეაქციის დროს, ასევე დისტანციის განცდას. ეს პროექტი დაფუძნებულია ძველ პროექტზე, რომელიც მე გავაკეთე, რომელშიც მონაწილეობდა ორი მოთამაშე, რომლებიც იბრძოდნენ იმის დასადგენად, თუ ვის ჰქონდა უფრო სწრაფი რეაქცია დროზე ღილაკზე დაჭერით
Fischertechnik LED რეაქციის დრო თამაში: 7 ნაბიჯი
Fischertechnik LED რეაქციის დრო თამაში: როგორ შევქმნათ fischertechnik LED REACTION TIME GAME მე ვთამაშობ სხვადასხვა საგანმანათლებლო მანიპულატორებით. (ეწვიეთ www.weirdrichard.com). ადვილად ასაშენებელი პროგრამა არის LED REACTION TIME GAME. რობოტული კონტროლერი (ამ შემთხვევაში