יצירת אותות גירוי
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 74 מתוך 90.
Stimulus מתייחס לערכי הקלט שמחילים על התכנון שלך כדי לבדוק אם הוא פועל כראוי. על ידי שינוי הקלטים והתבוננות בפלטים, אפשר לוודא שהתכנון שלך מתנהג כמצופה.
חשוב על זה כמו על בדיקת מכונה: לוחצים על כפתורים שונים (גירויים) וצופים במה שקורה (פלטים). יצירת גירויים טובים היא חלק חיוני מכתיבת ספסל בדיקה.
לדוגמה, התבוננו בגירוי בסביבת הבדיקה הבאה:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// הגירוי מתחיל כאן
// מקרה בדיקה 1: שני הקלטים הם 0
a = 0; b = 0; #10;
// מקרה בדיקה 2: a=0, b=1
a = 0; b = 1; #10;
// מקרה בדיקה 3: a=1, b=0
a = 1; b = 0; #10;
// מקרה בדיקה 4: שני הקלטים הם 1
a = 1; b = 1; #10;
// הגירוי מסתיים כאן
$finish;
end
endmoduleכל גירוי מוחל, ואז ממתינים 10 יחידות זמן (#10) לפני הגירוי הבא. כך נותנים ל-DUT זמן להפיק פלט.
שיטות ליצירת STIMULUS
| שיטה | מתאים ביותר ל | דוגמה |
|---|---|---|
| השמות עוקבות | בדיקות פשוטות | a = 0; b = 0; #10; |
| לולאת For | בדיקת כל הצירופים | for (i = 0; i < 4; i++) |
| לולאת Repeat | דפוסים חוזרים | repeat (10) #5 clk = ~clk; |
| לולאת Forever | אותות רציפים | forever #5 clk = ~clk; |
שיטה 1: השמות עוקבות
הדרך הפשוטה ביותר ליצור גירוי. משייכים ערכים בזה אחר זה, עם השהיות.
initial begin
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
endשיטה 2: לולאת for
שימושית כשאתם רוצים לבדוק את כל צירופי הקלט האפשריים.
integer i;
initial begin
for (i = 0; i < 4; i = i + 1) begin
{a, b} = i;
#10;
end
$finish;
endזה בודק: 00, 01, 10, 11.
שיטה 3: לולאת repeat
שימושית לחזרה על אותו גירוי פעמים רבות.
initial begin
a = 0; b = 1;
repeat (10) begin
#10 a = ~a;
end
$finish;
endשיטה 4: לולאה אינסופית
שימושית לאותות מתמשכים כמו שעונים.
initial begin
clk = 0;
forever #5 clk = ~clk;
endכללים חשובים
| כלל | הסבר |
|---|---|
| השתמשו בהשהיות בין השמות של גירויים | #10 מאפשר ל-DUT זמן להגיב |
השתמשו ב-reg עבור אותות גירוי | כי הם משתנים לאורך זמן |
הוסיפו $finish בסוף | כדי לעצור את הסימולציה |
אתגר
ניתן לך מודול של שער OR. המשימה שלך היא להוסיף את ה־stimulus החסר ואת פקודות $display כדי להדפיס את התוצאות.
מה לעשות:
הוסף stimulus כדי לבדוק את כל ארבעת צירופי הקלט (00, 01, 10, 11):
- בכל שורה, הגדר את הערכים של
xושלy - הוסף
#10עבור השהיה - הוסף
$displayכדי להדפיס את התוצאה
ה־<strong>$display</strong> אמור להיראות כך:
$display("%d %d | %d", x, y, z);נסו בעצמכם
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$display("x y | z");
$display("---------");
// TODO: הוסף גירוי והצג את התוצאה עבור 0 0
// TODO: הוסף גירוי והצג את התוצאה עבור 0 1
// TODO: הוסף גירוי והצג את התוצאה עבור 1 0
// TODO: הוסף גירוי והצג את התוצאה עבור 1 1
$finish;
end
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים14יסודות ה־Testbench
מהו Testbenchיצירת אותות גירויהצגה וניטורDumpfile ו־Dumpvarsשימוש במשימות מערכתסיכום — Testbench מלא3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין