450 likes | 780 Views
מצגת סוף – פרויקט חד סמסטריאלי. Implementing object recognition algorithm on FPGA. מגישים: יותם דראש דניאל פרגו. מנחה: מייק סומשיק. מטרת הפרויקט. המטרה : מימוש אלגוריתם OPTIC FLOW על גבי FPGA בזמן אמת דגשים: הכרה ולמידת כלי הפיתוח של חברת Gidel : ProcWizard / ProcAPI
E N D
מצגת סוף – פרויקט חד סמסטריאלי Implementing object recognition algorithm on FPGA מגישים: יותם דראש דניאל פרגו מנחה: מייק סומשיק
מטרת הפרויקט המטרה:מימוש אלגוריתם OPTIC FLOW על גבי FPGA בזמן אמת דגשים: • הכרה ולמידת כלי הפיתוח של חברתGidel: ProcWizard/ProcAPI • למידת כלי הפיתוח של MathWorks : Simulink & HDL Coder • אימפלמנטציה של אלגוריתם Optical flow בזמן אמת על FPGA בעזרת הכלים הנלמדים
זרימת הנתונים הקלט יהיה וידאו ב 15FPSבממדים של 320x240 אבל לפי הגדרת הפרויקט, נקטין את גודל התמונה כך שלא יהיה צורך בשימוש בזיכרון חיצוני לטובת עיבוד המידע
INSIDE THE FPGA Ready? trigger
שפה משותפת • במימוש יש שימוש אינטנסיבי בשלוש אלמנטים מיוחדים • Line Buffer- בשימוש כאשר יש צורך לדעת את הסביבה של כל פיקסל • Write Switch– בשימוש כאשר יש צורך בזיכרון לקריאה וזיכרון לכתיבה • אינדקס לכתיבה ואינדקס לקריאה – בשימוש כאשר עלינו קודם לקרוא סגמנט מזיכרון לפני שמתחילים לכתוב לזיכרון
Line Buffer 6 2 1 1 7 5 4 1
Write Switch שני בנקי זיכרון - אחד לכתיבה ואחד לקריאה, אשר מחליפים תפקיד בסיום כל פריים. Write to RAM 1 Read from RAM 0 0 1 1
הפרדת מסלול נתונים ובקרה • הפרדה בין מסלול הנתונים (לוגיקה, זיכרון ויצירת אינדקסים) לבין מסלול הבקרה. • בקר חיצוני שולט על רצף הפעולות לפי דגלים שמקבל ממסלול הנתונים. • המודל מבוסס על מעבד MIPS
The Controller • הבקר הינו מכונת מצבים. • כל מצב מתאים להפעלת חלק לוגי אחר בתהליך החישוב • בכל מצב יש שרשרת החלטות פנימית והפעלת אותות מתאימה
הזיכרון • כל הזיכרונות ממומשים בעזרת RAM • לכל הזיכרונות, מלבד זיכרונות F[xx] קיים write switch להבחנה בין המידע שנכתב לבין המידע שנקרא, כפי שצוין מקודם.
לוגיקה חישובית • חישוב נגזרות במרחב של התמונה • חישוב נתוני עזר בהתבסס על התמונה הנוכחית והנגזרות של התמונה הקודמת • חישוב וקטורי התנועה ושמירתם • טיפול בתנאי שפה – מסגרת התמונה
שיטות בדיקה • מציאת החלק הבסיסי ביותר שניתן לבדיקה ומציאת הקוד המקביל לו ב Matlab • הכנסת הקלט הפשוט ביותר והמתאים לרכיב זה • טעינת נתונים נכונים מה workspace- ובדיקת התוצאות על ידי יצוא נתוני הסימולציה ל workspace. • שימוש בסקופים וגרפים • השוואת הגרפים המתקבלים לתרשים אותות צפוי.
דוגמא: בדיקת כתיבה לזיכרון • הקלט:סדרתי • בדיקה:שהכתיבה מתבצעת כראוי ובתזמון הנכון Data Address Write Enable
דוגמא לבדיקת Fxx תןצאות קוד המטלב המקורי תוצאת מערכת הסימולינק השוואת התוצאות על ידי פונקציית השוואה
Fixed point • ייצוג מספרים לא שלמים בצורה פשוטה לעיבוד חומרתי. • המספר מיוצג על ידי מספר קבוע של ספרות בינאריות אשר מהוות את החלק השלם ומספר קבוע של ספרות בינאריות המייצגות את השבר. • זהו ייצוג לא מדוייק! • ייצוג זה נחוץ לפעולה חלקה של כל מעבד אשר לא מכיל יחידת FP. • רוב מעבדי DSP עובדים בייצוג זה.
Simulink Fixed Point Tool • מספק תמיכה לסימולציה בתנאי fixed point . • תומך HDL Coder • מאפשר השוואה נוחה של תוצאות בין floating point וfixed point • מציע, על סמך מבחן קלט-פלט אורך מילה ויחס שלם\שבר. • מאפשר שינוי רוחבי של פרמטרי הייצוג לאחר מעבר ראשוני של פרויקט ל fixed point.
קשיים עם fixed point • המעבר ל fixed point איננו טריוויאלי. • קיים קושי במעבר נתונים בין מודלים של simulink ושל matlab. • פעולות אריתמטיות "מתנהגות" באופן שונה • הטיפול ב fixed point בקוד מטלב הוא מסורבל • מציאת ערכי מילה\שבר מתאימים הינם עדיין עניין של ניסוי וטעייה
התקדמות עם fixed point • בתחילת המעבר התקשינו מאוד ולא הצלחנו להמיר אפילו חלקים קטנים של קוד ל fixed point • ישבנו עם מייק ואחרי הנחייה ועזרה צמודה שלו הצלחנו להעביר את פונקציית הנגזרות ל fixed point • בעזרת הידע שלמדנו עם מייק ראינו כי המעבר אפשרי אך ההתקדמות בו הייתה איטית ומסורבלת ביותר.
תוצאות • לאחר בדיקת כל אותות הביניים עוברים לבדיקה המלאה –וקטורי התנועה U,V • הבדיקה מתבצעת תחילה על 2 תמונות פשוטות והשוואת התוצאות לקוד המקורי • הכנסת 2 תמונות מתוך הסרט והשוואה לקוד המקורי • הכנסת סרט וידאו מלא והשוואה על ידי סקריפט לקוד המקורי
Video בדיקת המערכת על סרט וידאו: • 283 פריימים • גודל פריים: 120x160 • נבחן את התוצאות המתקבלות, בשקפים הבאים
תוצאות: יעדים • אלגוריתם openflow מומש בsimulink באופן מלא • מסלול נתונים מלא • בקר מתפקד • שלב החומרה של הפרויקט, שהוגדר כפרויקט ב לא התבצע כי לא המשכנו לפרויקט ב • לא עמדנו בדרישות למעבר מ FP ל fixed point
תוצאות : יעדים אקדמאיםתכנון • למדנו (על בשרנו) את חשיבות התכנון הראשוני, לפני המימוש. למרות שחלק מהמימוש ניתן לנו, ראינו כי שינויים שמתבצעים ללא תכנון מקדים משפיעים במקומות לא צפויים. • למדנו טכניקות שונות בעבודה עם מערכות לעיבוד נתונים בזמן אמת – בנקי זיכרון שונים, מקביליות, caching (line buffer) , הפרדה בין מסלול נתונים לבקרה ועוד.
תוצאות: יעדים אקדמאיםתכנות • התנסינו בצורה ישירה בסיבוכיות של תכנון מערכת מורכבת בעלת חלקים שונים אשר צריכים לתקשר אחד עם השני • גילינו והתמודדנו עם בעיית הסנכרון בין אותות במערכות מסוג זה. • הכרנו לעומק את simulink ואת סביבת העבודה • שיפרנו את יכולתנו בתכנות ב matlab.
תוצאות: יעדים אקדמאיםבדיקות • העיקרון המנחה שלמדנו – " דבר ראשון, בודד את הבעיה" • השתמשנו בסט טסטים ששימשו לנו כסוג של benchmark לתפקוד המערכת • למדנו את חשיבות השימוש בשרטוט אותות כדי לדבג מערכות סינכרוניות • למדנו לאהוב את ה scope • גילינו את חשיבות רעיון ה code review