Uyarıcı Oluşturma
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 74 / 90.
Stimulus, tasarımınızın doğru çalışıp çalışmadığını test etmek için 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: farklı düğmelere (uyarıcı) basar ve ne olduğunu (çıktıları) izlersin. İyi uyarıcılar oluşturmak, bir testbench yazmanın temel bir parçasıdır.
Örneğin, aşağıdaki testbench'teki uyarana bakın:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// STIMULUS 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;
// STIMULUS BURADA BİTİYOR
$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 Durum | Ö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ü | Kalıpları 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ı uyarıcıyı 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: Sonsuz Döngü
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 - Sonucu yazdırmak için
$displayekleyin
$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.
Temel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları14Testbench Temelleri
Testbench NedirUyarıcı OluşturmaGörüntüleme ve İzlemeDumpfile ve DumpvarsSystem Task'lerini KullanmaTekrar - Tam Testbench3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi