Gecikmeler Nedir
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 67 / 90.
Verilog'ta gecikmeler (delays), bir ifadenin ne zaman yürütüleceğini veya bir sinyalin ne zaman değişeceğini denetler. Gerçek donanım zamanlama davranışını modellemek için kullanılırlar.
Gecikmeler Sadece Neden Gereklidir
Gerçek donanımda sinyallerin kablolar ve mantık kapıları boyunca ilerlemesi zaman alır. Gecikmeler, bu zamanlama davranışını simüle etmenize olanak tanır.
- Simülasyonda, gecikmeler olmadan, her şey 0 anında gerçekleşir
- Gecikmeler olayları zamana yaymanızı sağlar
- Saatler ve durum makineleri gibi zamanlamaya duyarlı tasarımları test etmeye yardımcı olurlar
Gecikme Türleri
| Gecikme Türü | Amaç |
|---|---|
| Gate Delays | Mantar kapıları arasındaki gecikme |
| Assignment Delays | Değer atama sırasındaki gecikme |
| Timescale Directive | Simülasyon için zaman birimlerini ayarlar |
Temel Sözdizimi
Bir gecikme (delay), # ve ardından bir sayı ile yazılır:
#10 clk = ~clk; // 10 zaman birimi bekle, sonra saati değiştir
#5 a = b; // 5 zaman birimi bekle, sonra a = b ata# işaretinden sonraki sayı, beklenmesi gereken zaman birimi sayısıdır (time units).
Basit Örnek
initial begin
a = 0;
#10 a = 1; // 10 zaman biriminden sonra, a 1 olur
#5 a = 0; // Başka 5 zaman biriminden sonra, a 0 olur
endZamanlama:
- Time 0:
a = 0 - Time 10:
a = 1 - Time 15:
a = 0
Always Bloklarında Delays
always #5 clk = ~clk; // Her 5 zaman biriminde saati değiştirBu, sürekli bir saat sinyali oluşturur (clk değişkeninin önce bir initial bloğunda 0 olarak başlatıldığı varsayımıyla — aksi takdirde ~x ifadesi x olarak kalır).
Önemli Kurallar
| Kural | Açıklama |
|---|---|
# sembolü | Gecikmeyi belirtir |
# işaretinden sonraki sayı | Kaç zaman birimi bekleneceği |
| Gecikmeler kümülatiftir | #10 ardından #20 toplam 30 bekler |
| Sentezlenemez | Gecikmeler yalnızca simülasyon içindir |
Görev
Ne yapılmalı:
Bu kodun 0, 10, 25 ve 40 zamanlarında mesaj basmasını sağlamak için eksik gecikmeleri (delays) ekleyin.
Kendin dene
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: 10 zamanına ulaşmak için gecikme ekle
$display("Time %0t: After first delay", $time);
// TODO: 25 zamanına ulaşmak için gecikme ekle
$display("Time %0t: After second delay", $time);
// TODO: 40 zamanına ulaşmak için gecikme ekle
$display("Time %0t: End", $time);
$finish;
end
endmodule
Bu 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ı13Zamanlama ve Gecikmeler
Gecikmeler NedirKapı GecikmeleriAtama GecikmeleriTimescale DirektifiClock ÜretimiÖzet - Zamanlama Kontrolü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ı3Sayı 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ığı