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