Creating Stimulus
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 74 / 90.
Stimulus, doğru çalışıp çalışmadığını test etmek için tasarımınıza uyguladığınız input değerlerini ifade eder. inputs değerlerini değiştirip çıkışları gözlemleyerek tasarımınızın beklendiği gibi davrandığını doğrulayabilirsiniz.
Bunu bir makineyi test etmek gibi düşün: farklı düğmelere (stimulus) basar ve ne olduğunu (çıktılar) izlersin. İyi bir stimulus oluşturmak, bir testbench yazmanın önemli bir parçasıdır.
Örneğin, aşağıdaki testbench içindeki stimulus'a bakın:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// STIMULUS BURADA BAŞLAR
// Test durumu 1: Her iki giriş de 0
a = 0; b = 0; #10;
// Test durumu 2: a=0, b=1
a = 0; b = 1; #10;
// Test durumu 3: a=1, b=0
a = 1; b = 0; #10;
// Test durumu 4: Her iki giriş de 1
a = 1; b = 1; #10;
// STIMULUS BURADA BİTER
$finish;
end
endmoduleHer uyarıcı uygulanır, ardından bir sonraki uyarıcıdan önce 10 zaman birimi (#10) bekleriz. Bu, DUT'ye bir çıktı üretmesi için zaman tanır.
stimulus Oluşturma Yöntemleri
| Yöntem | En Uygun Olduğu Alan | Örnek |
|---|---|---|
| Sıralı atamalar | Basit testler | a = 0; b = 0; #10; |
| For döngüsü | Tüm kombinasyonları test etme | for (i = 0; i < 4; i++) |
| Repeat döngüsü | Desenleri tekrarlama | repeat (10) #5 clk = ~clk; |
| Forever döngüsü | Sürekli sinyaller | forever #5 clk = ~clk; |
Yöntem 1: Sıralı Atamalar
Uyarıcı oluşturmanın en basit yolu. Gecikmelerle değerleri teker teker atarsın.
initial begin
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
endYöntem 2: For Döngüsü
Olası tüm giriş kombinasyonlarını test etmek istediğinde kullanışlıdır.
integer i;
initial begin
for (i = 0; i < 4; i = i + 1) begin
{a, b} = i;
#10;
end
$finish;
endBu, şunları test eder: 00, 01, 10, 11.
Yöntem 3: Repeat Döngüsü
Aynı stimulus'u birçok kez tekrarlamak için kullanışlıdır.
initial begin
a = 0; b = 1;
repeat (10) begin
#10 a = ~a;
end
$finish;
endYöntem 4: Forever Döngüsü
Saat sinyalleri gibi sürekli sinyaller için kullanışlıdır.
initial begin
clk = 0;
forever #5 clk = ~clk;
endÖnemli Kurallar
| Kural | Açıklama |
|---|---|
| stimulus atamaları arasında gecikmeler kullanın | #10 DUT'un yanıt vermesi için zaman tanır |
stimulus sinyalleri için reg kullanın | Zaman içinde değiştikleri için |
Sonuna $finish ekleyin | Simülasyonu durdurmak için |
Görev
Size bir OR kapısı modülü verilmiştir. Göreviniz, sonuçları yazdırmak için eksik stimulus ve $display ifadelerini eklemektir.
Yapılacaklar:
Dört giriş kombinasyonunun (00, 01, 10, 11) tümünü test etmek için stimulus ekleyin:
- Her satırda
xveydeğerlerini ayarlayın - Gecikme için
#10ekleyin $displaykullanarak sonucu yazdırın
$display şu şekilde görünmelidir:
$display("%d %d | %d", x, y, z);Kendin dene
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$display("x y | z");
$display("---------");
// TODO: 0 0 için stimulus ve display ekle
// TODO: 0 1 için stimulus ve display ekle
// TODO: 1 0 için stimulus ve display ekle
// TODO: 1 1 için stimulus ve display ekle
$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