Dumpfile وDumpvars
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 76 من 90.
الأشكال الموجية هي تمثيل مرئي لتغيرات الإشارات بمرور الوقت. يوضح الشكل الموجي كيفية تغير الإشارات (مثل clk وa وb وout) أثناء المحاكاة. يعرض المحور الأفقي الوقت، ويعرض المحور الرأسي قيم الإشارات (0 و1 وX وZ).
إن $dumpfile و$dumpvars مهمتان من مهام النظام تُستخدمان لإنشاء ملف شكل موجي (ملف VCD) يمكنك عرضه في عارض أشكال موجية مثل GTKWave. يرمز VCD إلى تفريغ تغيّر القيم. وهو ملف يسجّل جميع تغيّرات الإشارات أثناء المحاكاة. يمكنك فتح هذا الملف في عارض أشكال موجية لرؤية الإشارات بصريًا.
$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أمثلة على مستويات تفريغ المتغيرات
| المستوى | ما يتم تفريغه |
|---|---|
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية14أساسيات Testbench
ما هو Testbenchإنشاء Stimulusالعرض والمراقبةDumpfile وDumpvarsاستخدام مهام النظاممراجعة - Testbench كامل3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت