Table of Contents

תכנון FPGA אמין ו ASIC חומרה דורש בדיקות קפדניות ואימות. VHDL Testbenches הם כלים הכרחיים המאפשרים למהנדסים לדמות ולאמת עיצובים דיגיטליים לפני ביצוע סיליקון. An יעיל Testbench תופס שגיאות פונקציונליות, הפרות תזמון, ואת כריות פינה מוקדם במחזור העיצוב, חיסכון חודשים של עבודות מחדש וצמצום עלויות הפיתוח הכוללות.

מה זה VHDL Testbench?

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

ההבדל העיקרי בין מבחן לבין מודול סינתזנטי הוא כי Testbenches לעולם לא צריך להיות מיושם על FPGA או מוטבע כמו ASIC. הם לרוץ לחלוטין סימולטור כגון Siemens EDA ModelSim/Questa, Aldec-PRO, או Vivado Simulator זה חופש מאפשר מהנדסים להשתמש בבניינים כגון קובץ / O, טקסט, ומודל נתונים מורכבים יהיה חומרת חומרה.

מדוע Testbenches הם קריטיים עבור FPGA ו ASIC אימות

מהנדסי אימות רבים מבלים 60-80% מהזמן בפרויקט על בדיקות.ללא מבחן, אימות עיצוב דורש בדיקה ידנית של גלפורות, שהוא הסתברות שגיאה להאט.

  • (FLT:0) גילוי מוקדם של באגוולד: 1FLT:1 באגים שנמצאו במהלך סימולציה עולה חלק מאלה שנמצאו לאחר ייצור ב ASICs או לאחר העלייה למטוס ב- FPGAs.
  • (FLT:0) בחינת תוקפנות: 1 כאשר שינויים בעיצוב נעשים, ניתן להפעיל מחדש את המבחנים כדי להבטיח פונקציונליות קיימת אינה שבורה.
  • (FLT:0Corner-Case Coverage: FIRLT:1) Testbenches יכולים ליצור שילובים רבים יותר קלט מאשר עריכת גלים ידנית יכול להשיג.
  • (ב) ויקרא י"א: "ה' אלקים" (ב) כ"כ)" (ב"ב)" (ב"ב)"ה', כ"כ)" (שם כ"ד).

עבור עיצובים ASIC, Testbench הוא לעתים קרובות החלק הראשון של קוד שנכתב לאחר מפרטים הם סופיים, לפעמים לפני ה- RTL עצמו הוא שלם.פרקטיקה זו, המכונה פיתוח מונחה בדיקה, מבטיח כי העיצוב הוא מאומת מההתחלה.

היתרונות העיקריים של מבחן VHDL יעיל

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

1. שעון ודור איפוס

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

  • אסאט מתאפס נמוך עבור 100 ns.
  • ריצוף דק-אסרט בזמן שהשעון פועל.
  • אפשרו מספר מחזורי שעונים לפני החלת וקטורים במבחן.

דור שני. Stimulus

מרכיב זה יוצר אותות קלט המייצגים תנאים בעולם האמיתי, ניתן לכוון (כל וקטור מבחן מוגדר במפורש) או אקראי (באמצעות פסאודו-ראן מספר מספר דור) Stimulus לעתים קרובות מאורגן לאחד או יותר FLT:0מעבדים FLT:1 או FLT:2proceduresFLT 3 כי מניע את נמלי DUT.

3.DUT REITION

העיצוב תחת מבחן הוא מיידי בתוך הארכיטקטורה של הסקירת.הנמלים שלה קשורים לסימנים מקומיים כי הדחפים או הצגים של האות שמות מוסכמות (למשל, FLT:0,FLT:1), מסייעים להבחין אותות מבחן מרשת פנימית DUT.

4. ניטור ובדקים

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

5.מבחן סיקוויאר

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

6.דיווח ו- Logging

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

צעדים ליצירת VHDL Testbench

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

שלב 1: הבנת ה-DUT Interface ו- Specification

לפני כתיבת קו בודד, לבדוק את רשימת הנמל של DUT, דרישות פרוטוקול, דיאגרמות תזמון, ומפרט פונקציונלי.זהה את כל יציאות קלט ופלט, רוחב הנתונים שלהם, ו לחיצות ידיים. לדוגמה, אם DUT הוא AXI Stream FIFO, לציין את הידיים מוכן / יקרוש, התנהגות מדכאת אחורית, הגדרות סף.

שלב 2: כתוב את Testbench Skeleton

צור קובץ VHDL עם ישות ריקה (ללא נמלים) ואדריכלות. אותות Declare כי יתחברו לנמלי DUT.מיד את ה DUT כמרכיב.

entity tb_fifo is
end entity tb_fifo;

architecture sim of tb_fifo is
 signal clk : std_logic := '0';
 signal rst_n : std_logic := '0';
 signal data_in : std_logic_vector(7 downto 0);
 signal wr_en : std_logic;
 signal full : std_logic;
 -- ... other signals
begin
 DUT: entity work.fifo
 port map (
 clk => clk,
 rst_n => rst_n,
 data_in => data_in,
 wr_en => wr_en,
 full => full
 );
 -- Clock generation process
 clk <= not clk after 5 ns;
end architecture sim;

שלב 3: יצירת תהליכים גירוי

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

שלב 4: הטמעה ובדיקות

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

assert dout = expected_data
 report "Data mismatch at time " & time'image(now)
 severity error;

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

שלב 5: הפעלת סימלציה ואנליז תוצאות

שתף את Testbench ו DUT ב סימולטור הנבחר שלך. להפעיל את הסימולציה ולבחון את התמליל עבור תקלות בטענה. השתמש בצופים גלפור כדי לפוצץ התנהגויות בלתי צפויות.

שיטות בדיקה ב-VHDL Testbenches

מטרות אימות עיצוב שונות קוראות שיטות בדיקה שונות.אסטרטגיות נפוצות ביותר הן:

בדיקה ישירה

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

בדיקה אקראית

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

מבחן Coverage-Driven Testing

מדדי כיסוי (כיסוי קוד, כיסוי לעיכול, כיסוי פונקציונלי) מצביעים על אילו חלקים של העיצוב הופעלו. סימולטורים רבים יכולים לדווח על כיסוי פונקציונלי. כיסוי פונקציונלי יכול להיות מיושם באמצעות חבילות כיסוי VHDL (למשל, OSVVM או UVVM).המטרה היא להשיג כיסוי 90-100% על נתיבים קריטיים.

בדיקה חוזרת

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

טכניקות מתקדמות עבור Robust Testbenches

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

שימוש בנוהלים ובפונקציות

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

המונחים: Entity Imation vs. Component Imiation

(ה-VHDL-93 ואילך) מומלץ כי היא נמנעת מהצהרות רכיב נפרדות.שימוש ב-FLT:8 ישירות בארכיטקטורה.

VHDL-2008

VHDL-2008 הציג מספר מבנים אשר משפרים את התפתחות ה- Testbench:

  • (ב) ,0) סוגי הגנרית הנתונים: FLT:1 מאפשר פרמטרים גנריים להיות גמישים יותר.
  • (ב) ,0) ביטויים ב-נמלים: חליל 1 (הדגשה על קשר של אותות בלתי פתורים.
  • (ב) ,0) הקצאות אות נבחרות: ⁇ 1 (ב) הקטנת הצורך במכשולים.
  • (ב) ,0) ,9 (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) שיפורי הבקשות: 1FLT:1 ,7 אמירות יכולות לכלול (FLT:12) כדי להפסיק את הסימולציה.

אימוץ VHDL-2008 ב Testbenches (גם אם יש לכתוב בסטנדרטים ישנים יותר) משפר את יכולת הקריאה ומפחית את נפח הקוד.

תגית: Test Vectors

עבור עיצובים שמעבדים נתונים גדולים (למשל, מסננים תמונות או מעבדי חבילה), וקטורים לבדיקת קריאה מטקסט או קובץ בינארי הוא חיוני.חבילת VHDL של VHDL:14 מספקת LT:15 ו- (FLT:16 נהלים).

חיזוי וחיזוי

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

שיטות טובות ביותר עבור Testbenches VHDL

שיטות מבחן טוב לשלם ככל שהעיצוב גדל.ההנחיות הבאות עוזרות לשמור על Testbenches ועמידות הסתגלות.

שקיפות ו Reuse

לשבור את הסימון לתוך קבצים נפרדים: אחד עבור הדור DUT מיידיות ושעון / דור התחלה, אחר עבור הליכים משותפים, שליש עבור רצפי מבחן. השתמש חבילות כדי לשתף קבועים וסוגים.מודולריות זו מאפשרת שימוש מחדש הליכים על פני מספר רב של מבחנים.

האמנה

השתמש בהגדרה ברורה ועקבית:

  • (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • 18) עבור גנרטורים.
  • (ב) , « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «
  • (FLT:20) עבור קבוע ספציפי מבחן.

פרדוקס באמצעות Generics

לעבור DUT פרמטרים גנריים (למשל, רוחב נתונים, עומק FIFO) לישות Testbench באמצעות מפות גנריות.זה מאפשר את אותו מבחן כדי לאמת תצורה מרובות ללא שינויים בקוד.

« צ'ק עצמי ו- Zero Tolerance

כל מבחן צריך להיכשל באופן אוטומטי אם כל טענה נכשלת.שימוש ב- 21 שגיאות קטסטרופליות ו-FLT:22 על מנת שלא להתאים את עצמם, להימנע מסימולציות שמסתיימות עם הודעת "הצלחה" אם לא התרחשו כישלונות - כלומר, יש עקשנות.במקום זאת, יש את הבדיקה להדפיס במפורש "Testbench עבר" רק לאחר כל הבדיקות.

מסמכים והערות

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

שילוב של VHDL Testbenches עם כלי סימול מודרניים

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

סימולטור תסריטים

רוב כלי הסימולציה תומכים בתסריטי Tcl (ModelSim, Vivado, הריביירה-PRO) לכתוב תסריט מאגד שפיקח את כל הקבצים המקור בסדר הנכון, מציג ספריות סימולציה, ומפעיל את מבחן.

vlib work
vcom -2008 dut.vhd
vcom -2008 tb_fifo.vhd
vsim -voptargs=+acc work.tb_fifo
run -all

מצב באטץ' ותוקפנות

עבור בדיקות רגרסיה, סימולציות לרוץ במצב אצווה (ללא GUI) כדי לחסוך זמן.המבחן צריך להזין הודעת מעבר / מצבל ברור שניתן לסווג על ידי תסריט חיצוני. שקול באמצעות Makefils או Python כדי לתזזזזזז כמה פעמים.

גלימות דומפינג ו-Deug

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

אוסף Coverage

אפשרויות כיסוי קוד ניתן לכיסוי קוד בסימולטור.במודלSim, להשתמש ב-FLT:26 ולאחר מכן (FLT:27) כדי לכתוב דוחות כיסוי. Analyze קווים לא יציבים או נקודות כדי ליצור מקרים נוספים של מבחן.

מלכודות נפוצות וכיצד להימנע מהם

תזמון איפוס

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

המונחים: Synchronization

אותות נהיגה במחזור השעון הלא נכון הוא מקור תכוף של סימולציה לא מתאים.תמיד לנהוג קלטות מיד לאחר קצה השעון העולה (באמצעות FLT:28), לא במהלך הקצה.

כיסוי מוחלט

קל לבחון ניתוח רגיל, אך לדלג על תנאי שגיאה (למשל, FIFO המלא, גיבוי, קלט לא חוקי) מקרים של בדיקת תוכנית המכסים את כל המדינות והמעברים.

התעלמות תזמון

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

עיכובים קודרים

להימנע מ-FLT:30 אלא אם כן הוא מודל להתנהגות סינכרונית בלבד.עיכובים כאלה גורמים לבדיקות רגישות לשינויים בתדר השעון.

כלים ומשאבים חיצוניים

כדי להעמיק את המומחיות שלך, לחקור את המשאבים הבאים:

  • (FLT:0)UVM: Universal VHDL Verification Methodcioology andification Methodcioology) 1 - מסגרת אימות קוד פתוח VHDL המספקת הליכים לטיפול בממשקים משותפים כמו AXI, SPI ו-UART.
  • (FLT:0)OSVM: Open Source VHDL Verification MethodologyFLT:1 - מציע אקראיות, כיסוי וציון תכונות כדי להגדיל את תקן VHDL Testbenches.
  • (ב) ⁇ :0 ,VHDL-2008 מעצבי מדריך 1 (FLT:1) - התייחסות מקיפה לתכונות שפה שימושיות במיוחד ב- Testbenches.

מסקנה

בדיקת VHDL יעילה הן עמוד השדרה של FPGA אמין ו ASIC אימות. על ידי שליטה על רכיבי הליבה - הדור של גירוי, ניטור, בדיקה עצמית, וכיסוי - אתה יכול ליצור סביבות מבחן לתפוס באגים מוקדם ולהבטיח עיצובים לעמוד מול מפרט לפני חומרה נבנה. להשקיע בבנין מודולרי, פרמטרים, ו-documented בדיקות כי בקנה מידה עם מורכבות כמו אימות UVMVerationerationerationerationerationeration, ולהפחית את זה יכול בסופו של זמן נוסף לפתח מחדש של זמן רב יותר, אשר בסופו של דבר יותר, הוא בסופו של דבר יותר, שיפור חומרת הפרודוקטיביות, הוא פחות מנקה, הוא להגדיר מחדש של זמן, הוא יותר, הוא יותר, הוא יותר, 000.