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

المهام Display و Monitor

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

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

$display

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

الصيغة التركيبية (Syntax):

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

محددات التنسيق الشائعة (Common Format Specifiers)

المحدد (Specifier)المعنىمثال
%bBinary$display("%b", a);
%dDecimal$display("%d", count);
%hHexadecimal$display("%h", data);
%tTime$display("%t", $time);
%0tTime (بدون مسافات)$display("%0t", $time);
%sString$display("%s", "Hello");

قواعد مهمة

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

التحدي

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

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

  1. أضف $display لطباعة الترويسة header: "Testing OR Gate"
  2. أضف $monitor لطباعة time و x و y و z كلما تغيرت أي إشارة. التنسيق Format: "Time %0t: x=%b, y=%b, z=%b"
  3. أضف $display في النهاية end لطباعة "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اختبر نفسك

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

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