Menu
Coddy logo textTech

What Is A Testbench

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

Bir testbench, başka bir module’ü test etmek için kullanılan özel bir Verilog module’üdür. Tasarımınıza inputs sağlar ve outputs değerlerinin 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ıza olanak tanır:

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

Testbench ve Tasarım Modülü

 Tasarım ModülüTestbench
AmaçDonanımı uygularTasarım modülünü test eder
port'ları var mı?Evet (inputs ve outputs)Hayır (kendi kendine yeterli)
Sentezlenebilir mi?EvetHayır (yalnızca simulation)

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 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 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

Temel Noktalar

  • Testbench'in portu yoktur
  • reg, değişen sinyaller için kullanılır (DUT'ye girdi olarak)
  • wire, DUT'den gelen sinyaller için kullanılır (çıktılar)
  • Test edilen module DUT (Design Under Test) olarak adlandırılır
  • $finish simulation'ı sonlandırır

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

challenge icon

Görev

Size bir AND geçidi modülü verilmiştir. Göreviniz, testbench'e eksik kısımları eklemektir.

Yapılacaklar:

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

  1. reg türünde a ve b girişlerini tanımlayın
  2. Çıkış c için wire tanımlayın
  3. and_gate modülünü dut adıyla örnekleyin ve portları bağlayın

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 bildir
  
  
  // Görev 2: c çıkışı için wire bildir
  

  // Görev 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

Kendi başına pratik yap: Online Verilog derleyicisi