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

المهام 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)
challenge icon

التحدي

أضف عبارات $dumpfile و $dumpvars المفقودة لإنشاء ملف waveform.

ما يجب فعله:

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

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

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