Menu
CoddyTech

Membuat Stimulus

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

Stimulus merujuk pada nilai input yang kamu terapkan pada desainmu untuk menguji apakah desain tersebut berfungsi dengan benar. Dengan mengubah input dan mengamati output, kamu dapat memastikan bahwa desainmu berperilaku sesuai harapan.

Anggap saja seperti menguji mesin: kamu menekan tombol yang berbeda (rangsangan) lalu mengamati apa yang terjadi (output). Membuat rangsangan yang baik adalah bagian penting dalam menulis testbench.

Sebagai contoh, lihat stimulus pada testbench berikut:

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // STIMULUS DIMULAI DI SINI
    
    // Kasus uji 1: Kedua input bernilai 0
    a = 0; b = 0; #10;
    
    // Kasus uji 2: a=0, b=1
    a = 0; b = 1; #10;
    
    // Kasus uji 3: a=1, b=0
    a = 1; b = 0; #10;
    
    // Kasus uji 4: Kedua input bernilai 1
    a = 1; b = 1; #10;

    // STIMULUS BERAKHIR DI SINI
    
    $finish;
  end
endmodule

Setiap STIMULUS diterapkan, lalu kita menunggu 10 satuan waktu (#10) sebelum stimulus berikutnya. Ini memberi DUT waktu untuk menghasilkan output.

Metode untuk Membuat Stimulus

MetodeCocok untukContoh
Penugasan berurutanPengujian sederhanaa = 0; b = 0; #10;
For loopMenguji semua kombinasifor (i = 0; i < 4; i++)
Repeat loopMengulangi polarepeat (10) #5 clk = ~clk;
Forever loopSinyal berkelanjutanforever #5 clk = ~clk;

Metode 1: Penugasan Berurutan

Cara paling sederhana untuk membuat STIMULUS. Kamu menetapkan nilai satu per satu dengan jeda.

initial begin
  a = 0; b = 0; #10;
  a = 0; b = 1; #10;
  a = 1; b = 0; #10;
  a = 1; b = 1; #10;
  $finish;
end

Cara 2: for loop

Berguna saat kamu ingin menguji semua kombinasi input yang mungkin.

integer i;

initial begin
  for (i = 0; i < 4; i = i + 1) begin
    {a, b} = i;
    #10;
  end
  $finish;
end

Ini menguji: 00, 01, 10, 11.

Method 3: Perulangan repeat

Berguna untuk mengulang stimulus yang sama berkali-kali.

initial begin
  a = 0; b = 1;
  repeat (10) begin
    #10 a = ~a;
  end
  $finish;
end

Metode 4: Loop forever

Berguna untuk sinyal yang terus-menerus, seperti jam.

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Aturan Penting

AturanPenjelasan
Gunakan jeda di antara penetapan stimulus#10 memberi waktu bagi DUT untuk merespons
Gunakan reg untuk sinyal stimulusKarena sinyal tersebut berubah seiring waktu
Tambahkan $finish di akhirUntuk menghentikan simulasi
challenge icon

Tantangan

Kamu diberi modul gerbang OR. Tugasmu adalah menambahkan stimulus dan pernyataan $display yang belum ada untuk mencetak hasilnya.

Yang harus dilakukan:

Tambahkan stimulus untuk menguji keempat kombinasi input (00, 01, 10, 11):

  1. Pada setiap baris, tetapkan nilai untuk x dan y
  2. Tambahkan #10 untuk jeda
  3. Tambahkan $display untuk mencetak hasilnya

$display harus terlihat seperti ini:

$display("%d %d | %d", x, y, z);

Coba sendiri

module or_gate (
  input x,
  input y,
  output z
);
  assign z = x | y;
endmodule

module testbench;
  reg x, y;
  wire z;
  
  or_gate dut (
    .x(x),
    .y(y),
    .z(z)
  );

  initial begin
    $display("x y | z");
    $display("---------");
    
    // TODO: Tambahkan stimulus dan tampilan untuk 0 0
    
    // TODO: Tambahkan stimulus dan tampilan untuk 0 1
    
    // TODO: Tambahkan stimulus dan tampilan untuk 1 0
    
    // TODO: Tambahkan stimulus dan tampilan untuk 1 1
    
    $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