Dumpfile And Dumpvars
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 76 من 90.
تمثّل waveform تمثيلًا مرئيًا لـ تغيّرات signals بمرور الوقت. وتعرض waveform كيفية تغيّر signals (مثل clk وa وb وout) أثناء المحاكاة. يوضّح المحور الأفقي الوقت، بينما يوضّح المحور الرأسي قيم الإشارات (0 و1 وX وZ).
$dumpfile و$dumpvars هما مهمتا نظام تُستخدمان لإنشاء ملف waveform file (ملف VCD) يمكنك عرضه في عارض للموجات مثل GTKWave. يرمز VCD إلى تفريغ تغيّر القيم (Value Change Dump). وهو ملف يسجّل جميع تغيّرات الإشارات أثناء المحاكاة. يمكنك فتح هذا الملف في عارض للموجات لرؤية الإشارات بصريًا.
$dumpfile
يحدد $dumpfile اسم ملف waveform المراد إنشاؤه.
الصيغة:
$dumpfile("filename.vcd");مثال:
$dumpfile("my_waveform.vcd");ينشئ هذا ملفًا يسمى my_waveform.vcd.
$dumpvars
يحدد $dumpvars الإشارات التي سيتم تسجيلها في ملف waveform.
الصياغة:
$dumpvars(level, module_name);| المعامل | المعنى |
|---|---|
level | عدد مستويات التسلسل الهرمي المطلوب تفريغها (0 = جميع المستويات) |
module_name | الوحدة التي سيتم تفريغ الإشارات منها |
ملاحظة: التسلسل الهرمي يعني وجود وحدات modules داخل وحدات أخرى. يؤدي استخدام 0 إلى تفريغ جميع signals من الوحدة العلوية وكل وحدة module داخلها، بينما يؤدي استخدام 1 إلى تفريغ signals من الوحدة العلوية فقط.
الاستخدام الشائع
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
end$dumpfile("dump.vcd")→ ينشئ ملفًا باسمdump.vcd$dumpvars(0, testbench)→ يُفرغ جميع الإشارات في الوحدة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 | الإشارات في الوحدة المحددة فقط (وليس الوحدات الفرعية) |
التحدي
Add عبارات $dumpfile و$dumpvars المفقودة لـ create ملف waveform.
ما يجب فعله:
- Add
$dumpfileلـ create ملف باسمwaveform.vcd - Add
$dumpvarsلتفريغ all signals فيtestbenchmodule
جرّب بنفسك
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت