Dumpfile ו־Dumpvars
חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 76 מתוך 90.
צורות גל הן ייצוג חזותי של שינויים באותות לאורך זמן. צורת גל מציגה כיצד אותות (כמו clk, a, b, out) משתנים במהלך סימולציה. הציר האופקי מציג זמן, והציר האנכי מציג ערכי אותות (0, 1, X, Z).
$dumpfile ו־$dumpvars הן משימות מערכת המשמשות ליצירת קובץ צורת גל (קובץ VCD) שאפשר להציג בתוכנת צפייה בצורות גל כמו GTKWave. VCD הם ראשי תיבות של Value Change Dump. זהו קובץ שמתעד את כל השינויים באותות במהלך הסימולציה. אפשר לפתוח את הקובץ הזה בתוכנת צפייה בצורות גל כדי לראות את האותות באופן חזותי.
$dumpfile
$dumpfile מציין את השם של קובץ צורת הגל שיש ליצור.
תחביר:
$dumpfile("filename.vcd");דוגמה:
$dumpfile("my_waveform.vcd");פעולה זו יוצרת קובץ בשם my_waveform.vcd.
$dumpvars
$dumpvars מציין אילו אותות לתעד בקובץ צורת הגל.
תחביר:
$dumpvars(level, module_name);| פרמטר | משמעות |
|---|---|
level | כמה רמות היררכיה לייצא (0 = כל הרמות) |
module_name | מאיזה מודול לייצא אותות |
הערה: היררכיה פירושה מודולים בתוך מודולים אחרים. שימוש ב-0 שומר את כל האותות מהמודול העליון ומכל מודול שבתוכו, בעוד 1 שומר רק את האותות מהמודול העליון.
שימוש נפוץ
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
end$dumpfile("dump.vcd")→ יוצר קובץ בשםdump.vcd$dumpvars(0, testbench)→ שומר את כל האותות במודולtestbenchובכל תת-המודולים
דוגמה עם ספסל בדיקה
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
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
$display("Creating waveform file...");
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
$finish;
end
endmoduleדוגמאות לרמות Dumpvars
| רמה | מה נכלל בקובץ |
|---|---|
0 | כל האותות במודול ובכל תתי-המודולים |
1 | רק האותות במודול שצוין (לא בתתי-המודולים) |
אתגר
הוסיפו את ההוראות החסרות $dumpfile ו-$dumpvars כדי ליצור קובץ של צורת גל.
מה צריך לעשות:
- הוסיפו
$dumpfileכדי ליצור קובץ בשםwaveform.vcd - הוסיפו
$dumpvarsכדי לשמור את כל האותות במודולtestbench
נסו בעצמכם
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: הוסיפו את $dumpfile כדי ליצור את "waveform.vcd"
// TODO: הוסיפו את $dumpvars כדי לשמור את כל האותות ב-testbench
// רמז: $dumpvars(0, testbench);
if ($test$plusargs("vcd")) begin
$display("VCD file created successfully");
end
$display("Simulation running...");
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$display("Simulation complete. Open waveform.vcd");
$finish;
end
endmoduleהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
5אופרטורים חלק 2
אופרטורים לוגייםאופרטורי צמצוםאופרטורי הזזהאופרטור שרשוראופרטור תנאיסיכום – אתגר האופרטורים14יסודות ה־Testbench
מהו Testbenchיצירת אותות גירויהצגה וניטורDumpfile ו־Dumpvarsשימוש במשימות מערכתסיכום — Testbench מלא3שיטת המספרים
ייצוג בינארימספרים בעלי גודל מוגדרמספרים ללא גודל מוגדרמספרים שלילייםהערכים המיוחדים X ו־Zסיכום – תבניות מספרים6מודולים
מבנה מודוליציאות קלט ופלטיציאות קלט-פלטיצירת מופע של מודולמיפוי יציאות לפי שםמיפוי יציאות לפי סדרסיכום – בניית מודולתרגלו בעצמכם: קומפיילר Verilog אונליין