المهام Dumpfile و Dumpvars
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 76 من 90.
أشكال الموجات هي التمثيل المرئي لـ تغيرات الإشارة بمرور الوقت. يعرض شكل الموجة كيف تتغير الإشارات (مثل clk، و a، و b، و out) أثناء المحاكاة. يوضح المحور الأفقي الوقت، ويوضح المحور الرأسي قيم الإشارة (0، 1، X، Z).
تُعد $dumpfile و $dumpvars مهام نظام تُستخدم لإنشاء ملف شكل موجي (ملف 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 | أي وحدة (module) يتم تفريغ الإشارات منها |
ملاحظة: التسلسل الهرمي يعني وجود وحدات (modules) داخل وحدات أخرى. يؤدي استخدام 0 إلى استخراج كافة الإشارات من الوحدة العلوية (top module) وكل وحدة بداخلها، بينما يستخرج 1 الإشارات من الوحدة العلوية فقط.
الاستخدام الشائع
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 | جميع الإشارات في الوحدة (module) وجميع الوحدات الفرعية |
1 | الإشارات في الوحدة المحددة فقط (وليس الوحدات الفرعية) |
التحدي
أضف بيانات $dumpfile و $dumpvars المفقودة لإنشاء ملف مخطط زمني (waveform).
ما يجب القيام به:
- أضف
$dumpfileلإنشاء ملف باسم"waveform.vcd" - أضف
$dumpvarsلتفريغ جميع الإشارات في وحدةtestbench
ورقة مرجعية
استخدم $dumpfile و $dumpvars داخل كتلة initial لإنشاء ملف شكل موجي VCD (Value Change Dump) لعرضه في أدوات مثل GTKWave:
initial begin
$dumpfile("dump.vcd"); // ينشئ ملف VCD
$dumpvars(0, testbench); // يستخرج جميع الإشارات في testbench والوحدات الفرعية
endمستويات $dumpvars(level, module_name):
0— جميع الإشارات في الوحدة و جميع الوحدات الفرعية1— الإشارات في الوحدة المحددة فقط (بدون الوحدات الفرعية)
جرّب بنفسك
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
// مهام: أضف $dumpfile لإنشاء "waveform.vcd"
// مهام: أضف $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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات14أساسيات الـ Testbench
ما هو الـ Testbenchإنشاء المحفزاتالمهام Display و Monitorالمهام Dumpfile و Dumpvarsاستخدام مهام النظامملخص - Testbench كامل3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة