Menu
Coddy logo textTech

System Task'lerini Kullanma

Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 77 / 90.

Sistem görevleri, dolar işaretiyle ($) başlayan Verilog içindeki yerleşik komutlardır. Mesaj yazdırma, benzetimi sonlandırma ve dalga biçimi dosyaları oluşturma gibi yararlı işlevleri yerine getirirler.

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

Ek Sistem Görevleri

Sistem GöreviAmaç
$timeGeçerli simülasyon zamanını döndürür
$finishSimülasyonu sonlandırır
$stopSimülasyonu duraklatır
$randomRastgele sayı üretir

$time

Geçerli simülasyon zamanını döndürür. Olayların ne zaman gerçekleştiğini izlemek için kullanışlıdır.

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

$finish

Simülasyonu sonlandırır. Testbench'inizin sonunda her zaman kullanın.

$finish;

$stop

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

$stop;

$random

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

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

Birden Fazla Sistem Görevi Kullanarak Ö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 ekle.

Yapılacaklar:

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

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
    // TODO: Başlangıçta mevcut zaman ile $display ekle
    // Biçim: "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: Sonda mevcut zaman ile $display ekle
    // Biçim: "End time: %0t"
    
    
    // TODO: $finish ekle
    
  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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi