Სარჩევი:

ორობითი ათწილადის მატჩის თამაში: 10 ნაბიჯი
ორობითი ათწილადის მატჩის თამაში: 10 ნაბიჯი

ვიდეო: ორობითი ათწილადის მატჩის თამაში: 10 ნაბიჯი

ვიდეო: ორობითი ათწილადის მატჩის თამაში: 10 ნაბიჯი
ვიდეო: Section 5 2024, ნოემბერი
Anonim
Image
Image
საათის გამყოფის დაყენება
საათის გამყოფის დაყენება

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

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

ნაბიჯი 1: საათის გამყოფის დაყენება

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

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

შეყვანა: ClkIn, გამყოფი (32 ბიტიანი)

შედეგები: ClkOut

ნაბიჯი 2: სასრული მდგომარეობის აპარატის შექმნა (FSM)

სასრული მდგომარეობის მანქანის შექმნა (FSM)
სასრული მდგომარეობის მანქანის შექმნა (FSM)
სასრული მდგომარეობის აპარატის შექმნა (FSM)
სასრული მდგომარეობის აპარატის შექმნა (FSM)
სასრული მდგომარეობის მანქანის შექმნა (FSM)
სასრული მდგომარეობის მანქანის შექმნა (FSM)

ჩვენს სასრული მდგომარეობის აპარატში ჩვენ გადავწყვიტეთ, რომ ხუთი მდგომარეობა (დაწყება, ჩვენება, შემოწმება, ქულა და დასასრული) აუცილებელი იქნებოდა ხუთ შეყვანისთვის (დაწყება, გადატვირთვა, გამოცნობა, თანაბარი, ვადის გასვლა). ჩვენი სახელმწიფო აპარატის ერთადერთი გამომავალი არის 3 ბიტიანი რიცხვი, რომელიც წარმოადგენს რა მდგომარეობაშია მომხმარებელი (000, 001, 011, 101, 100) ქვემოთ მოცემულ მდგომარეობებთან მიმართებაში.

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

დაწყების მდგომარეობა (000)

საწყისი მდგომარეობა არის ადგილი, სადაც მომხმარებელი დაიწყებს დაწყების შეყვანის დაწყებამდე, ეს არის ის მდგომარეობა, რომელიც მიიღწევა გადატვირთვის ღილაკის დაჭერისას.

თამაშის მდგომარეობა (001)

თამაშის მდგომარეობა არის თამაშის დასაწყისი, სადაც შემთხვევითი რიცხვი გენერირდება და მომხმარებელი ცვლის კონცენტრატორებს შესაყვანის შესაქმნელად. როდესაც გამოცნობის ღილაკს დააჭერთ, თამაში გადადის ჩეკის შტატში.

შემოწმების მდგომარეობა (011)

ეს მდგომარეობა არის ადგილი, სადაც გამოიყენება შედარები, რომელიც შეადარებს მომხმარებლის შეყვანის მნიშვნელობებს და შემთხვევით გენერირებულ რიცხვს. თუ წარდგენა სწორია, თანაბარი მნიშვნელობა მაღალია და FSM გადადის ქულის მდგომარეობაზე; თუმცა, თუ წარდგენა არასწორია, FSM უბრუნდება ჩვენების მდგომარეობას, სანამ წარდგენა არ არის სწორი.

ეს გამშვები მდგომარეობა შედარებით სწრაფად ხდება სხვებთან შედარებით, რადგან ეს ხდება მხოლოდ მანამ, სანამ გამშვები ღილაკი დაჭერილია

ქულების მდგომარეობა (101)

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

დასასრულის მდგომარეობა (100)

მას შემდეგ, რაც ტაიმერი 60 წამი ამოიწურება, დროის გასვლა იქნება მაღალი და მომხმარებელი მიაღწევს საბოლოო მდგომარეობას, სადაც ნაჩვენებია საბოლოო ანგარიში. გადატვირთვის შეყვანის შემდეგ დაჭერილი იქნება და FSM ისევ იწყება საწყისი მდგომარეობიდან.

შეყვანა: Clk, პირველი, დაწყება, გამოცნობა, თანაბარი, ვადის გასვლა

გამომავალი: მდგომარეობა (3 ბიტიანი)

ნაბიჯი 3: შვიდი სეგმენტის ჩვენების შედგენა

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

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

ეკრანი აჩვენებს ყველა 0 -ს, სანამ FSM არ შედის თამაშის მდგომარეობაში; თუმცა, საბოლოო მდგომარეობაში, ეკრანი უნდა აჩვენებდეს მომხმარებლის ქულას.

ვინაიდან ჩვენ ვიყენებთ შვიდი სეგმენტის ჩვენების ოთხივე ციფრს, ჩვენ გვჭირდება თითოეული ანოდის გავლა 300 ჰც -ით საკმარისად სწრაფად, რათა აღვიქვათ როგორც ყოველთვის განათებული.

შეყვანა: Clk, შვიდი სეგმენტი

შედეგები: კათოდები (7 ბიტიანი), ანოდები (4 ბიტიანი)

ნაბიჯი 4: შედარების შექმნა

შედარების შექმნა
შედარების შექმნა

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

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

შეყვანა: კონცენტრატორები (8 ბიტი), ნომერი (8 ბიტი)

გამომავალი: EQ

ნაბიჯი 5: ტაიმერის დაყენება

ტაიმერის დაყენება
ტაიმერის დაყენება
ტაიმერის დაყენება
ტაიმერის დაყენება

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

შეყვანა: Clk, მდგომარეობა (3 ბიტიანი), დაწყება

გამომავალი: მიმდინარე (8 ბიტიანი), დროის გასვლა

ნაბიჯი 6: ფსევდო შემთხვევითი რიცხვების გენერატორის დიზაინი

ფსევდო შემთხვევითი რიცხვების გენერატორის დაპროექტება
ფსევდო შემთხვევითი რიცხვების გენერატორის დაპროექტება

რიცხვის გენერატორის კიდევ ერთი ალტერნატიული მეთოდი კონკრეტულად ამ შემთხვევისთვის არის 0-99-დან განმეორებითი მრიცხველი (ორობითი), რომელიც გამოთვლილ რიცხვს გამოსცემს, როდესაც შეყვანა მაღალია, რადგან ეს გამორიცხავს LFSR- ის გამოყენების აუცილებლობას.

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

შეყვანა: Clk, changenum, თანაბარი

გამომავალი: ნომერი (8 ბიტიანი)

ნაბიჯი 7: კონვერტორის შექმნა

კონვერტორის შექმნა
კონვერტორის შექმნა

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

მაგალითად, თუ ჩვენი საბოლოო შედეგი იყო 0010001 (ჩვიდმეტი), შვიდი სეგმენტის ჩვენება აჩვენებდა თექვსმეტობით მნიშვნელობას 11 -ის ნაცვლად, 17 -ის ათობითი რიცხვის ნაცვლად.

შეყვანა: Numin (8 ბიტიანი)

გამომავალი: რიცხვითი (8 ბიტიანი)

ნაბიჯი 8: ყველაფერი ერთად მოათავსეთ თამაშის მოდულში

ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში
ყველაფერი ერთად მოათავსეთ თამაშის მოდულში

ჩვენი კომპონენტებისათვის ჩვენ გამოვიყენეთ საჭირო გადამრთველები 0-6 მომხმარებლის გადასატანად, სამი ღილაკი კი მომხმარებლის შესასრულებლად, გადატვირთვისა და გამოცნობისთვის. შვიდი სეგმენტის ჩვენება და საათის კომპონენტები ასევე არის კომპონენტები, რომლებიც ჩვენ გავაკეთეთ წინა ლაბორატორიებიდან, მაგრამ უნდა შეცვალოთ ამ პროექტის შესატყვისად.

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

სანამ თამაში ხდება, 7 LED ნათდება, რომ შეატყობინოს მომხმარებელს რომელი გადაერთვება გამოიყენოს და როდესაც თამაში დასრულდება, ჩვენ ასევე დავაპროგრამეთ LED- ების განათება

შეყვანა: გადამრთველები (8 ბიტიანი), Clk, გადატვირთვა, დაწყება, გამოცნობა

გამომავალი: კათოდები (7 ბიტიანი), ანოდები (4 ბიტიანი), LED- ები (7 ბიტიანი)

ნაბიჯი 9: შეექმნა დამატებითი პრობლემები

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

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

დაბოლოს, ქრონომეტრს ბევრი დრო დასჭირდა გამართვისთვის, რადგან ის დააზიანებდა ჩვენს შვიდი სეგმენტის ჩვენებას, როდესაც ის ითვლიდა, ასე რომ ჩვენ უნდა შევცვალოთ იგი 60 – დან ათვლიდან 0 – დან.

ნაბიჯი 10: წყარო ფაილები და შეზღუდვები

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

გირჩევთ: