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 tasarımınıza uyguladığınız giriş değerlerini ifade eder. Girişleri değiştirip çıkışları gözlemleyerek tasarımınızın beklendiği gibi davranıp davranmadığını doğrulayabilirsiniz.
Bunu bir makineyi test etmek gibi düşün: farklı düğmelere (uyaran) basar ve ne olduğunu (çıktıları) gözlemlersin. İyi uyaranlar oluşturmak, bir testbench yazmanın önemli bir parçasıdır.
Örneğin, aşağıdaki test tezgâhındaki uyarıcıya bakın:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// UYARIM 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;
// UYARIM BURADA BİTİYOR
$finish;
end
endmoduleHer STIMULUS uygulanır, ardından bir sonraki uyaranı uygulamadan önce 10 zaman birimi (#10) bekleriz. Bu, DUT'ye çıktı üretmesi için zaman tanır.
Uyarıcı 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
Stimulus oluşturmanın en basit yolu. Değerleri gecikmelerle 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 girdi 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 şu değerleri test eder: 00, 01, 10, 11.
Yöntem 3: Repeat Döngüsü
Aynı uyaranı 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ü
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 |
|---|---|
| Uyarıcı atamaları arasında gecikmeler kullanın | #10, DUT'un yanıt vermesi için zaman tanır |
Uyarıcı sinyalleri için reg kullanın | Zaman içinde değiştikleri için |
Sonuna $finish ekleyin | Simülasyonu durdurmak için |
Görev
Sana bir VEYA kapısı modülü verildi. Görevin, sonuçları yazdırmak için eksik uyartıyı ve $display ifadelerini eklemek.
Yapman gerekenler:
Dört giriş kombinasyonunun (00, 01, 10, 11) tümünü test etmek için uyartı ekle:
- Her satırda
xveydeğerlerini ayarla - Bir gecikme için
#10ekle - Sonucu yazdırmak için
$displayekle
$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 uyarım ekleyin ve sonucu görüntüleyin
// TODO: 0 1 için uyarım ekleyin ve sonucu görüntüleyin
// TODO: 1 0 için uyarım ekleyin ve sonucu görüntüleyin
// TODO: 1 1 için uyarım ekleyin ve sonucu görüntüleyin
$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