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 girdileri (`inputs`) sağlar ve çıktıların (`outputs`) doğru olup olmadığını kontrol eder.

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

Bir module oluşturduğunuzda, doğru çalıştığından emin olmanız gerekir. Bir testbench şunları yapmanızı sağlar:

  • Module'ünüze farklı input values uygulamak
  • outputs değerlerini gözlemlemek
  • Çıkışların beklediğinizle eşleşip eşleşmediğini kontrol edin
  • Bunu manuel test yapmadan otomatik olarak gerçekleştirin

Testbench vs Design Module

 Design ModuleTestbench
AmaçDonanımı gerçekleştirirDesign module'ü test eder
ports var mı?Evet (inputs ve outputs)Hayır (kendi kendine yeterli)
Sentezlenebilir mi?EvetHayır (sadece simulation)

Basit Testbench Örneği

module testbench;              // Port yok!

  // Girdiler ve çıktılar, test ettiğimiz modülden (DUT) gelir.
  reg a, b;                    // girdiler için reg
  wire c;                      // çıktı için wire
  

  // Bu bir modül örneklendirmesidir — and_gate modülünün bir kopyasını oluşturur ve ona dut adını verir
  and_gate dut (               // DUT'u örneklendir
    .a(a),
    .b(b),
    .c(c)
  );

  // Bu, test edilen modülün girdilerine 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

Önemli Noktalar

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

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

challenge icon

Görev

Size bir AND kapısı modülü verilmiştir. Göreviniz testbench'indeki eksik parçaları eklemektir.

Yapılacaklar:

Testbench'e aşağıdaki parçaları ekleyin:

  1. a ve b girişleri için reg bildirin
  2. c çıkışı için wire bildirin
  3. and_gate modülünün dut adıyla örneğini oluşturun (instantiate) ve portları bağlayın

Kendin dene

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

module testbench;
  
  // Task 1: a ve b girişleri için reg tanımla
  
  
  // Task 2: c çıkışı için wire tanımla
  

  // Task 3: and_gate'i dut adıyla örnekle
  // .a(a), .b(b), .c(c) bağla


  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