Menu
Coddy logo textTech

Sistem Görevlerini Kullanma

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 77 / 90.

Sistem görevleri, Verilog'da dolar işareti ($) ile başlayan yerleşik komutlardır. Mesaj yazdırma, simülasyonu sonlandırma ve dalga formu dosyaları oluşturma gibi faydalı işlevler gerçekleştirirler.

Önceki derslerde $display, $monitor, $dumpfile ve $dumpvars konularını zaten işlemiştik. Bu derste, testbench'lerde yararlı olan ek sistem görevlerine bakacağız.

Ek Sistem Görevleri

Sistem GöreviAmaç
$timeMevcut simülasyon süresini döndürür
$finishSimülasyonu sonlandırır
$stopSimülasyonu duraklatır
$randomRastgele sayı üretir

$time

Mevcut simülasyon süresini döndürür. Olayların ne zaman gerçekleştiğini takip etmek için kullanışlıdır.

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

$finish

Simülasyonu sonlandırır. Her zaman testbench'inizin sonunda kullanın.

$finish;

$stop

Simülasyonu duraklatır. Bir simülatör komutuyla devam ettirilebilir. Hata ayıklama için kullanışlıdır.

$stop;

$random

Rastgele bir sayı üretir. Rastgele test uyarıcıları oluşturmak için kullanışlıdır.

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

Birden Fazla Sistem Görevi Kullanan Örnek

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

Görev

Bu testbench'e eksik sistem görevlerini ekleyin.

Ne yapmalı:

  1. Başlangıçta geçerli zamanı yazdırmak için $display ekleyin
  2. Sonda geçerli zamanı yazdırmak için $display ekleyin
  3. Simülasyonu sonlandırmak için $finish ekleyin

Kopya kağıdı

Verilog'daki sistem görevleri $ ile başlar ve simülasyon yardımcı programlarını yürütür:

Sistem GöreviAmaç
$timeMevcut simülasyon süresini döndürür
$finishSimülasyonu bitirir
$stopSimülasyonu duraklatır
$randomRastgele sayı üretir
$display("Time: %0t", $time); // mevcut süreyi yazdır
$finish;                       // simülasyonu bitir
$stop;                         // simülasyonu duraklat

reg [7:0] rand_value;
rand_value = $random;          // rastgele sayı ata

Kendin dene

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
    // YAPILACAK: Başlangıçta geçerli zamanı gösteren $display ekleyin
    // Format: "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;
    
    // YAPILACAK: Bitişte geçerli zamanı gösteren $display ekleyin
    // Format: "End time: %0t"
    
    
    // YAPILACAK: $finish ekleyin
    
  end
endmodule
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler