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ı uygular | Tasarım modülünü test eder |
| port'ları var mı? | Evet (inputs ve outputs) | Hayır (kendi kendine yeterli) |
| Sentezlenebilir mi? | Evet | Hayı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
endmoduleTemel 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
$finishsimulation'ı sonlandırır
Sonraki derslerde stimulus oluşturmayı, sonuçları görüntülemeyi ve diğer testbench özelliklerini ele alacağız.
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:
regtüründeavebgirişlerini tanımlayın- Çıkış
ciçinwiretanımlayın and_gatemodülünüdutadı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
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
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi