תוכן עניינים:

משחק התאמה בינארית עד עשרונית: 10 שלבים
משחק התאמה בינארית עד עשרונית: 10 שלבים

וִידֵאוֹ: משחק התאמה בינארית עד עשרונית: 10 שלבים

וִידֵאוֹ: משחק התאמה בינארית עד עשרונית: 10 שלבים
וִידֵאוֹ: חיבור מספרים גדולים מ-10 2024, יולי
Anonim
Image
Image
הגדרת מחלק השעון
הגדרת מחלק השעון

מדריך זה יציג את התהליך והמודולים הנדרשים ליצירת המשחק שלנו להתאמה בינארית עד עשרונית. בתוך 60 שניות, המשתמשים יתרגמו ויכניסו כמה שיותר מספרים עשרוניים עשרוניים אקראיים בתצוגת שבעת הקטע לבינארי על ידי החלפת המתגים והגשה באמצעות לחצן ניחוש. לאחר השלמתו, הציון הסופי יוצג ולאחר מכן יתאפס לשחק שוב.

הבנת רפלקסים בינאריים ומהירים מועילה לעשות טוב, אך כפתור האיפוס מסופק למקרה שרוצים לנסות מיד שוב.

שלב 1: הגדרת מחלק השעון

עמוד השדרה של כל הפרויקט הזה נובע מהסנכרון הנכון של כל החלקים בגיזמו הזה. מכונת ה- Finite State שלנו משתמשת בשעון הפנימי, אך תצוגת הטיימר והטיימר של שבעה הפלח חייבים להשתמש בגרסה שונה של השעון.

"שעון חדש" זה נובע מחידת השעון הפנימי בתקופה רצויה כדי להשיג תדר מסוים הדרוש לכל רכיב ספציפי. זה נעשה במעבדות קודמות ומניסיון, אנו יודעים שלטיימר יש את הספרה של "אחד" ל- 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 סיביות)

פלט: Numout (8 סיביות)

שלב 8: חיבור הכל במודול המשחק

חיבור הכל במודול המשחק
חיבור הכל במודול המשחק
חיבור הכל במודול המשחק
חיבור הכל במודול המשחק
חיבור הכל במודול המשחק
חיבור הכל במודול המשחק
חיבור הכל במודול המשחק
חיבור הכל במודול המשחק

עבור הרכיבים שלנו, השתמשנו במתגים הדרושים 0-6 כדי שהמשתמש יכול לעבור, כאשר שלושת הכפתורים ישמשו כנתוני המשתמש להתחלה, איפוס וניחוש. שבעת קטע התצוגה ורכיבי השעון הם גם רכיבים שעשינו ממעבדות קודמות אך נאלצנו לשנותם כדי להתאים לפרויקט זה.

פיצלנו את הפרויקט הזה לששת המודולים המוצגים למעלה כדי לפרק את כל הגיזמו לחלקים רבים של עבודה, אולם הדרך שבה הם מחוברים היא די מורכבת ומוצגת מתמונת הקופסה השחורה המצורפת.

בזמן שהמשחק מתרחש, 7 נוריות LED דולקות כדי להודיע למשתמש על המעבר לשימוש, וכשהמשחק מסתיים, תיכנו גם נוריות LED להבהב

כניסות: מתגים (8 ביט), Clk, איפוס, התחלה, ניחוש

יציאות: קתודות (7 סיביות), אנודות (4 סיביות), נוריות (7 סיביות)

שלב 9: נתקלו בבעיות נוספות

למרות שמשתמשים במשחק הזה רק שבעה מתגים, הקוד מוגדר כמספר של 8 ביט. עשינו זאת על מנת שיהיה לנו משווה נוח יותר שישווה את 8 הסיביות הללו למספר 8 הסיביות שיצרנו ממחולל המספרים האקראיים.

הציון גם נתן לנו קצת בעיות בהתחלה כיוון שהגדרנו להגדיל נקודה אחת כשה- FSM היה במצב ציון; אולם מה שקרה במקום זה הוא שהציון המשיך לעלות כל עוד המדינה פועלת, ונתן לנו ציון גבוה באופן בלתי סביר שלא יכולנו להתמודד איתו. תיקנו זאת על ידי הוספת אות דופק המסונכרן עם קצה השעון העולה, כפי שניתן לראות בקוד בשלב 8.

לבסוף, הטיימר לקח הרבה זמן לניפוי באגים מכיוון שהוא היה מעוות את תצוגת שבעת הקטע שלנו כשהוא סופר לאחור, ולכן היינו צריכים לשנות אותו מספירה לאחור מ -60 לספירה מ -0.

שלב 10: קבצי מקור ואילוצים

אם אתה מעדיף למשוך מקבצי המקור שלנו במקום ליצור קבצים משלך, הנה הם. כמו כן, קובץ האילוץ כלול.

מוּמלָץ: