Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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الإشارات في الوحدة المحددة فقط (وليس الوحدات الفرعية)
challenge icon

التحدي

Add عبارات $dumpfile و$dumpvars المفقودة لـ create ملف waveform.

ما يجب فعله:

  1. Add $dumpfile لـ create ملف باسم waveform.vcd
  2. Add $dumpvars لتفريغ all signals في testbench module

جرّب بنفسك

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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: مترجم Verilog عبر الإنترنت