יצירת אותות גירוי
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 74 מתוך 90.
גירוי מתייחס לערכי הקלט שמחילים על התכנון שלך כדי לבדוק אם הוא פועל כראוי. על ידי שינוי הקלטים והתבוננות בפלטים, אפשר לוודא שהתכנון שלך מתנהג כמצופה.
חשוב על זה כמו על בדיקת מכונה: לוחצים על כפתורים שונים (STIMULUS) ובודקים מה קורה (פלטים). יצירת גירויים טובים היא חלק חיוני מכתיבת testbench.
לדוגמה, הסתכלו על הגירוי בספסל הבדיקה הבא:
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 זמן להפיק פלט.
שיטות ליצירת גירוי
| שיטה | הכי מתאים ל | דוגמה |
|---|---|---|
| השמות עוקבות | בדיקות פשוטות | 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. המשימה שלך היא להוסיף את הגירוי החסר ואת פקודות $display כדי להדפיס את התוצאות.
מה צריך לעשות:
הוסף גירוי לבדיקת כל ארבעת צירופי הקלט (00, 01, 10, 11):
- בכל שורה, הגדר את הערכים של
xושלy - הוסף
#10לצורך השהיה - הוסף
$displayכדי להדפיס את התוצאה
הפקודה $display צריכה להיראות כך:
$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 אונליין