Stimulus Oluşturma
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 74 / 90.
Stimulus (uyarıcı), tasarımınızın doğru çalışıp çalışmadığını test etmek için ona uyguladığınız girdi değerlerini ifade eder. Girdileri değiştirip çıktıları gözlemleyerek, tasarımınızın beklendiği gibi davrandığını doğrulayabilirsiniz.
Bunu bir makineyi test etmek gibi düşünün: farklı düğmelere basarsınız (stimulus) ve ne olduğunu izlersiniz (outputs). İyi bir stimulus oluşturmak, bir testbench yazmanın temel bir parçasıdır.
Örneğin, aşağıdaki testbench içindeki uyarana (stimulus) bakın:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// STİMÜLUS BURADA BAŞLIYOR
// 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;
// STİMÜLUS BURADA BİTİYOR
$finish;
end
endmoduleHer bir stimulus uygulanır, ardından bir sonraki stimulus'tan önce 10 zaman birimi (#10) beklenir. Bu işlem, DUT'a bir output üretmesi için zaman tanır.
Uyarıcı (Stimulus) Oluşturma Yöntemleri
| Yöntem | En İyi Kullanım 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 yineleme | repeat (10) #5 clk = ~clk; |
| Forever döngüsü | Sürekli sinyaller | forever #5 clk = ~clk; |
Yöntem 1: Sıralı Atamalar (Sequential Assignments)
Uyarım (stimulus) oluşturmanın en basit yolu. Gecikmelerle değerleri teker teker atarsınız.
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ü
Tüm olası girdi kombinasyonlarını test etmek istediğinizde 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 Loop
Aynı stimulus'u birçok kez yinelemek 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ü
Saatler 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'ın yanıt vermesi için zaman tanır |
stimulus sinyalleri için reg kullanın | Zaman içinde değiştiklerinden dolayı |
En sona $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 tümünü (00, 01, 10, 11) test etmek için stimulus ekleyin:
- Her satırda
xveydeğerlerini ayarlayın - Gecikme için
#10ekleyin - Sonucu yazdırmak için
$displayekleyin
$display ifadesi ş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
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ığı