מעבדה בהנדסת חשמל 1א’ �פרויקט סיום� משחק DONKEY KONG JR�
מיראל חולי, ביאן נגמי
מדריך: אברהם קפלן
אפיון הפרויקט
דרישות:
יצירתיות:
ארכיטקטורה וחיבורים
מקלדת מספרים
DE10
Display
Sound
חוקי המשחק
צילום מסכי המשחק
מסך התחלה
מסך כישלון מהבהב
מסך ניצחון מהבהב
מסך משחק
איבוד לב ראשון
טיימר + מונה ניקוד
איבוד לב ראשון + הגעה למפתח עם ניקוד שהוא פחות מ 12
הוראות הפעלה
תנועה ימינה
תנועה שמאלה
קפיצה
תנועה למעלה
תנועה למטה
התחלת המשחק
טורבו: הגברת מהירות הטיימר
reset
הצגת מספר המקש שלוחצים
עוצר זמן: עצירת הטיימר כל עוד המפסק דלוק.
הצגת הזמן הנותר עד סיום המשחק
הצגת הניקוד של הקוף
הוראות הפעלה - המשך
סכמת מלבנים
Enemy
Monkey
HIT
Keys (Inputs)
Graphics
VGA Controller
Random
Timer
7 Segs
MSS
Lives and Score
Game Controller
VGA output
Mux
הירארכיה עליונה
כחיים
תיאור מודול ראשון – MONKEY BLOCK [מיראל]
הבלוק הראשון יזהה את התנגשויות שהקוף עשה ויטפל בתנועתו בהתאם.
הבלוק השני יקבל את תנועת הקוף ומייצר את ווקטור המיקום שיש לשים בו הקוף על המסך.
הבלוק השלישי יקבל את המיקום המבוקש ויוצא צבע מתאים לתמונת הקוף.
תיאור מודול שני – GAME CONTROLLER[ביאן]
מכונת מצבים (MEALY)
בנינו מכונת מצבים שלפיה עברנו בין מסכים שונים שהגדרנו, שהם: מסך פתיחה, מסך המשחק, מסך הניצחון ומסך ההפסד.
IDLE
WIN GAME
START GAME
GAME OVER
Enter
reset
lives_num=0
|| time=0
|| no score
Score>=12
&& get_to_key=1
SIGNAL TAP - זיהוי באג
בעיה: אי- זיהוי של התנגשות בין הקוף לבין הפירות.
הסבר הבעיה: וכפי שרואים ה drawing request של הקוף ו ה drawing request של fruit1 עולים ל ״1״ לוגי בצורות פולסים, למשך זמן מסויים. אבל collision_with_fruit1 שמציין התנגשות של הקוף עם fruit1 נשאר על ״0״ .
פתרון הבעיה: הרצנו את ה-signalTap עם החוטים המתאימים וניסינו להבין איפה התקלה קוראת, אנו רואים כי יש לנו בתמונה למעלה drawingRequest של הקוף ושל הפרי מספר 1 אבל הקוד שלנו לא מזהה התנגשות זו למראות ששניהם מנסים לשרטט באותו פיקסל באותו רגע.
אחרי שהבנו את הטעות ניסינו לאתר אותה בבלוק המתאים והצלחנו למצוא אותה ולתקן אותה, הטעות הייתה, היה לנו mux שבוחר את ה- collision המתאים בין הפרי שהתנגש עם הקוף לבין הפרי שנרצה לצייר בפיקסל הנוכחי מבין כל שאר הפירות שיש, ו-mux זה לא היה מחובר לכניסת אות שעון ולכן הוא לא היה פעיל בצורה סינכרונית עם שאר הרכיבים בפרויקט. תיקנו את זה ע"י חיבורו לאות השעון המתאים והכל עבד אחרי זה בצורה הנכונה והרצויה.
סיכום ומסקנות
ME ON COMPILATION TIME
תודה על ההקשבה