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

المهام Display و Monitor

جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 75 من 90.

تُعد $display و $monitor مهام نظام تُستخدم لطباعة المعلومات من المحاكاة الخاصة بك. فهي تساعدك على رؤية ما يحدث داخل تصميمك.

$display

يقوم $display بطباعة رسالة مرة واحدة في لحظة تنفيذه.

الصيغة:

$display("message", variables);

مثال:

initial begin
  $display("Simulation started");
  #10;
  $display("Time 10");
  #10;
  $display("Time 20");
end

المخرجات:

Simulation started
Time 10
Time 20

$monitor

يقوم $monitor بطباعة رسالة تلقائياً كلما تغيرت أي من متغيراته.

الصيغة البرمجية:

$monitor("message", variables);

مثال:

initial begin
  a = 0; b = 0;
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
  #10 a = 0;
end

المخرجات:

Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1

$display مقابل $monitor

 $display$monitor
وقت الطباعةمرة واحدة عند التنفيذفي كل مرة يتغير فيها متغير
عدد المراتبعدد المرات التي تستدعيه فيهابشكل مستمر (حتى يتم تغييره)
يستخدم لـالعناوين، رسائل الاختبارتتبع الإشارات المتغيرة

محددات التنسيق الشائعة

المحددالمعنىمثال
%bثنائي$display("%b", a);
%dعشري$display("%d", count);
%hستة عشري$display("%h", data);
%tالوقت$display("%t", $time);
%0tالوقت (بدون مسافات)$display("%0t", $time);
%sسلسلة نصية$display("%s", "Hello");

قواعد هامة

القاعدةالشرح
$display يطبع مرة واحدةجيد للعناوين والنتائج النهائية
$monitor يطبع عند التغييرجيد لمراقبة الإشارات
$monitor واحد فقط يكون نشطاًالأخير يلغي ما قبله
استخدم $finish للتوقفوإلا فقد تستمر المحاكاة إلى الأبد
challenge icon

التحدي

أضف عبارات $display و $monitor المفقودة إلى منصة الاختبار (testbench) هذه.

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

  1. أضف $display لطباعة ترويسة: "Testing OR Gate"
  2. أضف $monitor لطباعة الوقت، و x، و y، و z كلما تغيرت أي إشارة. التنسيق: "Time %0t: x=%b, y=%b, z=%b"
  3. أضف $display في النهاية لطباعة "Test complete"

ورقة مرجعية

يطبع $display مرة واحدة عند التنفيذ؛ بينما يطبع $monitor تلقائياً كلما تغير أي من متغيراته.

$display("message", variables);
$monitor("message", variables);

مثال:

initial begin
  $display("Simulation started");
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
end

محددات التنسيق الشائعة:

  • %b — ثنائي (Binary)
  • %d — عشري (Decimal)
  • %h — ست عشري (Hexadecimal)
  • %t / %0t — الوقت (مع/بدون حشو)
  • %s — سلسلة نصية (String)

القواعد الأساسية:

  • يكون $monitor واحد فقط نشطاً في المرة الواحدة — الأخير يلغي ما قبله.
  • استخدم $finish لإيقاف المحاكاة.

جرّب بنفسك

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
    // TODO: أضف $display لعنوان "Testing OR Gate"
    
    
    // TODO: أضف $monitor لتتبع الوقت، x، y، z
    // التنسيق: "Time %0t: x=%b, y=%b, z=%b"
    
    
    // تطبيق المحفزات
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    // TODO: أضف $display لرسالة "Test complete"
    
    
    $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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