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

Display And Monitor

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

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

$display

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

الصيغة:

$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
متى تتم الطباعةمرة واحدة عند التنفيذفي كل مرة يتغير فيها متغير
عدد المراتبعدد المرات التي تستدعيه فيهاباستمرار (حتى يتغير)
يُستخدم من أجلheader، test messagetrack الإشارات المتغيرة

محدِّدات Format الشائعة

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

القواعد المهمة

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

التحدي

أضف عبارتي $display و$monitor المفقودتين إلى testbench هذا.

ما يجب فعله:

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

جرّب بنفسك

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

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

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

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