Menu
CoddyTech

العرض والمراقبة

جزء من قسم الأساسيات في رحلة 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 المفقودتين إلى منصة الاختبار هذه.

ما يجب فعله:

  1. أضف $display لطباعة عنوان: "Testing OR Gate"
  2. أضف $monitor لطباعة الوقت وx وy وz كلما تغيرت أي إشارة. التنسيق: "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 عبر الإنترنت