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

משחק תגובת FPGA: 10 שלבים
משחק תגובת FPGA: 10 שלבים

וִידֵאוֹ: משחק תגובת FPGA: 10 שלבים

וִידֵאוֹ: משחק תגובת FPGA: 10 שלבים
וִידֵאוֹ: תמונות חדשות של גלעד שליט בשבי חמאס 2024, יולי
Anonim
משחק תגובת FPGA
משחק תגובת FPGA

מאת סאמר רתרפורד ורג'יטה סוטנדר

שלב 1: מבוא

עבור פרויקט הגמר שלנו עבור CPE 133, עיצבנו משחק תגובה ב- VHDL ללוח Basys3. ניתן להשוות את המשחק הזה בצורה הקרובה ביותר למשחק הארקייד "Stacker" בו השחקן צריך להפיל את החסימות בזמן הנכון. לוח Basys3 מחובר ללוח, הכולל את נוריות הלד לסירוגין. נורות LED אלו מתחלפות בתדירות מסוימת, בהתאם לרמה. משחק זה משתמש במחיצת השעונים ובתצוגת 7 החלקים בת 4 הספרות, כמו גם במכשיר מצב סופי. כאשר השחקן מפעיל את המתג הנכון כאשר נורית הלד האמצעית נדלקת, השחקן יתקדם לשלב הבא של המשחק, ויגדיל את התדירות של נוריות הלד לסירוגין. זה הופך כל רמה עוקפת לקשה יותר מהרמה הקודמת. כאשר השחקן מנצח בהצלחה את רמה 7, הרמה הגבוהה ביותר, תוצג הודעה בתצוגת הקטע וכל נוריות הנורית יהבהבו ויכבו בו זמנית.

שלב 2: חומרים

חומרים
חומרים
חומרים
חומרים
חומרים
חומרים

החומרים שתזדקקו להם הם:

  • לוח Digilent Basys3 עם כבל מיקרו USB
  • לוח לחם
  • 5 נוריות LED
  • 5 נגדים (השתמשנו ב- 220 אוהם)
  • 11 חוטי מגשר
  • מחשב עם Vivado

שלב 3: עיצוב קופסא שחורה ברמה העליונה

עיצוב תרשים ברמה עליונה ברמה העליונה
עיצוב תרשים ברמה עליונה ברמה העליונה
עיצוב תרשים ברמה עליונה ברמה העליונה
עיצוב תרשים ברמה עליונה ברמה העליונה

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

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

שלב 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

תת מודול מחלק השעונים הזה יצר שעון איטי יותר בהתאם לערך שמיפינו לו בקובץ הראשי שלנו. השתמשנו במודול משנה זה כדי לקבוע Clk400, PushClk ו- newlck. תת מודול זה לוקח שעון ומפריד 32 סיביות כקלטים. מוציא שעון מאט. יש בלוק תהליכים למפריד ולשעון המואט. בתהליך יש משתנה זמני, שאותו קראנו ספירה, הסופר אחד בכל פעם שקצה עולה של השעון המוזן נפגע. ברגע שהוא מגיע למספר המחלק, השעון המואט החלף והספירה מתאפסת לאפס.

שלב 5: העברת בלוק תהליך

העברת תהליך בלוק
העברת תהליך בלוק

בלוק תהליך Shift שולט על התנועה והמהירות המתחלפות של הלדים. ברשימת הרגישות נמצאים אותות newclk ו- Stop. עצירה גורמת לעיכוב קצר כאשר המשתמש עובר את הרמה. אם עצירה אינה גבוהה, אז נוריות ה- LED מתחלפות כרגיל בהתבסס על המהירות של newclk. תבנית מתחלפת זו נשלטת על ידי שני משתנים: מעקב וספירה. הספירה קובעת איזו נורית צריכה להיות דולקת, ואילו מסלול קובע אם הספירה צריכה לספור למעלה או למטה. יש עוד אות, סופי, שחל רק כשהרמה היא "111", המצביעה על כך שהשחקן ניצח את המשחק. הסופי מתחלף בין 0 ל -1 בכל קצה השעון בכדי להדליק ולכבות את נוריות 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 עם רמה

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

שלב 9: הרכבת חומרה

הרכבת חומרה
הרכבת חומרה

חיברנו את לוח הלחם ל- Basys3 עם אחד ממחברי pmod. שש מיציאות pmod שימשו לחיבור מחבר זכר לזכר, אחת לקרקע וחמישה אחרות ל -5 הנורות. הצבנו גם נגד לכל LED. נגדים אלה הם 220Ω ומונעים מקצרים של נוריות הלד ונשרפות. למרות שלכל LED יש התנגדות מסוימת, ההתנגדות לא מספיקה כדי לעכב את המתח מהמקור.

שלב 10: תהנה

המשחק הזה קל מאוד לשחק. השחקן מתחיל במתג 1 הימני ביותר של הלוח, V17. הם חייבים להטות את המתג גבוה כאשר הנורית האמצעית דולקת. לאחר מכן הם מעבירים מתג אחד שמאלה ועושים את אותו הדבר! אם השחקן יגיע עד הסוף, הוא יגיע למתג השביעי, W14. אם הם ינצחו את המשחק הם יזכו לראות תצוגת סיום מהנה באמת!

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

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

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

הקובץ הראשי לפרויקט זה כלול להלן.

מקורות

מדריך עזר Basys3

השראה לפרויקט - משחק עצור זה של ארדואינו

מוּמלָץ: