Atama Gecikmeleri
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 69 / 90.
Önceki derslerde genel gecikmeleri (#10 a = b;) ve kapı gecikmelerini (and #5 (out, a, b);) ele aldık. Şimdi, bir atama ifadesinin parçası olarak prosedürel bir bloğun (initial veya always gibi) içinde gerçekleşen gecikmeler olan atama gecikmelerini ele alacağız.
Bir atama gecikmesi, belirtilen süre boyunca bekler ve ardından atamayı gerçekleştirir. Gecikme, # sembolünden sonra ve atamadan önce yer alır.
Sözdizimi:
variable = #delay expression;Genel bir gecikmeden #10 a = b; (önce gecikme, sonra atama) farklı olarak, bir atama gecikmesi olan a = #10 b;, o anda b değerini alır, 10 zaman birimi bekler ve ardından bu değeri a değişkenine atar.
Atama Gecikmesi ve Genel Gecikme
| Genel Gecikme | Atama Gecikmesi | |
|---|---|---|
| Sözdizimi | #10 a = b; | a = #10 b; |
| Değer ne zaman okunur? | Atama anında (gecikmeden sonra) | Hemen (gecikmeden önce) |
| Hangi değer atanır? | O andaki b değeri | Zaman 0'daki (veya okuma zamanındaki) b değeri |
| Değer ne zaman atanır? | Gecikmeden sonra | Gecikmeden sonra |
Örnek: Fark
initial begin
b = 1;
#5 b = 0;
// Genel gecikme
#10 a1 = b; // 10 bekler, ardından b değerini okur (b=0) → a1=0
// Atama gecikmesi
a2 = #10 b; // b değerini şimdi okur (b=0), 10 bekler, ardından atar → a2=0
endBurada ikisi de aynı sonucu verir. Fark, gecikme sırasında b değiştiğinde ortaya çıkar.
Temel Farkı Gösteren Örnek
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // 0 zamanında b=1 değerini okur, 10 zamanında a1=1 değerini atar
end
initial begin
#5 b = 0; // 5 zamanında b değerini 0 olarak değiştirir (gecikme sırasında)
end- 0. zamanda:
a1,b = 1değerini okur - 5. zamanda:
b,0değerine değişir (a1hâlâ beklerken) - 10. zamanda:
a1'e1atanır (0. zamanda okunan değer),0değil
Ayrı bir blokta genel bir gecikme #10 a2 = b; kullanıldığında, b 10. zamanda okunurdu (değeri 0).
Önemli Kurallar
| Kural | Açıklama |
|---|---|
=, # işaretinden önce gelir | a = #10 b; olmalı, a #10 = b; değil |
| Değer hemen okunur | Sağ taraf hemen değerlendirilir |
| Atama gecikmeden sonra gerçekleşir | Sol taraf değeri daha sonra alır |
| Yalnızca prosedürel bloklarda kullanılır | initial veya always içinde kullanılır |
Görev
Yapılacaklar:
Eksik atama gecikmesini ekleyerek a'nın 15 zaman birimi sonra b'nin değerini almasını, ancak b'yi hemen okumasını sağla.
Kendin dene
module assignment_challenge;
reg a, b;
// Gecikme sırasında b'yi değiştirmek için ayrı blok
initial begin
b = 1;
// TODO: Atama gecikmesi ekle
// a, 15 zaman birimi sonra b'nin değerini almalı
// b'yi şimdi oku, gecikmeden sonra ata
end
initial begin
#5 b = 0; // Gecikme sırasında b'yi değiştirir
#20 $display("Time %0t: a = %b", $time, a);
$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ı13Zamanlama ve Gecikmeler
Gecikmeler NedirKapı GecikmeleriAtama GecikmeleriTimescale YönergesiSaat ÜretimiTekrar - Zamanlama Denetimi2Veri 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ı3Sayı 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