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

Using System Tasks

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

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

لقد تناولنا بالفعل $display و$monitor و$dumpfile و$dumpvars في الدروس السابقة. في هذا الدرس، سنلقي نظرة على مهام نظام إضافية مفيدة في testbench.

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

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

$time

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

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

$finish

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

$finish;

$stop

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

$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

التحدي

Add مهام النظام المفقودة إلى testbench هذا.

ما يجب فعله:

  1. Add $display لطباعة current time في البداية
  2. Add $display لطباعة current time في النهاية
  3. Add $finish لإنهاء simulation

جرّب بنفسك

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

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

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

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