विषयसूची:

बाइनरी टू डेसीमल मैचर गेम: १० कदम
बाइनरी टू डेसीमल मैचर गेम: १० कदम

वीडियो: बाइनरी टू डेसीमल मैचर गेम: १० कदम

वीडियो: बाइनरी टू डेसीमल मैचर गेम: १० कदम
वीडियो: Learn Regular Expressions In 20 Minutes 2024, नवंबर
Anonim
Image
Image
क्लॉक डिवाइडर सेट करना
क्लॉक डिवाइडर सेट करना

यह निर्देशयोग्य हमारे बाइनरी टू डेसीमल मैचिंग गेम को बनाने के लिए आवश्यक प्रक्रिया और मॉड्यूल दिखाएगा। 60 सेकंड के भीतर, उपयोगकर्ता स्विच को टॉगल करके और एक अनुमान बटन के साथ सबमिट करके सात सेगमेंट डिस्प्ले पर कई यादृच्छिक रूप से उत्पन्न दशमलव संख्याओं का अनुवाद और इनपुट करेंगे। एक बार पूरा हो जाने पर, एक अंतिम स्कोर प्रदर्शित किया जाएगा और फिर से खेलने के लिए रीसेट किया जाएगा।

बाइनरी और क्विक रिफ्लेक्स को समझना अच्छा करने के लिए फायदेमंद है, लेकिन अगर कोई तुरंत फिर से प्रयास करना चाहता है तो रीसेट बटन प्रदान किया जाता है।

चरण 1: क्लॉक डिवाइडर सेट करना

इस पूरे प्रोजेक्ट की रीढ़ इस काम के सभी हिस्सों के सही तालमेल से आती है। हमारी परिमित राज्य मशीन आंतरिक घड़ी का उपयोग करती है, लेकिन सात खंड प्रदर्शन और टाइमर को घड़ी के परिवर्तित संस्करण का उपयोग करना चाहिए।

यह "नई घड़ी" प्रत्येक विशिष्ट घटक के लिए आवश्यक एक निश्चित आवृत्ति प्राप्त करने के लिए आंतरिक घड़ी को वांछित अवधि से विभाजित करने से आती है। यह पिछली प्रयोगशालाओं में किया गया है और अनुभव से, हम जानते हैं कि टाइमर में "एक का" अंक 0.1 हर्ट्ज पर सेट होता है, और "दसियों" का अंक 1 हर्ट्ज होता है

इनपुट: क्लिकइन, भाजक (32 बिट)

आउटपुट: क्लकआउट

चरण 2: एक परिमित-राज्य मशीन (FSM) बनाना

एक परिमित-राज्य मशीन (FSM) बनाना
एक परिमित-राज्य मशीन (FSM) बनाना
एक परिमित-राज्य मशीन (FSM) बनाना
एक परिमित-राज्य मशीन (FSM) बनाना
एक परिमित-राज्य मशीन (FSM) बनाना
एक परिमित-राज्य मशीन (FSM) बनाना

हमारी परिमित-राज्य मशीन में, हमने तय किया कि पांच इनपुट (प्रारंभ, रीसेट, अनुमान, बराबर, टाइमआउट) के साथ पांच राज्य (प्रारंभ, प्रदर्शन, जांच, स्कोर और समाप्ति) आवश्यक होंगे। हमारे राज्य मशीन में एकमात्र आउटपुट एक 3 बिट संख्या है जो दर्शाता है कि उपयोगकर्ता किस स्थिति में है (000, 001, 011, 101, 100) नीचे के राज्यों के संबंध में।

याद रखें कि एक परिमित राज्य मशीन वास्तव में नीचे दिए गए कार्यों को पूर्ववत नहीं करती है, इसके बजाय यह केवल यह बताती है कि कार्यक्रम किस स्थिति में है और क्या. वास्तव में क्या होता है यह नीचे बताए गए शीर्ष मॉड्यूल द्वारा निर्धारित किया जाता है।

राज्य प्रारंभ करें (000)

स्टार्ट स्टेट वह जगह है जहां उपयोगकर्ता स्टार्ट इनपुट उच्च होने तक शुरू होगा, यह वह स्थिति भी है जो रीसेट बटन दबाए जाने पर पहुंच जाएगी।

खेल राज्य (001)

गेम स्टेट गेम की शुरुआत है, जहां यादृच्छिक संख्या उत्पन्न होती है और उपयोगकर्ता इनपुट बनाने के लिए स्विच को चालू करता है। एक बार अनुमान बटन दबाए जाने के बाद, गेम को चेक स्टेट में ले जाया जाता है।

राज्य की जाँच करें (011)

यह वह स्थिति है जहां तुलनित्र का उपयोग किया जा रहा है, जो उपयोगकर्ता के इनपुट के मूल्यों और बेतरतीब ढंग से उत्पन्न संख्या की तुलना करेगा। यदि सबमिशन सही है, तो समान मूल्य अधिक है और FSM स्कोर स्टेट में जाता है; हालांकि, अगर सबमिशन गलत है, तो FSM वापस डिस्प्ले स्टेट में वापस आ जाता है जब तक कि सबमिशन सही न हो जाए।

यह चेक स्टेट दूसरों की तुलना में अपेक्षाकृत जल्दी होता है, क्योंकि यह केवल तब तक होता है जब तक चेक बटन दबाया जाता है

स्कोर राज्य (101)

चूंकि समान मूल्य अधिक है, इसलिए सबमिशन सही था। इस स्थिति में, स्कोर मान एक से बढ़ जाएगा और उपयोगकर्ता को इनपुट करने के लिए एक नया नंबर जेनरेट किया जाएगा। यह नया नंबर हमें स्टार्ट स्टेट में वापस लाता है जहां उपयोगकर्ता एक बार फिर स्विच को चालू करेगा।

अंत राज्य (100)

एक बार 60 सेकंड का टाइमर खत्म हो जाने के बाद, टाइमआउट इनपुट अधिक होगा और उपयोगकर्ता अंतिम स्थिति में पहुंच जाएगा जहां अंतिम स्कोर प्रदर्शित होता है। फिर रीसेट इनपुट को दबाया जाएगा और FSM फिर से स्टार्ट स्टेट पर शुरू हो जाएगा।

इनपुट: Clk, rst, start, अनुमान, बराबर, टाइमआउट

आउटपुट: राज्य (3 बिट)

चरण 3: सेवन सेगमेंट डिस्प्ले का मानचित्रण

सात खंड प्रदर्शन का मानचित्रण
सात खंड प्रदर्शन का मानचित्रण
सेवन सेगमेंट डिस्प्ले का मानचित्रण
सेवन सेगमेंट डिस्प्ले का मानचित्रण
सात खंड प्रदर्शन का मानचित्रण
सात खंड प्रदर्शन का मानचित्रण

सेवन सेगमेंट डिस्प्ले पूरे प्रोजेक्ट का एक महत्वपूर्ण हिस्सा है क्योंकि स्क्रीन पर पहले दो अंक यादृच्छिक संख्या जनरेटर के आउटपुट के रूप में उपयोग किए जाते हैं, जबकि अंतिम दो अंक टाइमर होते हैं। यद्यपि हमने स्क्रीन पर अंक होने के संदर्भ में पिछली प्रयोगशाला में इसका एक उदाहरण लागू किया है, यह हेक्साडेसिमल में प्रदर्शित किया गया था। इस समस्या को ठीक करने के लिए, हमने एक कन्वर्टर और क्लॉक डिवाइडर का उपयोग किया, जिसे नीचे समझाया गया है।

प्रदर्शन सभी 0 दिखाता है जब तक कि एफएसएम खेल की स्थिति में प्रवेश नहीं करता; हालांकि, अंतिम स्थिति में, डिस्प्ले को केवल उपयोगकर्ता का स्कोर दिखाना चाहिए।

चूंकि हम सात खंड डिस्प्ले के सभी चार अंकों का उपयोग कर रहे हैं, इसलिए हमें हमेशा की तरह जलाए जाने के लिए प्रत्येक एनोड के माध्यम से 300 हर्ट्ज पर पर्याप्त तेजी से चक्र करने की आवश्यकता है।

इनपुट्स: क्लर्क, सेवनसेगमेंट

आउटपुट: कैथोड (7 बिट), एनोड्स (4 बिट)

चरण 4: तुलनित्र बनाना

तुलनित्र बनाना
तुलनित्र बनाना

इस सबमॉड्यूल का उपयोग चेक स्टेट में किया जाता है कि यह 7 बिट बाइनरी इनपुट अनुमान बनाम वास्तविक दशमलव मान की तुलना कैसे कर रहा है।

हमारे पास एक if स्टेटमेंट था जो कि इनपुट और दो आउटपुट दोनों का मूल्यांकन करता था, इस पर निर्भर करता है कि समान मूल्य उच्च या निम्न था या नहीं। यह मॉड्यूल जितना महत्वपूर्ण है, यह इस परियोजना में डिजाइन किए जाने वाले सरल कार्यक्रमों में से एक है।

इनपुट: स्विच (8 बिट), संख्या (8 बिट)

आउटपुट: ईक्यू

चरण 5: टाइमर सेट करना

टाइमर सेट करना
टाइमर सेट करना
टाइमर सेट करना
टाइमर सेट करना

हमारा टाइमर अनिवार्य रूप से दो अलग-अलग काउंटर हैं जो अलग-अलग दरों पर बढ़ रहे हैं। "एक के" मूल्य में एक काउंटर, (पहले सात खंड प्रदर्शन) और "दस" मूल्य के लिए एक काउंटर (सात खंड प्रदर्शन पर दूसरा अंक)। प्रत्येक अंक घड़ी के बढ़ते किनारे पर आधारित होता है, और एक बार जब काउंटर 60 सेकंड तक पहुंच जाता है, तो टाइम_आउट अधिक हो जाएगा और खेल समाप्त हो जाएगा और प्रारंभ स्थिति में वापस आ जाएगा।

इनपुट: क्लर्क, राज्य (3 बिट), प्रारंभ

आउटपुट: करंट (8 बिट), टाइमआउट

चरण 6: छद्म यादृच्छिक संख्या जेनरेटर डिजाइन करना

छद्म यादृच्छिक संख्या जेनरेटर डिजाइन करना
छद्म यादृच्छिक संख्या जेनरेटर डिजाइन करना

विशेष रूप से इस मामले के लिए एक संख्या जनरेटर के लिए एक अन्य वैकल्पिक तरीका 0-99 (बाइनरी में) से एक दोहराव काउंटर है जो इनपुट अधिक होने पर गिनती संख्या को आउटपुट करता है, क्योंकि यह एलएफएसआर का उपयोग करने की आवश्यकता को समाप्त कर देगा।

संख्या आंतरिक घड़ी (10 नैनो-सेकंड) के हर बढ़ते किनारे को बदलती है और एक माइक्रोसेकंड में सभी 100 संख्याओं के माध्यम से चक्र करती है। जब भी उपयोगकर्ता नंबर जनरेटर से एक नया नंबर चाहता है, तो वह उस नंबर को आउटपुट करता है जिस पर वह था, हालांकि यह प्रक्रिया पूरी तरह से यादृच्छिक नहीं है, इस प्रक्रिया से संबंधित आउटपुट खोजने की संभावना छद्म यादृच्छिक होने के लिए काफी कम है।

इनपुट: क्लर्क, चेंजनम, बराबर

आउटपुट: संख्या (8 बिट)

चरण 7: एक कनवर्टर बनाना

एक कनवर्टर बनाना
एक कनवर्टर बनाना

एक आवश्यक घटक कनवर्टर है, जिसका उपयोग हम मूल हेक्साडेसिमल के बजाय सात खंडों के प्रदर्शन पर दशमलव संख्या प्रदर्शित करने के लिए करते थे। हालांकि दोनों नंबर एक 7 बिट बाइनरी नंबर पर आधारित हैं, हमने हेक्साडेसिमल को दशमलव में परिवर्तित करने के लिए नामित एक संपूर्ण मॉड्यूल बनाया है।

उदाहरण के लिए, यदि स्कोर के लिए हमारा अंतिम आउटपुट ००१०००१ (सत्रह) था, तो सात खंड प्रदर्शन १७ की दशमलव संख्या के बजाय ११ का हेक्साडेसिमल मान दिखाएगा।

इनपुट: न्यूमिन (8 बिट)

आउटपुट: न्यूमआउट (8 बिट)

चरण 8: गेम मॉड्यूल में सब कुछ एक साथ रखना

गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना
गेम मॉड्यूल में सब कुछ एक साथ रखना

हमारे घटकों के लिए, हमने उपयोगकर्ता को टॉगल करने के लिए आवश्यक स्विच 0-6 का उपयोग किया, जिसमें तीन बटन स्टार्ट, रीसेट और अनुमान के लिए उपयोगकर्ता इनपुट के रूप में कार्य करते हैं। सात खंडों का प्रदर्शन और घड़ी के घटक भी ऐसे घटक हैं जो हमने पिछली प्रयोगशालाओं से किए हैं लेकिन इस परियोजना को फिट करने के लिए उन्हें बदलना पड़ा।

हमने इस परियोजना को ऊपर दिखाए गए छह मॉड्यूल में विभाजित किया है ताकि पूरे काम को कई काम करने वाले हिस्सों में तोड़ दिया जा सके, हालांकि, जिस तरह से वे जुड़े हुए हैं वह काफी जटिल है और संलग्न ब्लैक बॉक्स चित्र से दिखाया गया है।

जब खेल चल रहा होता है, तो उपयोगकर्ता को सूचित करने के लिए 7 एलईडी जलाई जाती हैं जो उपयोग करने के लिए स्विच करता है, और जब खेल समाप्त होता है, तो हमने एलईडी को फ्लैश करने के लिए भी प्रोग्राम किया।

इनपुट: स्विच (8 बिट), क्लक, रीसेट, स्टार्ट, अनुमान

आउटपुट: कैथोड (7 बिट), एनोड्स (4 बिट), एलईडी (7 बिट)

चरण 9: अतिरिक्त समस्याओं का सामना करना पड़ा

हालाँकि इस गेम में केवल सात स्विच का उपयोग किया जाता है, कोड ने इसे 8 बिट संख्या के रूप में सेट किया है। हमने ऐसा अधिक सुविधाजनक तुलनित्र के लिए किया था जो इन 8 बिट्स की तुलना उस 8 बिट संख्या से करेगा जो हमने यादृच्छिक संख्या जनरेटर से उत्पन्न किया था।

स्कोर ने हमें पहली बार में थोड़ी परेशानी भी दी क्योंकि हमने इसे एक अंक बढ़ाने के लिए निर्धारित किया था जब एफएसएम स्कोर स्थिति में था; हालाँकि इसके बजाय जो हुआ वह यह था कि जब तक राज्य चल रहा था तब तक स्कोर बढ़ता रहा, हमें एक अनुचित रूप से उच्च स्कोर दिया जिससे हम निपट नहीं सकते थे। हमने एक पल्स सिग्नल जोड़कर इसे ठीक किया जो घड़ी के बढ़ते किनारे के साथ सिंक्रनाइज़ था, जैसा कि चरण 8 में कोड में देखा गया है।

अंत में, टाइमर को डिबग करने में बहुत समय लगा क्योंकि यह हमारे सात खंडों के प्रदर्शन को विकृत कर देगा जब यह उलटी गिनती कर रहा था, इसलिए हमें इसे ६० से नीचे गिनने से ० से गिनने में बदलना पड़ा।

चरण 10: स्रोत फ़ाइलें और बाधाएं

यदि आप अपनी खुद की बनाने के बजाय हमारी स्रोत फ़ाइलों से खींचना चाहते हैं, तो वे यहां हैं। इसके अलावा, बाधा फ़ाइल शामिल है।

सिफारिश की: