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ı
inputvaluesuygulamak outputsdeğ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 Module | Testbench | |
|---|---|---|
| Amaç | Donanımı gerçekleştirir | Design module'ü test eder |
| ports var mı? | Evet (inputs ve outputs) | Hayır (kendi kendine yeterli) |
| Sentezlenebilir mi? | Evet | Hayı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
regdeğişen sinyaller için kullanılır (DUT girişleri)wireDUT'tan gelen sinyaller için kullanılır (çıkışlar)
- Test edilen modül DUT (Design Under Test) olarak adlandırılır
$finishsimülasyonu sonlandırır
İlerleyen derslerde uyaran oluşturmayı, sonuçları görüntülemeyi ve diğer testbench özelliklerini ele alacağız.
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:
avebgirişleri içinregbildirincçıkışı içinwirebildirinand_gatemodülünündutadı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
endmoduleBu 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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları14Testbench Temelleri
Testbench Nedir?Stimulus OluşturmaDisplay ve MonitorDumpfile ve DumpvarsSistem Görevlerini KullanmaÖzet - Tam Testbench3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı