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

استخدام مهام النظام

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

مهام النظام هي أوامر مدمجة في Verilog تبدأ بعلامة الدولار ($). وهي تؤدي وظائف مفيدة مثل طباعة الرسائل، وإنهاء المحاكاة، وإنشاء ملفات شكل الموجة (waveform).

لقد قمنا بالفعل بتغطية $display و $monitor و $dumpfile و $dumpvars في الدروس السابقة. في هذا الدرس، سنلقي نظرة على مهام نظام إضافية مفيدة في منصات الاختبار (testbenches).

مهام النظام الإضافية

مهمة النظامالغرض
$timeإرجاع وقت المحاكاة الحالي
$finishإنهاء المحاكاة
$stopإيقاف المحاكاة مؤقتاً
$randomتوليد رقم عشوائي

$time

يعيد وقت المحاكاة الحالي. مفيد لتتبع وقت حدوث الأحداث.

$display("Current time is %0t", $time);

$finish

ينهي المحاكاة. استخدمه دائمًا في نهاية منصة الاختبار (testbench) الخاصة بك.

$finish;

$stop

يوقف المحاكاة مؤقتاً. يمكن استئنافها باستخدام أمر محاكاة. مفيد لتصحيح الأخطاء.

$stop;

$random

يولد رقماً عشوائياً. مفيد لإنشاء محفزات اختبار عشوائية.

reg [7:0] rand_value;
rand_value = $random;

مثال على استخدام مهام نظام متعددة

module system_tasks_demo;
  reg [7:0] data;
  integer i;
  
  initial begin
    $display("Simulation started at time %0t", $time);
    
    for (i = 0; i < 5; i = i + 1) begin
      data = $random;
      $display("Random value %d: %b", i, data);
    end
    
    $stop;
    #10 $display("Resumed at time %0t", $time);
    
    $display("Simulation finished at time %0t", $time);
    $finish;
  end
endmodule
challenge icon

التحدي

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

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

  1. أضف $display لطباعة الوقت الحالي في البداية
  2. أضف $display لطباعة الوقت الحالي في النهاية
  3. أضف $finish لإنهاء المحاكاة

ورقة مرجعية

تبدأ مهام النظام (System tasks) في Verilog بـ $ وتقوم بوظائف محاكاة مساعدة:

مهمة النظامالغرض
$timeإرجاع وقت المحاكاة الحالي
$finishإنهاء المحاكاة
$stopإيقاف المحاكاة مؤقتاً
$randomتوليد رقم عشوائي
$display("Time: %0t", $time); // طباعة الوقت الحالي
$finish;                       // إنهاء المحاكاة
$stop;                         // إيقاف المحاكاة مؤقتاً

reg [7:0] rand_value;
rand_value = $random;          // تعيين رقم عشوائي

جرّب بنفسك

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: أضف $display مع الوقت الحالي في البداية
    // التنسيق: "Start time: %0t"
    
    
    $monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    // TODO: أضف $display مع الوقت الحالي في النهاية
    // التنسيق: "End time: %0t"
    
    
    // TODO: أضف $finish
    
  end
endmodule
quiz iconاختبر نفسك

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

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