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

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

التحدي

أضف بيانات $dumpfile و $dumpvars المفقودة لإنشاء ملف مخطط زمني (waveform).

ما يجب القيام به:

  1. أضف $dumpfile لإنشاء ملف باسم "waveform.vcd"
  2. أضف $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
quiz iconاختبر نفسك

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

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