Menu
Coddy logo textTech

Testbench Nedir?

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

Bir testbench, başka bir modülü test etmek için kullanılan özel bir Verilog modülüdür. Tasarımınıza girişler sağlar ve çıktıların doğru olup olmadığını kontrol eder.

Neden Bir Testbench'e İhtiyacımız Var?

Bir modül oluşturduğunuzda, onun doğru çalıştığından emin olmanız gerekir. Bir testbench şunları yapmanıza olanak tanır:

  • Modülünüze farklı giriş değerleri uygulamak
  • Çıkışları gözlemlemek
  • Çıktıların beklediğinizle eşleşip eşleşmediğini kontrol edin
  • Bunu manuel test yapmadan otomatik olarak yapın

Testbench vs Tasarım Modülü

 Tasarım ModülüTestbench
AmaçDonanımı uygularTasarım modülünü test eder
Portları var mı?Evet (girişler ve çıkışlar)Hayır (kendi kendine yeten)
Sentezlenebilir mi?EvetHayır (yalnızca simülasyon)

Basit Testbench Örneği

module testbench;              // Port yok!

  // Girişler ve çıkışlar test ettiğimiz modülden (DUT) gelir.
  reg a, b;                    // girişler için reg
  wire c;                      // çıkış için wire
  

  // Bu modül örneklemesidir (instantiation) — and_gate modülünün bir kopyasını oluşturur ve onu dut olarak adlandırır
  and_gate dut (               // DUT'u örnekle
    .a(a),
    .b(b),
    .c(c)
  );

  // Bu, test edilen modülün girişlerine test değerleri uygulayan bir initial bloğudur.
  initial begin                // Test değerlerini uygula
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

Anahtar Noktalar

  • Testbench'in hiçbir portu yoktur
  • reg değişen sinyaller (DUT girişleri) için kullanılır
  • wire DUT'tan gelen sinyaller (çıkışlar) için kullanılır
  • Test edilen modüle DUT (Design Under Test) denir
  • $finish simülasyonu sonlandırır

İlerleyen derslerde stimulus oluşturma, sonuçları görüntüleme ve diğer testbench özelliklerini ele alacağız.

challenge icon

Görev

Size bir AND kapısı modülü verilmiştir. Göreviniz, testbench'ine eksik kısımları eklemektir.

Neler yapılmalı:

Testbench'e aşağıdaki kısımları ekleyin:

  1. a ve b girişleri için reg tanımlayın
  2. c çıkışı için wire tanımlayın
  3. and_gate modülünü dut ismiyle örneklendirin ve portları bağlayın

Kopya kağıdı

Bir testbench, başka bir modülü (DUT - Design Under Test / Test Edilen Tasarım) test etmek için kullanılan bir Verilog modülüdür. Portu yoktur ve sadece simülasyon amaçlıdır.

module testbench;              // Port yok!

  reg a, b;                    // girişler için reg (değişen sinyaller)
  wire c;                      // DUT çıkışları için wire

  and_gate dut (               // DUT'ı örneklendir (Instantiate)
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin                // Test değerlerini uygula
    a = 0; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;                   // Simülasyonu bitir
  end
endmodule
  • initial bloklarında sürülen sinyaller (DUT girişleri) için reg kullanın
  • DUT'tan gelen sinyaller (çıkışlar) için wire kullanın
  • $finish simülasyonu sonlandırır

Kendin dene

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  
  // Görev 1: a ve b girişleri için reg tanımlayın
  
  
  // Görev 2: c çıkışı için wire tanımlayın
  

  // Görev 3: and_gate modülünü dut adıyla örnekleyin
  // .a(a), .b(b), .c(c) bağlantılarını yapın


  initial begin
    a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
    $finish;
  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