מתודולוגיית האימות האוניברסלית (UVM) היא דרך פופולרית לסייע באימות עיצובי SystemVerilog, והיא כוללת מערכת תצורה שלמרבה הצער יש כמה בעיות מהירות ושימוש. ריץ' אדלמן מסימנס EDA כתב מאמר מפורט בן 20 עמודים בנושא כיצד להימנע מבעיות אלו, ועברתי עליו כדי לסכם עבורכם את הדגשים. מהנדסי אימות משתמשים במסד נתונים של תצורת UVM כדי להגדיר ערכים, ולאחר מכן כדי לקבל את הערכים מאוחר יותר במבחן ה-UVM שלהם. דוגמה אחת להגדרה וקבלת ערך 'T' היא:
uvm_config#(T)::set(scope, instance_path_name, field_name, value); uvm_config#(T)::get(scope, instance_path_name, field_name, value);
חיבור שולחן הבדיקה של UVM למכשיר הנבדק משתמש במסד הנתונים של התצורה כדי להעביר את הממשקים הווירטואליים. ישנן שלוש בעיות בשימוש בתצורת UVM:
- קוד גדול, כ-2,600 שורות קוד
- דורש התאמת סוג מדויק, כך ש'int' ו-'bit' אינם זהים
- קוד איטי
שקול את המקרה של קוד איטי, כי עם אלפי קריאות ל-set() השימוש בשמות עם תווים כלליים יכול לקחת עד 30 דקות להשלמת שלב ה-'set' ו-'get'.
Rich מציע פתרון חדש לתצורות UVM שיש לו מהירויות הרבה יותר מהירות, שלוקח שניות בודדות בלבד בהשוואה.
אם קוד ה-UVM שלך נמנע משימוש בתווים כלליים ויש לו מעט פקודות 'קבע', הקוד שלך יפעל מהר יותר.
פתרונות אפשריים לבעיות תצורת UVM הם:
- השתמש במשתנה גלובלי במקום זאת
- השתמש בתצורת UVM עם סט אחד()
- השתמש בתצורת UVM עם כמה set()
- השתמש בעץ תצורה
- נסה משהו אחר
הגישה האחרונה של לנסות משהו אחר היא הפתרון החדש, והיא ממשיכה להשתמש ב-set() ו-get() API, ואז מפשטת על ידי הסרת הפרמטריזציה של התצורות, מסירה קדימות ומסירת את השינוי באלגוריתם החיפוש. התוצאות של גישה חדשה זו הן מהירויות מהירות.
פריט התצורה החדש שלך מוגדר במחלקה הנגזרת מ-'config_item', והדוגמה למטה מציגה את 'int value' כמאפיין המוגדר. למטרות ניפוי באגים אתה מוסיף את פונקציית הדפס יפה.
class my_special_config_item מרחיב את config_item; function new(שם מחרוזת = "my_special_config_item"); super.new(שם); endfunction int ערך; מחרוזת פונקציה וירטואלית convert2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); endfunction endclass
ל-'config_item' יש תכונה שם, והשם הזה נבדק, בתוספת שם המופע. לאובייקט התצורה יש גם פונקציה get_name() להחזרת השם. כדי למצוא כל "instance_name.field_name" מסד הנתונים של התצורה משתמש במערך אסוציאטיבי למהירות חיפוש ויצירה מהירים.
לעקיבות ניתן לברר מי קבע או מי קרא get, מכיוון ששם קובץ ומספר שורה הם שדות בקריאות הפונקציות set() ו-get().
set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)
ניתן להדפיס את תור העזר במהלך ניפוי באגים כדי לראות מי קרא ל-set() ו-get().
כדי לתמוך בתווים כלליים נדרש הוספת מנגנון חיפוש באמצעות קונטיינרים. שקול את שם המופע 'top.abcd*_0'.
חלק התווים הכלליים של שם המופע מטופל באמצעות עץ המכיל, במקום המערך האסוציאטיבי.
<br> סיכום
שיתוף נתונים בין המודול/מופע לעולם מבוסס הכיתה בספסל בדיקה של UVM יכול להיעשות באמצעות מסד הנתונים של תצורת UVM, רק שימו לב להאטות המהירות. אם המתודולוגיה שלך משתמשת בהרבה תצורות, שקול להשתמש בגישה החדשה שהוצגה הכוללת חבילה המשתמשת בכ-300 שורות קוד במקום 2,600 שורות הקוד בקובץ מסד הנתונים של תצורת UVM.
קרא את המאמר המלא בן 20 העמודים, הימנעות משיגעון תצורה בדרך הקלה בסימנס EDA.
בלוגים קשורים
שתף את הפוסט הזה באמצעות:
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- PlatoData.Network Vertical Generative Ai. העצים את עצמך. גישה כאן.
- PlatoAiStream. Web3 Intelligence. הידע מוגבר. גישה כאן.
- PlatoESG. פחמן, קלינטק, אנרגיה, סביבה, שמש, ניהול פסולת. גישה כאן.
- PlatoHealth. מודיעין ביוטכנולוגיה וניסויים קליניים. גישה כאן.
- מקור: https://semiwiki.com/eda/339885-making-uvm-faster-through-a-new-configuration-system/
- :יש ל
- :הוא
- :לֹא
- $ למעלה
- 30
- 300
- 600
- a
- אודות
- להוסיף
- מוסיף
- אַלגוֹרִיתְם
- גם
- an
- ו
- כל
- API
- גישה
- ARE
- מערך
- AS
- At
- לְהִמָנַע
- מודע
- b
- BE
- כי
- להיות
- להלן
- בֵּין
- by
- נקרא
- שיחות
- CAN
- מקרה
- שינוי
- בכיתה
- קוד
- השוואה
- להשלים
- תְצוּרָה
- לשקול
- מכולה
- מכולות
- ממשיך
- יצירה
- נתונים
- מסד נתונים
- מוגדר
- נגזר
- עיצובים
- מְפוֹרָט
- מכשיר
- אחר
- עשה
- בְּמַהֲלָך
- קל
- מהנדסים
- Ether (ETH)
- דוגמה
- משתרע
- מהר
- מהר יותר
- מעטים
- שדות
- שלח
- בעד
- החל מ-
- מלא
- פונקציה
- לקבל
- מקבל
- גלוֹבָּלִי
- נעלם
- לעזור
- פסים
- איך
- איך
- HTTPS
- if
- in
- כולל
- למשל
- במקום
- ממשקים
- הציג
- בעיות
- IT
- jpg
- רק
- אחרון
- מאוחר יותר
- קו
- קווים
- נראה
- בדיקה
- הרבה
- עשייה
- תואם
- max-width
- מנגנון
- מֵתוֹדוֹלוֹגִיָה
- דקות
- דקות
- הרבה
- שם
- שמות
- חדש
- פיתרון חדש
- מספר
- אובייקט
- of
- on
- ONE
- רק
- or
- הַחוּצָה
- חבילה
- מאמר
- חלק
- לעבור
- שלב
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- ועוד
- פופולרי
- הודעה
- עֲדִיפוּת
- בעיות
- רכוש
- מציע
- למטרות
- מסיר
- הסרת
- נדרש
- תוצאות
- לַחֲזוֹר
- עשיר
- הפעלה
- היקף
- שניות
- לִרְאוֹת
- סט
- הצבה
- הופעות
- סימנס
- מפשט
- להאט
- האטות
- So
- פִּתָרוֹן
- פתרונות
- כמה
- משהו
- מְהִירוּת
- מהירויות
- מחרוזת
- לסכם
- סוּפֶּר
- תמיכה
- מערכת
- T
- לקחת
- נטילת
- מבחן
- זֶה
- השמיים
- שֶׁלָהֶם
- אז
- שם.
- אלה
- זֶה
- אלפים
- שְׁלוֹשָׁה
- דרך
- זמן
- ל
- חלק עליון
- נושא
- עקיבות
- עץ
- מנסה
- סוג
- תחת
- לצערי
- אוניברסלי
- נוֹהָג
- להשתמש
- שימושים
- באמצעות
- ערך
- ערכים
- משתנה
- אימות
- לאמת
- באמצעות
- וירטואלי
- דֶרֶך..
- אשר
- מי
- יצטרך
- עם
- עוֹלָם
- כתב
- אתה
- זפירנט