‏הצגת רשומות עם תוויות HDL. הצג את כל הרשומות
‏הצגת רשומות עם תוויות HDL. הצג את כל הרשומות

יום חמישי, 29 בינואר 2015

חוויות מבוסטון

בשבוע שעבר השתתפתי בכנס השנתי של עובדי חברת MathWorks, ואני חייב לשתף אתכם בהתרגשות שאחזה בי כאשר שמעתי על תוכניות החברה לשנים הקרובות (לצערי בינתיים אני יכול לשתף אתכם רק בהתרגשות, ולא בתוכניות...).
פרט למושבים שבהם השתתפו גם מנהלי הפיתוח של הכלים השונים שדיברו על הכיוונים העתידיים, היו בכנס הרבה סדנאות מקצועיות והדגמות טכניות מגניבות.
אחת ההדגמות שמשכה את תשומת לבי היתה מימוש של גלאי אנשים מבוסס HOG על גבי פלטפורמת Zynq של חברת Xilinx. האלגוריתם מומש באמצעות תוכנת Simulink, והומר אוטומטית לקוד HDL באמצעות כלי של חברת MathWorks הנקרא HDL Coder, אשר מסוגל לייצר בצורה אוטומטית קוד VHDL ו-Verilog מתוך קוד MATLAB ומודלי Simulink. הנה תמונה מייצגת בה ניתן לראות את פלטפורמת ה-Zynq (בצד שמאל) ואת הגילוי המוצלח של האנשים שמבוצע על ידי האלגוריתם (לחצו על התמונה להגדלה):


עוד דוגמה נחמדה לשימוש בכלי MathWorks היתה דוגמה של המרה אוטומטית של קוד MATLAB לקוד C לצורך שילובו באפליקציית Android. הכלי אשר ממיר קוד MATLAB לקוד C++/C בצורה אוטומטית נקרא MATLAB Coder, והתייחסתי אליו בפוסט מלפני כחודשים וחצי (לחצו לקריאה). במרכז התמונה ניתן לראות טאבלט מבוסס Android, אשר מצלם חפיסת קלפים (מצד ימין), ומבצע גילוי פינות בתמונה המצולמת (התוצאה מוצגת על גבי מסך המחשב המחובר לטאבלט), והכל הודות לקוד MATLAB שהומר אוטומטית לקוד C והורד אליו.


מעבר לכך, היה לי את הכבוד לשוחח ארוכות עם ד"ר לורן שור, אשר הינה האדם הראשון שנשכר לעבודה ע"י מנכ"ל MathWorks (היום כבר יש בחברה מעל 3,000 עובדים). במהלך 28 שנות עבודתה עד כה בחברה, פיתחה ד"ר שור כלים שונים ופונקציות רבות (imread, imwrite, diff, filtfilt, interp1, interp2, imagesc וכו'), והיא גם מנהלת בלוג שזוכה לחשיפה "קצת יותר גדולה" מהבלוג שאתם קוראים כרגע :)
ד"ר שור צפויה להגיע לארץ בחודש מרץ, ולהיות Keynote Speaker בכנס IMVC השנתי הקרוב, בו תדבר על פתרון בעיות Big Data בתחום הראיה הממוחשבת באמצעות MATLAB. פרט לכך, במהלך ביקורה צפויה ד"ר שור להשתתף בשני סמינרים בנושא Big Data שתקיים חברת סיסטמטיקס, וכן להרצות במוסדות אקדמים מובילים. היו בטוחים שתקראו עוד על הביקור שלה בפוסט הזה.

יום רביעי, 5 בדצמבר 2012

שובם של ה-System Objects

בשלוש שנות קיומו של הבלוג הזה, השתדלתי כמה שפחות למחזר פוסטים. אבל בפוסט הנוכחי אחרוג ממנהגי, מכמה סיבות:
1. חלפו שנתיים וחצי מאז הפוסט האחרון בנושא שבו ארצה לדון
2. בתקופה הזו הנושא התפתח מאוד
3. חברת MathWorks רואה בנושא הזה מרכיב חשוב בתוכניותה לעתיד
4. מעט מאוד אנשים נחשפו לנושא הזה עד כה (בכל פעם שאני שואל את הקהל שאני ניצב מולו האם אנשים מכירים את הנושא, בודדים, אם בכלל, משיבים "כן").

הנושא הינו System Objects, אלגוריתמים העומדים מאחורי אובייקטים הקיימים בסביבת MATLAB כבר 6 גרסאות (מאז גרסת R2010a). כשכתבתי על כך לפני שנתיים וחצי, היו קיימים רק כ-140 אובייקטי מערכת, ורק בתחומים עיבוד אות, עיבוד וידאו, עיבוד תמונה וראיה ממוחשבת. כיום, קיימים כבר כ-330 אובייקטי מערכת, המשמשים ל:
1. עיבוד אות - מעל 95 אובייקטי מערכת ב-DSP System Toolbox
2. עיבוד וידאו, עיבוד תמונה וראיה ממוחשבת - מעל 60 אובייקטי מערכת ב-Computer Vision System Toolbox
3. פיתוח השכבה הפיזית של מערכות תקשורת - מעל 105 אובייקטי מערכת ב-Communications System Toolbox
4. תכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות Ultrasound ומערכות תקשורת מרובות-אנטנות - מעל 60 אובייקטי מערכת ב-Phased Array System Toolbox

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

להבדיל מפונקציות MATLAB, אשר הינן מסוג "y שווה לפונקציה של x", ה-System Objects מסוגלים לעבוד עם קלט משתנה (Streams) וכן מסוגלים לספק מידע על המצבים הפנימיים של הפונקציה. בכך הם מרחיבים את שפת MATLAB באופן המאפשר למדל מערכות דינמיות באמצעות שפה טקסטואלית, ומהווים מעין "גשר" המקשר בין MATLAB ל-Simulink. כמובן שאם כתבתם אלגוריתם ב-MATLAB העושה שימוש ב-System Objects, אתם מוזמנים לנסות להכניס אותו לתוך בלוק ה-MATLAB Function ב-Simulink על מנת לשלבו כחלק ממודל בסביבה הזו.

מבחינת ביצועים – נניח ואתם מעוניינים לבצע Edge Detection לפריימים השונים בסרטון וידאו. בעוד ששימוש בפונקציית edge בתוך לולאה העוברת בין הפריימים השונים יהיה כרוך בקריאה לאותה פונקציה בכל פעם מחדש (דבר אשר כרוך באיתחולים חוזרים ונישנים), עבודה עם אובייקט המערכת vision.EdgeDetector ומתודת step אמורה להיות יעילה יותר. בנוסף, כמה System Objects המשתייכים ל-Communications System Toolbox ול-Phased Array System Toolbox ניתנים להאצה על ידי שימוש ב-GPU (הכרטיס הגרפי של המחשב), תוך שינוי מזערי של הקוד הכתוב.  אם כך, System Objects אמורים להביא לקיצור זמני הריצה של אלגוריתמים ! 

System Objects עשויים להקל על אלה מכם המנסים לבצע סימולציות Fixed-Point בסביבת MATLAB, וכן על מי שמנסה להמיר בקלות קוד MATLAB לקוד C או HDL. כבר כיום יש תמיכה ביצירת קוד C/HDL מתוך מגוון System Objects - למשל, כל
ה-System Objects שבגרסת R2012b של ה-Communications System Toolbox נתמכים ליצירה אוטומטית של קוד C. בהקשר זה, חשוב לציין כי החל מגרסת R2011b יכול כל אחד לפתח System Objects משלו, אשר יוכלו להתממשק אל אלה שפיתחה MathWorks, והחל מגרסת R2012a ניתן להמיר לקוד C כאלה אובייקטי מערכת שהמשתמש פיתח.


System Objects הוא נושא שאני ממליץ לכל אחד להתחיל ללמוד אותו וליישם אותו, שכן כבר היום הם נכללים בחלק גדול מכלי MathWorks - פרט להיותם חלק ממשפחת ה-System Toolboxes (אותם ארבעה כלים שהוזכרו לעיל ואשר קיימים מגרסת R2011a), יש כיום אובייקטי מערכת גם בכלים Image Acquisition Toolbox (אובייקט המאפשר רכישת תמונה הנתמך ליצירה אוטומטית של קוד C) ו-HDL Verifier (אובייקט המאפשר לבצע סימולציות FPGA-in-the-loop תוך שימוש ב-MATLAB ו-FPGA בלבד). וכפי שנכתב קודם, MathWorks מתכוונת להמשיך לפתח את הנושא הזה בשנים הבאות.

לרשימת ה-System Objects בארבעת ה-System Toolboxes המוזכרים לעיל, לחצו על הקישורים הבאים:
DSP
Computer Vision
Communications
Phased Array

יום ראשון, 16 בספטמבר 2012

MATLAB 8 ו-Simulink 8 כבר כאן !

כידוע, מזה מספר שנים חברת MathWorks משחררת גרסת מוצרים חדשה פעמיים בשנה במועדים קבועים, ובשבוע שעבר שוחררה אחת מהגרסאות המשמעותיות ביותר של MATLAB ו-Simulink. אחרי 14 גרסאות לפלטפורמת MATLAB 7 ו-9 גרסאות לפלטפורמת Simulink 7, שתי הסביבות קיבלו בגרסת R2012b ממשק מודרני הצפוי לייעל את תהליכי העבודה של כל משתמש ומשתמשת. ופרט ל-MATLAB 8
ו-Simulink 8, נוספו יכולות חדשות למגוון הכלים האחרים של MathWorks.

בין היכולות החדשות במשפחת מוצרי MATLAB:
  • MATLAB - שולחן עבודה (Desktop) חדש, אשר בחלקו העליון toolstrip הכולל לשוניות (Tabs) אשר נמצאות בו תמיד (גלובליות) או נפתחות רק כתוצאה מביצוע פעולה מסוימת (המטרה הינה לפתוח אופציות נוספות רק כאשר הן באמת רלוונטיות). בתוך כל לשונית יש sections שונים, ובתוכם לחצנים (controls) אשר ניתן להוסיפם ל-Quick access toolbar המופיע מעל ה-toolstrip (וכך לבצע פעולות נפוצות באמצעות קליק אחד של עכבר). לחצו לסרטון קצר בנושא ה-Desktop החדש, או קראו פוסטים באנגלית בנושא (קישור 1, קישור 2)
    אחת מהלשוניות המעניינות הינה גלריית ה-Apps, אשר כוללת אפליקציות אינטראקטיביות המגיעות כחלק מהכלים השונים של MathWorks, מאתר שיתוף הקבצים או מקולגות, ואשר מאפשרת אריזת אפליקציות אותן המשתמש בונה והעברתן בקלות למשתמשים אחרים. לחצו לסרטון בנושא התקנת ואריזת אפליקציות, או קראו פוסט באנגלית בנושא.
    ה-Help המעולה של MathWorks עבר שינוי גדול כדי לשפר עוד יותר את חווית המשתמש. הממשק שלו מזכיר כעת דפדפן אינטרנט, והוא מקל על ביצוע שאילתות ומאפשר הצגה של מספר עמודי תיעוד בלשוניות נפרדות. שימו לב שניתן לבצע חיפוש בתיעוד גם באמצעות חלון החיפוש הנמצא ליד ה-Quick access toolbar. לחצו לסרטון בנושא ה-Help החדש.
    ולסיום, נוספה ל-MATLAB יכולת להציע תיקונים לטעויות הקלדה של שמות פונקציות ומשתנים ב-Command Window. לחצו לסרטון בנושא, או צפו בתיקונים לשם הפונקציה ושם המשתנה בדוגמה למטה, בה ניתן להתרשם גם מה-Desktop החדש (ה-Quick access toolbar מוקף באליפסה).


  • MATLAB Coder - לכלי המאפשר יצירה אוטומטית של קוד C מתוך MATLAB נוספה יכולת להעריך עד כמה יהיה קל להמיר באמצעותו קוד MATLAB מסויים לקוד C. לחצו לתיעוד בנושא הפקודה הרלוונטית.
    הכלי תומך כעת בפונקציית parfor לצורך ייצור קבצי MEX המסוגלים להשתמש במספר ליבות.
    ולסיום, רשימת הפונקציות וה-System Objects הנתמכות על ידי הכלי הורחבה, ונוספו כאלה מהכלים Image Processing Toolbox
    Computer Vision System Toolbox, DSP System Toolbox ו- Communications System Toolbox (כל ה-System Objects שבו נתמכים כעת).
  • Computer Vision System Toolbox - לכלי המקל על פיתוח מערכות ראיה ממוחשבת ועיבוד וידאו ותמונה נוספו אלגוריתמים לעקיבה אחר מספר אובייקטים ומתן הסבר (Annotation) לגבי האובייקטים המאותרים.
    בנוסף, הכלי כולל כעת את אלגוריתם KLT לעקיבה אחר פיצ'רים ותומך בגילוי אנשים מבוסס HOG.
  • Image Processing Toolbox - הביצועים של מספר פונקציות בכלי שופרו, והוא גם כולל כעת פונקציות חדשות לחישובי גרדיאנט בתמונה והתאמת היסטוגרמות. בנוסף, לפונקציה imregister, שהתווספה לכלי בגרסה הקודמת, נוספה תמיכה ברגיסטרציה מבוססת-עוצמה בתלת-מימד (RGB).
  • DSP System Toolbox - לכלי המקל על תכנון וסימולציה של מערכות עיבוד אות נוסף System Object המאפשר לצפות בספקטרום ההספק או בצפיפות ההספק הספקטרלי.
  • Parallel Computing Toolbox - מזה שנתיים ניתן להאיץ את ביצועי MATLAB על ידי שימוש בכרטיס הגרפי (GPU) של המחשב. בגרסה החדשה התווספו עוד פונקציות המסוגלות לרוץ על ה-GPU, ושופרו הביצועים של חלק מאלה שכבר יכלו לעשות זאת. בין היתר, מספר פונקציות / System Objects מהכלים
    Neural Network Toolbox, Phased Array System Toolbox
    ו-Signal Processing Toolbox ניתנות כעת להאצה באמצעות ה-GPU, וזאת בנוסף לאלה שכבר נתמכו מתוך ה-Communications System Toolbox.
  • HDL Coder - לכלי המאפשר המרה אוטומטית של קוד MATLAB ומודלי Simulink ל-HDL נוספה תמיכה ביצירת קוד HDL ממגוון System Objects מתוך ה-Communications System Toolbox.
  • HDL Verifier - הכלי המשמש לוריפיקציה של קוד HDL מכיל כעת System Object המאפשר לבצע סימולציות FPGA-in-the-loop תוך שימוש ב-MATLAB ו-FPGA בלבד.
  • כלים חדשים - למשפחת כלי MathWorks נוספו שני כלים חדשים. ה-Financial Instuments Toolbox הינו כלי המאגד את יכולות ה-
    Fixed-Income Toolbox וה-Financial Derivatives Toolbox.  ה-MATLAB Production Server הינו כלי להרצת תוכניות MATLAB כחלק מישומי אנטרפרייז, מאגרי מידע ורשת.

בין היכולות החדשות במשפחת מוצרי Simulink:
  • Simulink - התוכנה כוללת כעת עורך (Editor) חדש המקל על צפיה במודלים, ניווט ועריכה. התפריטים בעורך החדש מסודרים בהתאם לפרדיגמת Model-Based Desgin (דבר אשר שם סוף למצב בו תפריט tools מכיל כמעט את כל האפשרויות...). ניתן כעת לסמלץ מודל צעד-אחר-צעד, לחזור אחורה בזמן הסימולציה ולהוסיף breakpoints התלויים בערכו של סיגנל. פיצ'ר חדש מאפשר חיבור חכם בין בלוקים המוצא את הנתיב הפשוט ביותר ביניהם שאינו כרוך בהסתרות של בלוקים אחרים או טקסט כלשהו. פיצ'ר נוסף הינו תגים (Badges) המספקים אינדיקציות גרפיות לגבי בלוקים וסיגנלים. ניתן כעת להציג בלשוניות (Tabs) שונות באותו חלון מספר תת-מערכות או מבטים שונים על אותו מודל (למשל, ברמות zoom שונות). העורך כולל Explorer bar המקל על ניווט ברמות היררכיה שונות במודל (לחצו לסרטון בנושאים Tabs ו-Explorer bar). ניתן כעת להתעלם מבלוק מסויים בזמן הסימולציה (מאפשר לבחון וריאציות שונות של אותו מודל או להאיץ את הסימולציות על ידי כיבוי של בלוקי תצוגה). מגרסה זו של הכלי ניתן גם לשנות את גודלו של בלוק תוך שמירה על הפרופורציה בין גובהו ורוחבו (על ידי לחיצה על Shift) וכן ניתן לשנות את גודלו של בלוק סביב מרכז הבלוק (לחיצה על Ctrl), לחצו לפוסט באנגלית בנושא.
    הכלי כולל כעת שני Advisors - יועץ המנתח את המודל ומספק עצות לשיפור ביצועי הסימולציה, ויועץ המסייע לשדרג מודלים ישנים לעבודה בגרסה העדכנית.
    ולסיום, פורמט ברירת המחדל לשמירת קבצים הינו slx (להבדיל מ-mdl, אשר עדיין קיים), אשר חוסך מקום בזיכרון, מספק מידע רב למערכות הצגת קבצים וחוסך בזמן בישומים מסוימים (הפורמט הושק בגרסה הקודמת, אולם לא היה ברירת המחדל). שימו לב גם שאופציות ה-zoom וה-panning מתאפשרות החל מגרסה זו בדרכים אחרות מבעבר (zoom על ידי גלגול גלגלת העכבר קדימה או אחורה, או על ידי
    ++Ctrl או -+Ctrl; הצגת המודל כולו באמצעות 1+Alt או מקש הרווח (כבעבר); ניתן לבצע את שתי הפעולות האחרונות גם באמצעות הלוחית האנכית (בצד שמאל של חלון המודל); panning על ידי לחיצה על גלגלת העכבר והזזת העכבר או על ידי מקש הרווח + לחצן שמאלי בעכבר (והזזת העכבר). לחצו לקריאת פוסט באנגלית בנושא או לקריאת עמוד תיעוד בנושא).
    בדוגמה למטה ניתן להתרשם מהעורך החדש - הן מסידור התפריטים, והן מהלחצנים המאפשר לחזור אחורה בזמן הסימולציה או לסמלץ את המודל צעד-אחר-צעד (מוקפים בעיגולים העליונים), מה-Explorer bar (עיגול אמצעי, ומשמאלו - לוחית ה-zoom) ומ-badge לדוגמה (עיגול תחתון).

  • Stateflow - העורך של הכלי למידול וסימולציה של לוגיקה משולב כעת כחלק אינטגרלי מהעורך של Simulink. ניתן כעת להשתמש בשפת MATLAB על מנת להגדיר תנאים ופעולות ב-Stateflow (המערכת תשנה את הסינטקס לזה המקובל). ולסיום, נוספה היכולת לבנות Structured Logic באמצעות State Transition Tables.
  • SimMechamics - לכלי המקל על מידול וסימולציה של מערכות מכאניות הצטרפה בגרסה הקודמת טכנולוגיית דור 2. לטכנולוגית דור 2 זו הצטרפה בגרסה החדשה תמיכה ליצירה אוטומטית של קוד C (באמצעות ה-Simulink Coder) וליבוא של מודלי CAD (למשל מתוכנת SolidWorks).

היכולות שהוצגו לעיל הן רק חלק מאלה שנוספו בגרסה החדשה. למידע מלא על הגרסה החדשה, בקרו בעמוד גרסת R2012b באתר MathWorks.
מה דעתכם על הגרסה החדשה? כמה זמן לקח לכם להתרגל אליה? האם היא חוסכת לכם זמן? מאיזה פיצ'ר התלהבתם במיוחד?

 

יום חמישי, 15 במרץ 2012

מה חדש ב-MATLAB ו-Simulink בגירסת R2012a ?


בתחילת מרץ שוחררה גירסת R2012a של כלי MathWorks, המכילה יכולות חדשות ב-MATLAB ו-Simulink, וכן עדכונים לעשרות כלים אחרים.


בין היכולות החדשות במשפחת מוצרי MATLAB :

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

Image Processing Toolbox – התווספה יכולת לבצע רגיסטרציה אוטומטית של תמונות בעזרת intensity-metric optimization, וכן נוספו פונקציות למציאת מעגלים בתמונה והצגתם.

Computer Vision System Toolbox – הכלי המקל על תכנון וסימולציה של מערכות ראיה ממוחשבת ומערכות עיבוד וידאו ותמונה תומך כעת גם בגילוי פנים באמצעות אלגוריתם Viola-Jones, גילוי פיצ'רים בשיטת MSER, עקיבה בגישת CAMShift וחישוב Integral Image. הכלי אינו מצריך עוד את ה-DSP System Toolbox וה-Signal Processing Toolbox לצורך פעולתו.

Image Acquisition Toolbox – הכלי המאפשר להזין בקלות את סביבות MATLAB ו-Simulink במידע ויזואלי (וידאו/תמונה) על ידי מגוון מצלמות ו-frame grabbers כולל כעת System Object הניתן להמרה אוטומטית לקוד C באמצעות ה-MATLAB Coder.

MATLAB Compilerה-MCR ניתן כעת להורדה מהאינטרנט, דבר המקל על הפצת אפליקציות וקומפוננטות מקומפלות לעמדות בהן אין התקנה של MATLAB. מעבר לכך, הכלי תומך במספר פונקציות נוספות המשתייכות ל-Computer Vision System Toolbox.

MATLAB Coder – הכלי המאפשר המרה ישירה של קוד MATLAB לקוד C מאפשר כעת גם המרה של System Objects שפותחו על ידי המשתמש.

HDL Coder – הכלי, אשר נקרא בעבר Simulink HDL Coder ואיפשר המרת מודלי Simulink לקוד HDL, מאפשר כעת גם המרה ישירה של קוד MATLAB לקוד HDL מטיפוס Fixed-Point לצורך קבלה מהירה של אבטיפוס ולשם מימוש אלגוריתמים על רכיבי ASIC ו-FPGA. הנ"ל אמור גם לגבי System Objects. הכלי אינו מצריך עוד Simulink Fixed-Point או Simulink לצורך פעולתו (דורש רק MATLAB Coder ו-Fixed-Point Toolbox).

HDL Verifier – מאפשר שימוש חוזר ב-test benches קיימים ב-MATLAB ו-Simulink לצורך וריפיקציה של קוד HDL על ידי קו-סימולציה עם סימולטורי HDL או בדיקות hardware-in-the-loop עם רכיבי FPGA. הכלי מחליף את ה-EDA Simulator Link וכולל כעת תמיכה בביצוע בדיקות hardware-in-the-loop גם לרכיבי FPGA של חברת Altera (חמישה-עשר דגמי FPGA של Altera ו-Xilinx נתמכים).

Statistics Toolbox – מכיל ממשק משופר לביצוע התאמה, חיזוי והצגה באמצעות רגרסיה לינארית, לינארית-מוכללת, ולא-לינארית.

Communications System Toolbox – מכיל כעת מודלים לערוצי LTE MIMO, ומאפשר ניצול של הכרטיס הגרפי (GPU) שבמחשב לצורך האצת סימולציות של מגוון System Objects הרלוונטים לתכנון, סימולציה וניתוח השכבה הפיזית
 (Physical Layer) של מערכות תקשורת.

Parallel Computing Toolbox – מאפשר כעת האצת ביצועים של מגוון פונקציות ה-FFT (על כל הסינטקסים שלהן) ופונקציות נוספות על ידי שימוש בכרטיס הגרפי (GPU) שבמחשב. בנוסף, פונקצית arrayfun שודרגה.



בין היכולות החדשות במשפחת מוצרי Simulink :

Simulink – מאפשר כעת הרצה של מודלים על חומרה זולה דוגמת LEGO MINDSTORMS NXT ו-BeagleBoard ישירות מתוך Simulink. בנוסף, חלון ה-editor של בלוק ה-MATLAB Function משולב כעת עם חלון ה-editor הרגיל של MATLAB, הורחבה התמיכה במערכות source control באמצעות ה-Source Control Adapter SDK, נוספה היכולת להוסיף legends בבלוק ה-Scope, הצטרפה האפשרות לשמור מודלים וספריות בפורמט הקבצים החדש של Simulink הנקרא SLX (חוסך מקום בזיכרון, מספק מידע רב למערכות הצגת קבצים, חוסך בזמן ביישומים מסוימים, וצפוי להיות הפורמט היחיד החל מ-R2012b) והתווסף ה-Signal Hierarchy Viewer.

Simulink Verification & Validation – לכלי המאפשר, בין היתר, שמירה על עקביות במודל אותו מפתחים, נוספה יכולת להחריג בלוקים ותת-מערכות כך שלא ייבדקו על ידי ה-Model Advisor, דבר אשר מקצר את משך פעולתו.

SimMechanics – לכלי המקל על מידול וסימולציה של מערכות מכאניות התווספה טכנולוגית דור 2 המאפשרת ליצור מודלים תלת-מימדיים ריאליסטיים יותר ולבחון את תוצאות הסימולציה שלהם באמצעות אנימציה משופרת בתלת-מימד. בנוסף, ניתן כעת להגדיר צורות באמצעות קוד MATLAB (שימושי אם אין תוכנת CAD זמינה), קל יותר לבצע שימוש חוזר באבני בנין ואפשר לנווט בתוך המודל המכאני באמצעות דפדפן.

Real-Time Windows Target – מאפשר הרצת מודלים של Simulink ב-
real-time בסביבת Windows תוך שימוש ב-Normal Mode, לצורך rapid prototyping או בדיקות hardware-in-the-loop
. כלומר, הכלי אינו מצריך עוד את ה-MATLAB Coder וה-Simulink Coder לצורך פעולתו, שכן פרט ל-External Mode, ניתן להשתמש כעת גם ב-Normal Mode.


עוד משהו?

מידע נוסף על החידושים הללו ועל יתר היכולות שהתווספו ניתן למצוא בעמוד הגרסה באתר MathWorks.

האם הורדתם כבר את הגרסה החדשה? איזו יכולת חדשה שצוינה למעלה שימושית במיוחד עבורכם? האם יש חידוש שגיליתם שלא הופיע למעלה?

יום שני, 2 בינואר 2012

האצת ביצועי אלגוריתם לעיבוד וידאו בעזרת FPGA-in-the-Loop

"הרשו לי לפנות את הבמה פעם נוספת לטובת בלוגר אורח – יגאל ירוסלבסקי, אשר התארח בבלוג הזה לפני כחצי שנה. יגאל עובד יחד עמי בחברת סיסטמטיקס. ומתמחה בכלי MathWorks המיועדים לעולם התקשורת, עיבוד אות, יצירה אוטומטית של קוד HDL ואימות (Verification) שלו, וכן בתהליכי פיתוח של אלגוריתמים המתוכננים לפעול על FPGA-ים".
מה קיבלתם לראש השנה האזרחית? אתם לא באמת חייבים לענות, זאת הייתה שאלה רטורית שכל מטרתה היתה להביא אותי לספר על מה שאני קיבלתי. ובכן, אני קיבלתי לוח FPGA חדש, "צעצוע" שצפוי לספק לי שעות של הנאה בחודשים הקרובים. ומה היה הדבר הראשון אותו החלטתי לבדוק אחרי שפתחתי את הקופסא? ובכן, החלטתי לבדוק עד כמה הרצת האלגוריתם על גבי ה- FPGA יכולה להאיץ את ביצועי סימולציות ה-Simulink שלי.

אז הנה לכם, בפינה השמאלית עומד לו מעבד אינטל עם 4 ליבות הנמצא במחשב בעל 4 ג'יגה זכרון ומערכת הפעלה של 64 ביט. ומולו, בפינה הימנית, לוח FPGA של אחת משתי היצרניות הגדולות ביותר לשבבי FPGA. הלוח, אגב, איננו חמוש ב High-End FPGA חדש אלא ב-FPGA "ותיק" ממנו בשני דורות. אז מי לדעתכם ינצח? אם קראתם את הכותרת, אתם כבר יודעים את התשובה.

לטובת בדיקת הביצועים בחרתי במודל לדוגמה (DEMO) המסופק כחלק מה-HELP של MATLAB. הדמו עוסק בחידוד של וידאו על ידי שימוש ב-Computer Vision System Toolbox, והוא נמצא תחת כלי בשם EDA Simulator Link אשר שימש אותי לטובת הורדת קוד ה-HDL (הנוצר אוטומטית מתוך המודל) לתוך שבב ה-FPGA. אלה מכם שירצו לחזור על הפעולות שלי פשוט צריכים לחפש fil_videosharp_fpga ב-HELP בכל גרסת MATLAB החל מ-R2011a.

להלן המודל המיועד לריצה ב-Simulink "בלבד":


כאשר הרצתי חצי שניה של סימולציה ומדדתי זמן ריצה קיבלתי:

>> tic; sim('fil_videosharp_sim'); toc
Elapsed time is 752.932444 seconds.
לא מעט זמן... השאלה היא לאיזו תוצאה אפשר להגיע על ידי שימוש בלוח FPGA.

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

על מנת להוריד אלגוריתם לשבב FPGA, יש להפוך אותו לקוד Hardware Description Language, או בקיצור - HDL. ניתן לממש את האלגוריתם לעיל מחדש בשפת HDL באופן ידני, אך קל יותר פשוט להשתמש ב-Simulink HDL Coder שעושה זאת עבורנו בצורה אוטומטית – מהר יותר, ללא שגיאות קידוד, ופשוט יותר. כל מה שעלינו לעשות הוא להקליק עם הלחצן הימני של העכבר על הבלוק הורוד ולבקש יצירה של קוד HDL:

והתוצאה - קבצי ה-HDL של האלגוריתם (אצלי ברירת המחדל היא קבלת VHDL, אבל ניתן לקבל גם Verilog):

שימו לב כי הקבצים למעלה הינם "רק" קבצי מימוש האלגוריתם. על מנת ליצור את רכיבי השרות, האחראים בין היתר על ניהול התקשורת מול Simulink, יש לפתוח את אשף
ה-
FPGA-in-the-Loop  באמצעות הפקודה filWizard:

העבודה עם האשף די אינטואיטיבית, ובסיומה נוצרים בצורה אוטומטית קבצי השרות:

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

וכעת, כל מה שנותר הוא רק לסתנז את קבצי ה-HDL לקבצים בינאריים הניתנים לטעינה לתוך ה-FPGA ולטעון אותם אל ה-FPGA. נשמע מסובך? אז תשמחו לגלות שגם תהליך זה נעשה בצורה אוטומטית. קליק כפול על בלוק ה-Cosimulation ולחיצה על Load יגרמו לביצוע תהליכי הסינתזה, המיפוי, המיקום, הניתוב וטעינת השבב:
לחיצה על כפתור ה-PLAY במודל ה-Simulink ומדידה של זמן הריצה עבור עיבוד 10 שניות של וידאו (פי 20 ממשך הוידאו שעיבדתי קודם לכן) מניבה את התוצאה הבאה:


>> tic; sim('fil_videosharp_fpga'); toc
Elapsed time is 7.571201 seconds.

סיכום כמותי:

Simulink בלבד:                         חצי שניה של וידאו מעובד = 753 שניות ריצה בפועל
קו-סימולציית Simulink + שבב FPGA: עשר שניות של וידאו מעובד = 7.6 שניות ריצה בפועל

בחישוב גס, שימוש ב- FPGA-in-the-Loop הביא להאצה של כמעט פי 2000 ! ואם הסימולציות שלכם כבדות יותר (כאלה שבהן איטרציה אחת יכולה לקחת שעות או אולי ימים), האצה של פי 2000 יכולה להיות קריטית לעתיד הפרוייקט שבמסגרתו הסימולציות האלה צריכות להתבצע. ואגב, אותם הכלים שהוזכרו לעיל יכולים לשמש לא רק לטובת האצת ביצועים, אלא אף לפיתוח השבב ולאימות קוד HDL ידני או קנוי מחברה חיצונית. אבל על כך אני כבר אכתוב בפעם אחרת.

האם הייתם מודעים ליכולת להאיץ סימולציות על ידי FPGA-in-the-Loop ? האם ידעתם שניתן גם להמיר קוד MATLAB לקוד HDL באופן אוטומטי?

יום שני, 9 במאי 2011

מ-MATLAB ל-HDL

"הרשו לי לפנות את הבמה בפוסט הזה לטובת בלוגר אורח – יגאל ירוסלבסקי, אשר עובד יחד עמי בחברת סיסטמטיקס. יגאל מתמחה בכלי MathWorks המיועדים לעולם התקשורת, עיבוד אות, יצירה אוטומטית של קוד HDL ואימות (Verification) שלו, וכן בתהליכי פיתוח של אלגוריתמים המתוכננים לפעול על FPGA-ים. וכפי שתגלו – יגאל הוא גם תאולוג לא קטן..."


שלום,
אני יגאל, ומבחינתי הנדסת אלקטרוניקה היא סוג של דת.


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


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


ובמקרה שלי, אני משתמש ב-MATLAB על מנת לעצב ולבצע סימולציות למערכות חומרה ספרתית.


איך זה אפשרי? המאמר המפורט להלן יתן לכם הצצה ראשונה לשימוש ב-MATLAB עבור מערכות חומרה ספרתית.