Menu
CoddyTech

Menggunakan System Tasks

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 77 dari 90.

Tugas sistem adalah perintah bawaan di Verilog yang diawali dengan tanda dolar ($). Tugas ini menjalankan fungsi yang berguna, seperti mencetak pesan, mengakhiri simulasi, dan membuat file bentuk gelombang.

Kita sudah membahas $display, $monitor, $dumpfile, dan $dumpvars di pelajaran sebelumnya. Di pelajaran ini, kita akan melihat tugas sistem tambahan yang berguna dalam testbench.

Tugas Sistem Tambahan

Tugas SistemTujuan
$timeMengembalikan waktu simulasi saat ini
$finishMengakhiri simulasi
$stopMenjeda simulasi
$randomMenghasilkan angka acak

$time

Mengembalikan waktu simulasi saat ini. Berguna untuk melacak kapan peristiwa terjadi.

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

$finish

Mengakhiri simulasi. Selalu gunakan di akhir testbench.

$finish;

$stop

Menjeda simulasi. Simulasi dapat dilanjutkan dengan perintah simulator. Berguna untuk debug.

$stop;

$random

Menghasilkan angka acak. Berguna untuk membuat stimulus pengujian acak.

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

Contoh Menggunakan Beberapa Tugas Sistem

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

Tantangan

Tambahkan tugas sistem yang hilang ke testbench ini.

Yang harus dilakukan:

  1. Tambahkan $display untuk mencetak waktu saat ini di awal
  2. Tambahkan $display untuk mencetak waktu saat ini di akhir
  3. Tambahkan $finish untuk mengakhiri simulasi

Coba sendiri

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: Tambahkan $display yang menampilkan waktu saat ini di awal
    // 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;
    
    // TODO: Tambahkan $display yang menampilkan waktu saat ini di akhir
    // Format: "End time: %0t"
    
    
    // TODO: Tambahkan $finish
    
  end
endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online