Menu
Coddy logo textTech

בדיקות בארבעה מצבים

חלק מהיחידה תכנון RTL ואימות במסלול ה-Verilog של Coddy. שיעור 26 מתוך 38.

על סביבת בדיקה להתייחס לערכים לא ידועים במכוון. השוואה רגילה עשויה להחזיר X, מה שעלול להסתיר כישלון בתנאי if. השוואת case ושוויון ואי־שוויון, === ו־!==, משווים את כל ארבעת הערכים כפשוטם ומחזירים ערך בוליאני ידוע. פעולת XOR מצמצמת ולאחריה השוואת case ל־X יכולה לזהות ביטים לא ידועים. השתמשו בהם כבדיקות סימולציה, לא כמודל של חומרה שמזהה ערכי X פיזיים.

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

if(actual !== expected) errors = errors + 1;

הבדל שכולל X או Z נספר במקום להיעלם לתוך תנאי לא ידוע.

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

challenge icon

אתגר

בינוני

זהו בודק שמיועד לסימולציה בלבד, ולא לוגיקת נתיב נתונים שניתנת לסינתזה. יש לקבוע את mismatch כאשר actual ו-expected שונים בהשוואה בארבעה מצבים. אם לשניהם יש X או Z באותם מיקומים, הם נחשבים שווים. התוצאה חייבת להיות תמיד 0 או 1 ידועים. עמודות הפלט: mismatch. כל ערכי הגירוי הם ערכים בינאריים ידועים.

יש להשלים את design.v ולשמור על שמות המודולים והיציאות שלו. testbench.v הנעול מספק שינויים בקלט ומדפיס את הפלטים לאחר שהתייצבו. הוא בוחר תרחיש באמצעות ארגומנט של הסימולטור, כגון +CASE=1; אין צורך בקלט סטנדרטי. אין להוסיף להדפסות, השהיות או סיום סימולציה לתכנון. הפלט הצפוי הוא שורה אחת של ערכים עשרוניים לכל תצפית, מופרדים ברווח יחיד ומסתיימים בשורה חדשה.

נסו בעצמכם

module dut (input [3:0] actual, input [3:0] expected, output mismatch);
    // החליפו את מציין המקום הזה בתכנון שלכם.
    assign mismatch = 0;
endmodule
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנון RTL ואימות

תרגלו בעצמכם: קומפיילר Verilog אונליין